GCM迁移到FCM

作者: 剑舞潇湘 | 来源:发表于2019-02-21 01:53 被阅读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推送测试:发送测试消息

    相关文章

      网友评论

        本文标题:GCM迁移到FCM

        本文链接:https://www.haomeiwen.com/subject/sgdlyqtx.html