Thiết lập ứng dụng khách Nhắn tin qua đám mây của Firebase trên Android

Ứng dụng khách FCM yêu cầu thiết bị chạy Android 4.4 trở lên cũng đã cài đặt ứng dụng Cửa hàng Google Play hoặc trình giả lập chạy Android 4.4 với API Google. Lưu ý rằng bạn không bị giới hạn trong việc triển khai các ứng dụng Android của mình thông qua Cửa hàng Google Play.

Thiết lập SDK

Phần này bao gồm các nhiệm vụ bạn có thể đã hoàn thành nếu bạn đã bật các tính năng Firebase khác cho ứng dụng của mình. Nếu bạn chưa sẵn sàng, thêm căn cứ hỏa lực cho dự án Android của bạn

Chỉnh sửa tệp kê khai ứng dụng của bạn

Thêm phần sau vào tệp kê khai ứng dụng của bạn:

  • Một dịch vụ kéo dài FirebaseMessagingService . Điều này là bắt buộc nếu bạn muốn thực hiện bất kỳ xử lý tin nhắn nào ngoài việc nhận thông báo trên các ứng dụng ở chế độ nền. Để nhận thông báo trong các ứng dụng nền trước, nhận tải trọng dữ liệu, gửi tin nhắn ngược dòng, v.v., bạn phải mở rộng dịch vụ này.
  • <service
        android:name=".java.MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
  • (Tùy chọn) Trong thành phần ứng dụng, các phần tử siêu dữ liệu để đặt màu và biểu tượng thông báo mặc định. Android sử dụng các giá trị này bất cứ khi nào tin nhắn đến không đặt biểu tượng hoặc màu sắc một cách rõ ràng.
  • <!-- Set custom default icon. This is used when no icon is set for incoming notification messages.
         See README(https://goo.gl/l4GJaQ) for more. -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/ic_stat_ic_notification" />
    <!-- Set color used with incoming notification messages. This is used when no color is set for the incoming
         notification message. See README(https://goo.gl/6BKBk7) for more. -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/colorAccent" />
  • (Không bắt buộc) Từ Android 8.0 (mức API 26) và cao hơn, các kênh truyền hình thông báo được hỗ trợ và khuyến khích. FCM cung cấp một kênh thông báo mặc định với các cài đặt cơ bản. Nếu bạn muốn tạo ra và sử dụng kênh mặc định riêng của bạn, thiết lập default_notification_channel_id với ID của đối tượng kênh thông báo của bạn như thể hiện; FCM sẽ sử dụng giá trị này bất cứ khi nào các tin nhắn đến không đặt kênh thông báo một cách rõ ràng. Để tìm hiểu thêm, xem Quản lý kênh thông báo .
  • <meta-data
        android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="@string/default_notification_channel_id" />

Truy cập mã thông báo đăng ký thiết bị

Khi khởi động lần đầu ứng dụng của bạn, FCM SDK tạo mã thông báo đăng ký cho phiên bản ứng dụng khách. Nếu bạn muốn nhắm mục tiêu các thiết bị đơn lẻ hoặc tạo các nhóm thiết bị, bạn sẽ cần phải truy cập vào thẻ này bằng cách mở rộng FirebaseMessagingService và trọng onNewToken .

Phần này mô tả cách truy xuất mã thông báo và cách theo dõi các thay đổi đối với mã thông báo. Vì mã thông báo có thể được xoay vòng sau khi khởi động ban đầu, bạn thực sự nên truy xuất mã thông báo đăng ký được cập nhật mới nhất.

Mã thông báo đăng ký có thể thay đổi khi:

  • Ứng dụng được khôi phục trên thiết bị mới
  • Người dùng gỡ cài đặt / cài đặt lại ứng dụng
  • Người dùng xóa dữ liệu ứng dụng.

Lấy mã thông báo đăng ký hiện tại

Khi bạn cần phải lấy token hiện tại, hãy gọi FirebaseMessaging.getInstance().getToken() :

Java

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "Fetching FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // Log and toast
          String msg = getString(R.string.msg_token_fmt, token);
          Log.d(TAG, msg);
          Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

Kotlin + KTX

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result

    // Log and toast
    val msg = getString(R.string.msg_token_fmt, token)
    Log.d(TAG, msg)
    Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
})

Giám sát việc tạo mã thông báo

Các onNewToken cháy callback bất cứ khi nào một thẻ mới được tạo ra.

Java

/**
 * There are two scenarios when onNewToken is called:
 * 1) When a new token is generated on initial app startup
 * 2) Whenever an existing token is changed
 * Under #2, there are three scenarios when the existing token is changed:
 * A) App is restored to a new device
 * B) User uninstalls/reinstalls the app
 * C) User clears app data
 */
@Override
public void onNewToken(String token) {
    Log.d(TAG, "Refreshed token: " + token);

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // FCM registration token to your app server.
    sendRegistrationToServer(token);
}

Kotlin + KTX

/**
 * Called if the FCM registration token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the
 * FCM registration token is initially generated so this is where you would retrieve the token.
 */
override fun onNewToken(token: String) {
    Log.d(TAG, "Refreshed token: $token")

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // FCM registration token to your app server.
    sendRegistrationToServer(token)
}

Sau khi lấy được mã thông báo, bạn có thể gửi mã đến máy chủ ứng dụng của mình và lưu trữ bằng phương pháp ưa thích của bạn.

Kiểm tra các dịch vụ của Google Play

Các ứng dụng dựa trên SDK dịch vụ của Play phải luôn kiểm tra thiết bị để tìm APK dịch vụ Google Play tương thích trước khi truy cập các tính năng dịch vụ của Google Play. Đó là khuyến cáo để làm điều này ở hai nơi: trong hoạt động chính của onCreate() phương pháp, và trong nó onResume() phương pháp. Vui lòng cung trong onCreate() đảm bảo rằng các ứng dụng không thể được sử dụng mà không cần một tấm séc thành công. Vui lòng cung trong onResume() đảm bảo rằng nếu dùng quay trở lại để ứng dụng chạy thông qua một số phương tiện khác, chẳng hạn như thông qua các nút quay lại, việc kiểm tra vẫn thực hiện.

Nếu thiết bị không có một phiên bản tương thích của dịch vụ Google Play, ứng dụng của bạn có thể gọi GoogleApiAvailability.makeGooglePlayServicesAvailable() cho phép người dùng tải về các dịch vụ Google Play từ Cửa hàng Play.

Ngăn tự động khởi chạy

Khi mã thông báo đăng ký FCM được tạo, thư viện sẽ tải dữ liệu nhận dạng và cấu hình lên Firebase. Nếu bạn muốn ngăn chặn autogeneration thẻ, bộ sưu tập Analytics vô hiệu hóa và FCM tự động khởi tạo (bạn phải vô hiệu hóa cả hai) bằng cách thêm những giá trị siêu dữ liệu để bạn AndroidManifest.xml :

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" />

Để bật lại tính năng tự động khởi động FCM, hãy thực hiện cuộc gọi thời gian chạy:

Java

FirebaseMessaging.getInstance().setAutoInitEnabled(true);

Kotlin + KTX

Firebase.messaging.isAutoInitEnabled = true

Để kích hoạt lại bộ sưu tập Analytics, hãy gọi setAnalyticsCollectionEnabled() phương pháp của FirebaseAnalytics lớp. Ví dụ:

setAnalyticsCollectionEnabled(true);

Các giá trị này vẫn tồn tại qua các lần khởi động lại ứng dụng sau khi được đặt.

Bước tiếp theo

Sau khi ứng dụng client được thiết lập, bạn đã sẵn sàng để bắt đầu gửi thông điệp hạ lưu với các nhà soạn nhạc Notifications . Chức năng này được thể hiện trong mẫu QuickStart , mà bạn có thể tải về, chạy, và xem xét.

Để thêm hành vi khác, nâng cao hơn vào ứng dụng của mình, bạn có thể khai báo bộ lọc ý định và triển khai một hoạt động để phản hồi các tin nhắn đến. Để biết chi tiết, hãy xem hướng dẫn gửi tin nhắn từ máy chủ ứng dụng:

Hãy ghi nhớ rằng, để tận dụng lợi thế của các tính năng này, bạn sẽ cần một triển khai máy chủ và các máy chủ procotols (HTTP hoặc XMPP), hoặc một thực hiện các SDK quản trị .