0

我想为 Android 构建一个 GCM 支持的应用程序,到目前为止进展顺利。这真的很简单,我想要实现的只是允许用户将一些消息从他的计算机推送到他的设备。

一旦用户调用register,他会得到一个注册 id,该注册 id 保存在共享首选项中。他可以将此注册密钥通过电子邮件发送给自己,并将其保存在计算机上,从而允许计算机向他推送通知。

根据我的阅读,注册 ID 可能会每隔一段时间过期,register再次调用是明智的。GCM 的文档反过来说:

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

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

同一设备上的同一应用程序的注册密钥是否会更改?如果是这样,我是否还需要服务器来管理和不断更新这些注册密钥?(如果是这样的话:感觉很笨拙,我还需要编写一个 AppEngine 后端来管理他们不断更新的注册密钥,而且我似乎无法理解这种实现的基本原理。)谢谢。

4

2 回答 2

0

正如您在案例中所描述的,服务器端的目的不仅仅是保留单个设备的注册 ID。它用于维护一个包含多个注册 ID 的数据库,并且可以决定何时向它们发送消息以及这些消息将包含哪些内容。

在您的简单情况下,您似乎不需要服务器端(假设通过电子邮件发送注册 ID 对于您的目的来说是一个足够好的解决方案)。注册 ID 不会经常更改(根据我的经验),即使更改了,您也可以随时按照第一次发送的方式重新发送。

于 2013-08-12T13:17:57.203 回答
0

在调用向 GCM 注册设备的功能之前,您可以检查函数isRegistered(上下文上下文) 这告诉我们应用程序是否已向 GCM 注册以进行推送通知

Do the registration keys change for the same application on the same device?

是的,注册 ID 可能会更改或过期

这是来自Android文档的一些代码

int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
int currentVersion = getAppVersion(context);
if (registeredVersion != currentVersion || isRegistrationExpired()) {
    Log.v(TAG, "App version changed or registration expired.");
    return "";
}

因此,一旦应用程序升级到新版本,始终建议从您的服务器清除(无效)所有注册 ID,然后再次注册

于 2013-08-12T13:18:11.613 回答