Firebase 雲訊息傳遞

首先,你需要按照本主題中描述步驟設定專案,將 Firebase 新增到 Android 專案

設定 Firebase 和 FCM SDK

將 FCM 依賴項新增到你的應用級 build.gradle 檔案

dependencies {
 compile 'com.google.firebase:firebase-messaging:11.0.4'
}

在最底層(這很重要)新增:

// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'

編輯你的應用清單

將以下內容新增到你應用的清單中:

  • 一項延伸 FirebaseMessagingService 的服務。如果你想要在後臺接收應用程式通知之外的任何訊息處理,則需要這樣做。

  • 擴充套件 FirebaseInstanceIdService 以處理註冊令牌的建立,輪換和更新的服務。

例如:

    <service
        android:name=".MyInstanceIdListenerService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
        </intent-filter>
    </service>
    <service
        android:name=".MyFcmListenerService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>

以下是 2 種服務的簡單實現。

要檢索當前註冊令牌,請擴充套件 FirebaseInstanceIdService 類並覆蓋 onTokenRefresh() 方法:

public class MyInstanceIdListenerService extends FirebaseInstanceIdService {

    // Called if InstanceID token is updated. Occurs if the security of the previous token had been
    // compromised. This call is initiated by the InstanceID provider.
    @Override
    public void onTokenRefresh() {
        // Get updated InstanceID token.
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();

        // Send this token to your server or store it locally
    }
}

要接收訊息,請使用擴充套件 FirebaseMessagingService 的服務並覆蓋 onMessageReceived 方法。

public class MyFcmListenerService extends FirebaseMessagingService {
    
    /**
     * Called when message is received.
     *
     * @param remoteMessage Object representing the message received from Firebase Cloud Messaging.
     */
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        String from = remoteMessage.getFrom();

        // Check if message contains a data payload.
        if (remoteMessage.getData().size() > 0) {
            Log.d(TAG, "Message data payload: " + remoteMessage.getData());
            Map<String, String> data = remoteMessage.getData();
        }

        // Check if message contains a notification payload.
        if (remoteMessage.getNotification() != null) {
            Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
        }

        // do whatever you want with this, post your own notification, or update local state
    }

Firebase 中可以按使用者的行為對使用者進行分組,例如“AppVersion,免費使用者,購買使用者或任何特定規則”,然後通過在 fireBase 中傳送主題功能向特定組傳送通知。
在主題使用中註冊使用者

FirebaseMessaging.getInstance().subscribeToTopic("Free");

然後在 fireBase 控制檯中,按主題名稱傳送通知

專題主題 Firebase 雲訊息傳遞中的更多資訊。