Google is committed to advancing racial equity for Black communities. See how.
Trang này được dịch bởi Cloud Translation API.
Switch to English

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

Để viết ứng dụng khách Firebase Cloud Messaging trên Android, hãy sử dụng API FirebaseMessagingAndroid Studio 1.4 trở lên với Gradle. Hướng dẫn trong trang này giả định rằng bạn đã hoàn tất các bước để thêm Firebase vào dự án Android của mình .

Ứng dụng khách FCM yêu cầu thiết bị chạy Android 4.1 trở lên cũng đã được cài đặt ứng dụng Cửa hàng Google Play hoặc trình mô phỏng chạy Android 4.1 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.

Trước khi bắt đầu

  • Cài đặt hoặc cập nhật Android Studio lên phiên bản mới nhất.

  • Đảm bảo rằng dự án của bạn đáp ứng các yêu cầu sau:

    • API mục tiêu cấp 16 (Jelly Bean) trở lên
    • Sử dụng Gradle 4.1 trở lên
    • Sử dụng Jetpack (AndroidX) , bao gồm việc đáp ứng các yêu cầu phiên bản sau:
      • com.android.tools.build:gradle v3.2.1 trở lên
      • compileSdkVersion 28 trở lên
  • Thiết lập thiết bị vật lý hoặc sử dụng trình giả lập để chạy ứng dụng của bạn.
    Trình giả lập phải sử dụng hình ảnh giả lập với Google Play.

  • Đăng nhập vào Firebase bằng tài khoản Google của bạn.

Nếu bạn chưa có dự án Android và chỉ muốn dùng thử sản phẩm Firebase, bạn có thể tải xuống một trong các mẫu bắt đầu nhanh của chúng tôi.

Tạo dự án Firebase

Trước khi có thể thêm Firebase vào ứng dụng Android của mình, bạn cần tạo dự án Firebase để kết nối với ứng dụng Android của mình. Truy cập Tìm hiểu các dự án Firebase để tìm hiểu thêm về các dự án Firebase.

Đăng ký ứng dụng của bạn với Firebase

Sau khi có dự án Firebase, bạn có thể thêm ứng dụng Android của mình vào đó.

Truy cập Tìm hiểu các dự án Firebase để tìm hiểu thêm về các phương pháp hay nhất và những cân nhắc khi thêm ứng dụng vào dự án Firebase, bao gồm cách xử lý nhiều biến thể bản dựng.

  1. Chuyển đến bảng điều khiển Firebase .

  2. Ở giữa trang tổng quan về dự án, nhấp vào biểu tượng Android ( ) để khởi chạy quy trình thiết lập.

    Nếu bạn đã thêm ứng dụng vào dự án Firebase của mình, hãy nhấp vào Thêm ứng dụng để hiển thị các tùy chọn nền tảng.

  3. Nhập tên gói ứng dụng của bạn vào trường tên gói Android .

  4. (Tùy chọn) Nhập thông tin ứng dụng khác: Biệt hiệu ứng dụngchứng chỉ ký Gỡ lỗi SHA-1 .

  5. Nhấp vào Đăng ký ứng dụng .

Thêm tệp cấu hình Firebase

  1. Thêm tệp cấu hình Firebase Android vào ứng dụng của bạn:

    1. Nhấp vào Tải xuống google-services.json để tải tệp cấu hình Firebase Android của bạn ( google-services.json ).

    2. Di chuyển tệp cấu hình của bạn vào thư mục mô-đun (cấp ứng dụng) của ứng dụng.

  2. Để bật các sản phẩm Firebase trong ứng dụng của bạn, hãy thêm plugin google-services vào tệp Gradle của bạn.

    1. Trong tệp Gradle cấp gốc (cấp dự án) của bạn ( build.gradle ), hãy thêm các quy tắc để bao gồm plugin Gradle Dịch vụ của Google. Kiểm tra xem bạn cũng có kho lưu trữ Maven của Google.

      buildscript {
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
        }
      
        dependencies {
          // ...
      
          // Add the following line:
          classpath 'com.google.gms:google-services:4.3.3'  // Google Services plugin
        }
      }
      
      allprojects {
        // ...
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
          // ...
        }
      }
      
    2. Trong tệp Gradle mô-đun (cấp ứng dụng) của bạn (thường là app/build.gradle ), hãy áp dụng plugin Gradle Dịch vụ của Google:

      apply plugin: 'com.android.application'
      // Add the following line:
      apply plugin: 'com.google.gms.google-services'  // Google Services plugin
      
      android {
        // ...
      }
      

Thêm SDK Firebase vào ứng dụng của bạn

  1. Đối với tệp Gradle mô-đun (cấp ứng dụng) của bạn (thường là app/build.gradle ), hãy thêm các phần phụ thuộc cho các sản phẩm Firebase mà bạn muốn sử dụng trong ứng dụng của mình.

    Bạn có thể thêm bất kỳ sản phẩm Firebase nào được hỗ trợ vào ứng dụng Android của mình.

    Để có trải nghiệm tối ưu với Nhắn tin qua đám mây Firebase, chúng tôi khuyên bạn nên bật Google Analytics trong dự án của mình. Ngoài ra, là một phần của quá trình thiết lập Analytics, bạn cần thêm SDK Firebase cho Google Analytics vào ứng dụng của mình.

    Đã bật phân tích

    dependencies {
      // ...
    
      // Add the dependencies for the Firebase Cloud Messaging and Analytics libraries
      implementation 'com.google.firebase:firebase-messaging:20.2.4'
      implementation 'com.google.firebase:firebase-analytics:17.5.0'
    }
    
    // Getting a "Could not find" error? Make sure that you've added
    // Google's Maven repository to your project-level build.gradle file
    

    Analytics không được bật

    dependencies {
      // ...
    
      // Add the dependency for the Firebase Cloud Messaging library
      implementation 'com.google.firebase:firebase-messaging:20.2.4'
    }
    
    // Getting a "Could not find" error? Make sure that you've added
    // Google's Maven repository to your project-level build.gradle file
    
  2. Đồng bộ hóa ứng dụng của bạn để đảm bảo rằng tất cả các phụ thuộc đều có phiên bản cần thiết.

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ụ mở rộng 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 trong nền. Để nhận thông báo trong các ứng dụng nền trước, nhận tải 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 biểu tượng và màu 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 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" />
  • (Tùy chọn) Từ Android 8.0 (API cấp 26) trở lên, các kênh thông báo được hỗ trợ và khuyến nghị. 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 và sử dụng kênh mặc định của riêng mình, hãy đặt default_notification_channel_id thành ID của đối tượng kênh thông báo của bạn như được minh họa; 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, hãy 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, SDK FCM 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 nhóm thiết bị, bạn sẽ cần truy cập mã thông báo này bằng cách mở rộng FirebaseMessagingService và ghi đè 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 xóa ID phiên bản
  • Ứ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 truy xuất mã thông báo hiện tại, hãy gọi FirebaseInstanceId.getInstance().getInstanceId() :

Java

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                if (!task.isSuccessful()) {
                    Log.w(TAG, "getInstanceId failed", task.getException());
                    return;
                }

                // Get new Instance ID token
                String token = task.getResult().getToken();

                // 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

FirebaseInstanceId.getInstance().instanceId
        .addOnCompleteListener(OnCompleteListener { task ->
            if (!task.isSuccessful) {
                Log.w(TAG, "getInstanceId failed", task.exception)
                return@OnCompleteListener
            }

            // Get new Instance ID token
            val token = task.result?.token

            // 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

onNewToken gọi lại onNewToken kích hoạt bất cứ khi nào mã thông báo mới được tạo.

Java

/**
 * Called if InstanceID token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the InstanceID token
 * is initially generated so this is where you would retrieve the token.
 */
@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
    // Instance ID token to your app server.
    sendRegistrationToServer(token);
}

Kotlin + KTX

/**
 * Called if InstanceID token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the InstanceID 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
    // Instance ID 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. Xem tham chiếu API ID phiên bản để biết đầy đủ chi tiết về API.

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ụ 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. Bạn nên thực hiện việc này ở hai nơi: trong phương thức onCreate() của hoạt động chính và trong phương thức onResume() của nó. Việc kiểm tra onCreate() đảm bảo rằng ứng dụng không thể được sử dụng nếu không kiểm tra thành công. Kiểm tra onResume() đảm bảo rằng nếu người dùng quay lại ứng dụng đang chạy thông qua một số phương tiện khác, chẳng hạn như thông qua nút quay lại, kiểm tra vẫn được thực hiện.

Nếu thiết bị không có phiên bản tương thích của các 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 xuống các dịch vụ của Google Play từ Cửa hàng Play.

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

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

<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 FCM, hãy thực hiện cuộc gọi trong thời gian chạy:

Java

FirebaseMessaging.getInstance().setAutoInitEnabled(true);

Kotlin + KTX

FirebaseMessaging.getInstance().isAutoInitEnabled = true

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 khách được thiết lập, bạn đã sẵn sàng để bắt đầu gửi tin nhắn xuôi dòng bằng trình tổng hợp Thông báo . Chức năng này được thể hiện trong mẫu bắt đầu nhanh mà bạn có thể tải xuống, chạy và xem lại.

Để 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 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 nhớ rằng, để tận dụng các tính năng này, bạn sẽ cần triển khai máy chủ và công cụ máy chủ (HTTP hoặc XMPP) hoặc triển khai SDK quản trị .