我正在我的cordova应用程序中实现谷歌云消息服务。到目前为止一切都很顺利。然而,我有一些问题困扰着我,我希望有人能为我澄清。1) 在代码的这一部分,我获得了设备GCM regID,并将其进一步保存到服务器上。我想知道我是否应该调用这个脚本,从而在用户打开应用程序时将GCM regID保存到我的服务器上,或者应该调用并保存一次。。
function onNotification(e) {
switch( e.event )
{
case 'registered':
if ( e.regid.length > 0 )
{
console.log("regID = " + e.regid);
}
break;
}
}
2) 我在控制台上注意到我的注册ID有时会更改。我想知道为什么会发生这种情况,这是否正常,以及我是否应该更新服务器上的用户GCM regID。
如果有人能帮我澄清这些,我会很高兴。谢谢
对于(1),它应该被调用并保存在服务器上一次。就像我在应用程序中工作一样,把这个id保存到服务器上一次,一切都很好。对于(2)然而,在开发过程中,注册id有时会发生变化。原因是在开发过程中,我们会完全卸载或重新安装应用程序。从而使注册id发生更改。因为注册id是在应用程序安装时分配的。但对于特殊情况,请参阅此。
-
每次都应该调用脚本。仅当注册ID发生更改时才更新。
-
读我的答案。此外,这个答案了解更多细节
您只需要向服务器发送一次注册令牌。如果您的注册令牌发生更改,则应将更改后的注册令牌发送到服务器。
如果应用程序被卸载和重新安装,或者如果GCM确定令牌以某种方式被破坏,则注册令牌可能会更改。
您应该注册一个服务来侦听注册令牌更改,它应该扩展InstanceIDListenerService,并覆盖其onTokenRefresh方法,如下所示:
@Override
public void onTokenRefresh() {
// Fetch updated Instance ID token and notify our app's server of any changes (if applicable).
InstanceID instanceID = InstanceID.getInstance(this);
String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
Log.i(TAG, "GCM Registration Token: " + token);
// Send token to server.
}
有关更多详细信息,请考虑GCM入门文档。