2

我正在尝试集成GCM到我的应用程序中。我在很多地方读到onRegistered(),我们应该存储regId共享首选项。谁能告诉我,为什么需要将 ID 存储在共享首选项中。我看到了GCMRegistrar.java代码,在内部它正在执行这种机制。那么为什么需要手动将 ID 存储在共享首选项中。

4

5 回答 5

8

您不需要将其保存在 sharedPreference 中。使用以下行

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

如果注册ID为空,您可以去注册..

于 2012-10-15T11:56:55.587 回答
4

此方法用于每次不注册设备。

  1. 如果您使用 gcm-client.jar,则无需担心。这是在这个 jar 文件中实现的。
  2. 如果你想自己实现它,那么你可以

    • 使用 SharedPreferences 保存 registrationId 或将其保存在数据库或文件系统等上。
    • 不是每次都保存registrationId和注册设备。但是,这不是一个好的设计选择,因为它需要在应用程序启动时再进行一次迭代(从google获取注册id)。
于 2012-10-12T07:43:33.123 回答
3

这很简单。不要让它变得复杂。由于您的设备注册了 GSM,它不会自动收到通知。您必须在需要您的注册 ID 的第三方服务器上注册您的设备。

由于 id 存储在 pref 中,它不会一次又一次地注册设备。

于 2012-10-11T09:22:00.057 回答
1

这是一种设计选择。您可能希望将其存储在SharedPreferences、文件或 SQLite 数据库中。这实际上取决于应用程序以及您尝试使用它完成的任务。

至于为什么GCMRegistrar.java示例存储它SharedPreferences- 我认为它已经完成,因为在更新应用程序时需要使本地存储的设备 ID 无效/删除,这很容易通过删除保存在设备上的原始数据来完成。比查询数据库或通过rmfile().

于 2012-10-11T08:20:24.977 回答
1

我认为您必须自己注册它才能在将来使用它,例如与指定您的 regID 的推送服务器通信。

于 2012-10-11T09:26:21.777 回答