2013-08-23 116 views
0

是否有什么错误的事实是,我每次登录到我的Android应用程序时,我所做的第一件事就是注册到GCM。 我知道没有必要这样做,但为了检查注册ID是刷新到新的还是一样的,我打算重新注册。明确重新注册设备到GCM

final String regId = GCMRegistrar.getRegistrationId(this); 
if (regId.equals("")) { 
    GCMRegistrar.register(this, SENDER_ID); 
} else { 
    Log.v(TAG, "Already registered"); 
} 

我也想知道如果通过重新注册GCM我不知何故迫使注册ID过期。

谢谢!!!

回答

2

1部分:

为了检查,如果注册ID被刷新到一个新的或它仍然是相同的,我打算重新注册。

现在,如果你看到标题下的第二点上Architectural Overview页面启用GCM,它说:

Note that Google may periodically refresh the registration ID, so you should design your Android application with the understanding that the com.google.android.c2dm.intent.REGISTRATION intent may be called multiple times. Your Android application needs to be able to respond accordingly.

所以,谷歌会自动向您发送该广播,当更新的ID。您可能不一定发送检查ID的空白。当Google更改ID时,它也不会是空的,对吗?所以,如果你要处理的ID的续约/清爽,那么你可以做到以下几点:

你应该有一个Broadcast Listener它可以处理com.google.android.c2dm.intent.REGISTRATION意向,其中谷歌发送到应用程序时,它必须刷新注册ID。广播接收器将具有带有意图的onReceive方法。根据您的意图,您可以获得Bundle,您可以使用它从Google提取新的注册ID。您可以将其保存并将其发送到第三方服务器,以替换您之前为该用户注册的ID。

另外你可能会看到thisIn GoogleCloudMessaging API, how to handle the renewal or expiration of registration ID?这个问题回答。

第2部分: 回答你的问题的第二部分:

你可能想在这里阅读Unregistration。该文档说If you unregister and then re-register, GCM may return the same ID or a different ID—there's no guarantee either way.

我认为,无论何时身份证即将过期/更新,Google都会向您发送新身份证。然后Google的回复将包含一个规范注册ID(这是新的注册ID)。此响应表明您的服务器应删除旧的注册ID并只使用新的注册ID。 (来源:Unregistering and re-registering for GCM messages causes two regId's to be valid. Is this as intended? @Eran问题回答)

希望这可以帮助你理解如何处理它。

+0

谢谢。我想我跳过了GCM发送给客户端的那部分注册ID的广播。你能写信给我或者请教一个如何捕捉这个广播信息的例子吗?:)比你! –

+0

对不起,我现在找不到一段代码,但如果您阅读http://stackoverflow.com/questions/17891399/should-applications-call-gcm-register-every-seven-days-to-ensure-有效注册/ 17892487#17892487,它应该是直截了当,就像你实现其他广播接收器。实际的文档不提供代码sniplets,但只是提到了上述事情。 –

+0

@justME你不需要定义一个新的'BroadcastReceiver'。您只能在'GCMBroadcastReciever'中处理'''。把它放在'intent-filter'里面。每当你收到广播时,检查'action'是否是'com.google.android.c2dm.intent.REGISTRATION'。然后你可以通过从意图中提取ID来更新ID。现在希望它有点清楚。 –