Android 在共享首选项GCM上存储注册ID

Android 在共享首选项GCM上存储注册ID,android,google-cloud-messaging,Android,Google Cloud Messaging,我正在尝试将GCM集成到我的应用程序中。我在很多地方读到,在onRegistered()中,我们应该将regId存储在共享首选项中。谁都知道,为什么需要在共享首选项上存储ID。我看到了gcmregistar.java代码,它在内部执行这个机制。那么为什么需要手动将ID存储在共享首选项中。这是一种设计选择。您可能希望将其存储在SharedReferences、文件或SQLite数据库中。这实际上取决于应用程序以及您试图用它完成的任务 至于为什么gcmregistar.java示例将其存储在Shar

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

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


至于为什么
gcmregistar.java
示例将其存储在
SharedReferences
中,我认为已经完成了,因为在更新应用程序时需要使本地存储的设备ID无效/删除,这可以通过删除保存在设备上的原始数据轻松完成。与通过
rmfile()

查询数据库或删除文件相比,查询数据库更简单,节省资源(所需代码不超过3-4行)。不要把它复杂化。 由于您的设备已向GSM注册,因此不会自动收到通知。 您必须向需要您的注册ID的第三方服务器注册您的设备


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

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

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

  • 如果您使用gcm-client.jar,那么您不必担心它。这是在这个jar文件中实现的
  • 如果您想自己实现它,那么您可以

    • 使用SharedReferences保存registrationId,或将其保存到数据库或文件系统等
    • 不要每次都保存注册id和注册设备。然而,这不是一个好的设计选择,因为当应用程序启动时,它需要一次迭代(从google获取注册id)

  • 您不需要将其保存在SharedReference中

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

    如果注册id为空,您可以进行注册。

    谢谢。.这是我的疑问。。我正在使用GCM.jar。所以我想我不必担心这个。任何人都可以看到这个。不要用它。GCMRegistar已弃用。实际上,您应该将其保存在sharedPrefs中。看看这里的指南有那么简单吗?没有别的事可做吗?