0
0
Lập trình
Admin Team
Admin Teamtechmely

Message Mirror: Ứng dụng Android gửi thông báo và SMS hiệu quả

Đăng vào 4 ngày trước

• 8 phút đọc

Giới thiệu

Trong thời đại số hiện nay, việc quản lý thông báo trên điện thoại thông minh trở nên quan trọng hơn bao giờ hết, đặc biệt là khi bạn muốn đảm bảo rằng thông tin quan trọng không bị mất mát. Message Mirror là một ứng dụng Android mã nguồn mở cho phép bạn chuyển tiếp các thông báo và SMS đến một webhook mà bạn kiểm soát. Bài viết này sẽ giúp bạn hiểu rõ hơn về ứng dụng, cách thức hoạt động, cũng như các mẹo và thực tiễn tốt nhất khi sử dụng.

Tóm tắt nhanh (TL;DR)

  • What: Ứng dụng Android mã nguồn mở gửi thông báo và SMS đến webhook của bạn.
  • How: Sử dụng dịch vụ foreground và engine Flutter không giao diện; NotificationListenerService trong Kotlin chuyển tiếp dữ liệu đến Dart qua MethodChannel, sau đó gửi HTTP POST với cơ chế thử lại.
  • Why: Giữ quyền kiểm soát dữ liệu của bạn, hoạt động ổn định qua các lần khởi động lại, tùy chỉnh payloads.
  • Repo: GitHub

Vấn đề và Giải pháp

Trong quá trình tìm kiếm một giải pháp đơn giản và đáng tin cậy để chuyển tiếp các tin nhắn từ điện thoại Android của mình đến một máy chủ mà tôi kiểm soát, tôi đã gặp phải một số vấn đề với các ứng dụng hiện có:

  • Chuyển tiếp dưới dạng JSON đến webhook của bản thân, không phải của bên thứ ba.
  • Đảm bảo hoạt động liên tục qua các lần khởi động lại và mất kết nối.
  • Chỉ chuyển tiếp từ các ứng dụng mà tôi chọn.
  • Giảm thiểu sự phức tạp và cung cấp nhật ký rõ ràng.

Vì vậy, tôi đã phát triển Message Mirror, một ứng dụng Android luôn hoạt động, có khả năng thu thập thông báo và SMS và chuyển tiếp chúng đến một endpoint đã cấu hình.

Mục tiêu thiết kế

  • KISS: Mã nguồn nhẹ, ưu tiên các thành phần nền tảng thay vì các phụ thuộc nặng.
  • Kiểm soát dữ liệu: Không sử dụng máy chủ bên thứ ba; bạn tự cấu hình endpoint.
  • Gửi thông báo bền bỉ: Sử dụng dịch vụ foreground và engine Flutter không giao diện với hàng đợi thử lại.
  • Trải nghiệm người dùng thực tiễn: Cung cấp nhật ký rõ ràng và bộ lọc theo ứng dụng.
  • Tối giản: Không thêm tính năng thừa thãi cho các tình huống không cần thiết.

Kiến trúc tổng quan

Copy
┌──────────────┐     onNotificationPosted       ┌──────────────────────┐
│ Android OS   │ ─────────────────────────────▶ │ MsgNotificationListener│ (NotificationListenerService)
└──────────────┘                                 └─────────┬────────────┘
                                                         (A)│ gọi trực tiếp
           broadcast lol.arian.notifmirror.NOTIF_EVENT  (B)│ phát sóng
                                                           ▼
                                                 ┌──────────────────────┐
                                                 │ NotifEventReceiver   │ (BroadcastReceiver)
                                                 └─────────┬────────────┘
                                                           │ MethodChannel("msg_mirror")
                                                           ▼
                                                 ┌──────────────────────┐
                                                 │ Dart MessageStream   │
                                                 │  - xây dựng payload   │
                                                 │  - loại bỏ trùng lặp  │
                                                 │  - POST đến endpoint  │
                                                 │  - hàng đợi thử lại    │
                                                 └─────────┬────────────┘
                                                           │ HTTP
                                                           ▼
                                                    Your Webhook/API

Extras:
- AlwaysOnService: Dịch vụ foreground khởi động engine Flutter không giao diện
- BootReceiver: Khởi động dịch vụ sau khi thiết bị khởi động
- ApiSender: HTTP fallback nếu channel không sẵn sàng
- LogStore: Ghi log vào file và logcat

Các phần cốt lõi (mã ví dụ)

1) Kotlin: Bắt thông báo

kotlin Copy
// android/app/src/main/kotlin/.../MsgNotificationListener.kt (trích đoạn)
override fun onNotificationPosted(sbn: StatusBarNotification) {
    val n = sbn.notification ?: return
    val extras: Bundle = n.extras
    val app = sbn.packageName ?: ""
    val title = extras.getCharSequence("android.title")?.toString() ?: ""
    
    // Xử lý các trường thông báo
    // ...
}

2) Kotlin: Khởi động engine trong dịch vụ foreground

kotlin Copy
// android/app/src/main/kotlin/.../AlwaysOnService.kt (trích đoạn)
private fun initFlutterEngine() {
    // Khởi động engine
    // ...
}

3) Dart: Xây dựng payload

dart Copy
// lib/message_stream.dart (trích đoạn)
Future<Map<String, dynamic>?> _buildNotifPayload(Map<dynamic, dynamic> m) async {
  // Xây dựng payload từ thông báo
  // ...
}

Tùy chỉnh Payload

Bạn có thể tùy chỉnh JSON với một mẫu lưu trong preferences. Ví dụ:

json Copy
{
  "message_body": "{{body}}",
  "message_from": "{{from}}",
  "message_date": "{{date}}"
}

Hướng dẫn sử dụng OEM

  • Sử dụng dịch vụ foreground để đảm bảo quy trình không bị gián đoạn.
  • Đảm bảo khởi động lại sau khi thiết bị khởi động.
  • Tạo giao diện người dùng để người dùng có thể cấu hình ứng dụng một cách dễ dàng.

Bảng quyền

  • POST_NOTIFICATIONS (Android 13+)
  • BIND_NOTIFICATION_LISTENER_SERVICE
  • FOREGROUND_SERVICE
  • INTERNETACCESS_NETWORK_STATE

Kiểm tra nhanh: webhook cục bộ

Khởi động một máy chủ để xác minh payload:

bash Copy
npx http-echo-server --port 9090

Bảo mật và Quyền riêng tư

  • Nội dung thông điệp chỉ lưu trữ trên thiết bị cho đến khi bạn gửi đến endpoint.
  • Bạn có quyền kiểm soát các ứng dụng nào được chuyển tiếp thông báo.

Kết luận

Message Mirror là một giải pháp hữu ích cho những ai muốn quản lý thông báo và SMS của mình một cách hiệu quả hơn. Nếu bạn thấy bài viết này hữu ích, hãy thử nghiệm với ứng dụng và để lại phản hồi cho tôi biết. Nếu bạn có bất kỳ thắc mắc nào, đừng ngần ngại hỏi nhé!

FAQ

1. Làm thế nào để cài đặt Message Mirror?
Bạn chỉ cần tải xuống mã nguồn từ GitHub và làm theo hướng dẫn cài đặt.

2. Ứng dụng có miễn phí không?
Có, Message Mirror là mã nguồn mở và hoàn toàn miễn phí.

3. Tôi có thể tùy chỉnh payload không?
Có, bạn có thể tùy chỉnh payload theo nhu cầu của mình.

Liên kết tài nguyên

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào