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 云消息传递中的更多信息。