我正在使用GCM服务开发一个小应用程序。
之前,我尝试向自己发送一条消息,但(服务器端)答案是:
“成功”:0, “失败”:1, “canonical_ids”:0 “结果”:[{ “错误”: “NotRegistered”}]}
但是在我的应用程序开始时,我检查一下:
final String regId = GCMRegistrar.getRegistrationId(this); if (regId.equals(""))
{
// Register
GCMRegistrar.register(this, SENDER_ID);
}
else ...
似乎很明显getRegistrationId()只能在本地工作,(SharedPreferences?)..
好消息是我从来没有取消注册我的应用程序,只是重新安装它,而不是更改版本号(因为它仍然在测试中),所以在这种情况下我的帐户已经过期,在这种情况下谷歌不应该发送给我另一个我可以在这里找到的身份:
@Override
protected void onRegistered
???
但是,有一种安全的方法可以了解我的应用是否已注册GCM服务器端?
谢谢!
编辑:
我在想这个:
当我通过Eclipse重新安装我的应用程序时,有一段时间没有安装我的应用程序,如果GCM服务器在那一刻发送消息没有接收器,那么谷歌取消了我的ID。 你认为这个想法是一个愚蠢的想法吗?
答案 0 :(得分:0)
按照以下步骤http://developer.android.com/google/gcm/gs.html。
可能会发生这种情况,因为某些时间gcm注册ID已过期,所以每次你应该检查它是否已注册,如果没有注册它
答案 1 :(得分:0)
您应该只注册一次设备。以某种方式保存registrationId(共享偏好是一个好的)并使用它。
来自文档:
注册GCM申请并返回注册ID。 安装应用程序后,必须调用此项,并将返回的注册ID发送到服务器。
在我做过的一些测试中,gcm.register(id)
返回的注册ID对于设备,应用程序对并不总是相同。不过,谷歌说:
重复调用此方法将返回原始注册ID。
如果方法gcm.register(id)
返回一个id,那么它将一直有效。
最佳。