我知道在 Android 和 iOS 和 WP7 中(在哪些移动平台中,“推送令牌”不是永久性的?)提供给设备的推送令牌可以更改。
这意味着我们应该通过要求一个新的令牌来处理这个问题,至少每次我们的应用程序启动时。
然而,这与我迄今为止在谷歌教程中发现的完全矛盾。(我不记得我在哪里找到了这段代码,但我很确定它是由谷歌提供的)代码看起来像这样:
//registering for push
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
GCMRegistrar.register(this, SENDER_ID);
Log.i("****************","I just Registered!!");
} else {
Log.i("****************","Already registered");
}
上面的代码将GCMRegistrar.register(this, SENDER_ID);
只执行一次该行,即应用程序第一次启动。但我想这是错的吧?因为如果令牌发生变化,我们的应用程序将无法看到它,因为它只需要一次令牌......
编辑
实际上,我刚刚找到了该代码的确切位置。看看这里:入门指南
我引用:
在 onCreate() 方法中,添加以下代码:
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
GCMRegistrar.register(this, SENDER_ID);
} else {
Log.v(TAG, "Already registered");
}
当您注册设备时,该onRegistered(Context context, String regId):
函数被调用。关于这个功能,教程说:
onRegistered(上下文上下文,字符串 regId): 在收到注册意图后调用,将 GCM 分配的注册 ID 作为参数传递给该设备/应用程序对。通常,您应该将 regid 发送到您的服务器,以便它可以使用它向此设备发送消息。
所以它说我应该将此ID发送到我的服务器。但是之前的代码告诉我们这个函数只会被调用一次!那么当令牌发生变化时会发生什么?我将如何将它刷新到我的服务器?我想我应该在每次应用程序启动时运行这个功能......
我在这里错过了什么吗?代码错了吗?任何想法都会有所帮助:)