是否需要GCM 3.0刷新注册令牌?

Pat*_*ick 19 android google-cloud-messaging

使用最新的GCM更新(3.0)是否仍需要在重启等情况下处理刷新注册令牌? 本文讨论了使GCM可靠并涵盖注册令牌可以更改的几个条件.这些步骤是否必须在最新版本下?在IO 2015讨论期间,他们谈到了注册令牌是好的,直到从设备上卸载应用程序.

InstanceID instanceID = InstanceID.getInstance(this);
String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
    GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
Run Code Online (Sandbox Code Playgroud)

bit*_*tek 18

注册令牌不应在重新启动后刷新,但在其他情况下可能会刷新,因此您需要处理它.

使用更新的API,您需要实现InstanceIDListenerService以处理令牌刷新,如google-services中所示#smart #gcm示例应用程序

    /**
     * Called if InstanceID token is updated. This may occur if the security of
     * the previous token had been compromised. This call is initiated by the
     * InstanceID provider.
     */
    // [START refresh_token]
    @Override
    public void onTokenRefresh() {
        // Fetch updated Instance ID token and notify our app's server of any changes (if applicable).
        Intent intent = new Intent(this, RegistrationIntentService.class);
        startService(intent);
    }
Run Code Online (Sandbox Code Playgroud)

关于可能发生令牌刷新的其他情况.

现有的注册令牌可能在许多情况下不再有效,包括:
- 如果客户端应用程序注销GCM.
- 如果客户端应用程序自动取消注册,则可能会在用户卸载应用程序时发生.例如,在iOS上,如果APNS反馈服务将APNS令牌报告为无效.
- 如果注册令牌过期(例如,Google可能决定刷新注册令牌,或者iOS设备的APNS令牌已过期).
- 如果客户端应用程序已更新,但新版本未配置为接收消息.

对于所有这些情况,请从应用服务器中删除此注册令牌,然后停止使用它来发送消息.

为了保护客户端应用和应用服务器免受潜在的恶意重用注册令牌,您应该定期从服务器启动令牌刷新.从服务器端启动GCM注册令牌刷新时,客户端应用程序必须使用GCM注册客户端/服务器握手处理tokenRefreshed消息
有关身份和令牌刷新过程的详细信息,请参阅API参考.

  • 谢谢!但是在GCM的[doc](https://developers.google.com/cloud-messaging/registration#unregistration-and-unsubscription)中,不建议取消注册.还有另一种更好的方法吗? (2认同)