android – 为什么gcm docs推荐无效注册应用程序更新?

前端之家收集整理的这篇文章主要介绍了android – 为什么gcm docs推荐无效注册应用程序更新?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
从GCM docs

When an application is updated,it should invalidate its existing
registration ID,as it is not guaranteed to work with the new version.
Because there is no lifecycle method called when the application is
updated,the best way to achieve this validation is by storing the
current application version when a registration ID is stored. Then
when the application is started,compare the stored value with the
current application version. If they do not match,invalidate the
stored data and start the registration process again.

当文档声明“不能保证与新版本一起使用”是GCM限制还是推测我的应用程序的行为从版本到版本的潜在变化?

从应用程序方面,我可以多或少保证连续版本将能够正常运行GCM以及任何应用程序特定的消息格式.我还需要重新注册吗?

如果是这样,我应该用哪个检测“新版本”:版本代码或版本名称?我的理解是,这些是“自由形式”,应用程序开发者将它们设置为他选择的任何值.那么,如果我把一个应用程序更新在商店,但不要更改versionName或versionCode怎么办?我需要重新注册GCM吗?

GCM实际上想要的是,每次首次启动新安装(每次连续启动,直到注册完成),应用程序将重新注册,而不管versionName和versionCode中的值如何.这是准确的陈述吗?

解决方法

我不记得我们在哪里阅读了,但是我们注意到,当一个设备在没有安装的应用程序上推送时,Google会使注册ID无效.

如果应用程序真正被卸载,这是很有道理的,但是如果设备实际上处于更新的中间位置,则会很快卸载并重新安装,所以google可能会误认为注册失败.

解决方案似乎在更新后首次启动时重新注册,以保证您的应用注册ID处于活动状态.

版本代码确实是一个自由选择的号码,但是您必须将其发布到Google Play的每个新版本上增加,因此您可以检查该号码是否已更改,并且知道您的应用已更新,您需要刷新注册.

编辑:

这也与C2DM的后续GCM相关,更多的文档解释了这种行为以及如何正确编写代码.

请参阅:http://developer.android.com/google/gcm/client.html与所有的细节.

具体来说这个代码,其中getRegistrationId将返回一个空字符串,以防版本代码更改强制客户端重新注册

if (checkPlayServices()) {
            gcm = GoogleCloudMessaging.getInstance(this);
            regid = getRegistrationId(context);

            if (regid.isEmpty()) {
                registerInBackground();
            }
        } else {
            Log.i(TAG,"No valid Google Play Services APK found.");
        }

猜你在找的Android相关文章