0

我正在使用 GCM 服务开发一个小型应用程序。

之前,我尝试向自己发送一条消息,但是(服务器端)答案是:

“成功”:0,“失败”:1,“canonical_ids”:0,“结果”:[{“错误”:“未注册”}]}

但是在我的应用程序开始时,我检查了这个:

final String regId = GCMRegistrar.getRegistrationId(this);  if (regId.equals("")) 
        {
                //  Register
            GCMRegistrar.register(this, SENDER_ID);


        } 
        else ...

很明显 getRegistrationId() 只能在本地正常工作,(SharedPreferences ?)..

好消息是我从来没有取消注册我的应用程序,只是重新安装它,而不是更改版本号(因为它仍在测试中)所以在这种情况下,我的帐户已经过期,在这种情况下,谷歌不应该向我发送另一个我的 id可以在这里抓到:

@Override
    protected void onRegistered

???

但是,有一种安全的方法可以了解我的应用程序是否已注册 GCM 服务器端?

谢谢!


编辑:

我在想这个:

当我通过 Eclipse 重新安装我的应用程序时,有一段时间我的应用程序没有安装,如果 GCM 服务器在那一刻向我发送一条消息,则没有接收器,因此谷歌取消了我的 ID 验证。在您看来,这个想法是愚蠢的想法吗?

4

2 回答 2

0

您应该只注册一次设备。以某种方式保存registrationId(共享首选项很好)并使用它。

从文档中:

注册 GCM 申请并返回注册 ID。您必须在安装应用程序时调用一次,并将返回的注册 ID 发送到服务器。

在我进行的一些测试gcm.register(id)中,设备、应用程序对返回的注册 ID 并不总是相同的。然而,谷歌说:

重复调用此方法将返回原始注册 ID。

如果该方法gcm.register(id)返回一个 id,那么它将一直有效。

最好的。

于 2013-05-22T15:08:53.230 回答
0

按照这些步骤http://developer.android.com/google/gcm/gs.html

这可能会发生,因为有时 gcm 注册 id 会过期,所以每次你应该检查它是否注册,如果没有注册它

于 2013-05-22T13:53:36.640 回答