Android开发Android技术知识Android开发

GCM迁移到FCM

2019-02-21  本文已影响15人  剑舞潇湘

2019年4月11日,Google将停用GCM服务器和客户端的API,因此需在此之前将GCM迁移到FCM。

迁移分为两种情况:

将GCM项目迁移到FCM

将GCM项目迁移到已有的Firebase项目

将GCM项目迁移到FCM

适用于GCM项目尚未集成Firebase、为该项目新建Firebase项目的情况。

迁移过程涉及到Firebase控制台、客户端、服务器三个部分。

迁移步骤如下:

1. 控制台:将GCM项目导入为Firebase项目

2. 客户端:将GCM依赖替换为FCM依赖

3. 客户端:在AndroidManifest中删除GCM相关权限和receiver

4. 服务器:更新服务器端点

5. 客户端:更新token和消息代码

5.1 更新获取token的方式

5.2 更新监听消息的方式

5.3 更新订阅topic

注意⚠️:根据API文档,获取token的方式与上述迁移指南有出入,FirebaseInstanceIdService.onTokenRefresh()FirebaseInstanceId.getToken()均已废弃。参照官方demo,应使用如下方法:

监听新token

public class MyFirebaseMessagingService extends FirebaseMessagingService {
    /**
     * 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);
    }
    // [END on_new_token]
}

获取token

// Get token
// [START retrieve_current_token]
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();
        }
    });
// [END retrieve_current_token]

将GCM项目迁移到(已有的)Firebase项目

适用于已有Firebase项目,将现有GCM项目添加至该Firebase项目的情况。

迁移步骤如下:

  1. 执行上一节的第2-5步。

  2. 使用不带参数的getToken()获取token,将其与Firebase项目和server key关联

  3. [如有] 取消tokens在GCM项目topics的订阅,并重新订阅到等效的Firebase项目的topics

  4. 使用旧server key向现有的GCM项目实例(旧tokens)发送消息,直到旧实例都升级为FCM实例

第2步需要服务器将GCM的token和FCM的token分开存储,客户端向服务器上报token的接口也需更改或增加参数以作区分。
发送推送时,GCM的token用户用原有GCM的server_key推送,FCM的token用户用新的FCM的server_key推送。

如需测试迁移正确性,请参阅:
FCM推送测试:发送测试消息

上一篇下一篇

猜你喜欢

热点阅读