每次应用启动时 GCM 重新注册

Posted

技术标签:

【中文标题】每次应用启动时 GCM 重新注册【英文标题】:GCM Re-registration each time the App starts 【发布时间】:2014-11-26 04:57:47 【问题描述】:

在 GCM 上进行完整且清晰的注册后,我已经启动了我的应用程序。还将 Reg_Id 保存在本地和服务器数据库中。该应用程序与 GCM Reg_Id 完美地合作了一两天......然后停止。首先我认为我的程序有问题,但最后我知道当前设备的 GCM Reg_Id 已过期/无用。

在多次遇到这个问题后,我决定每次应用启动时都注册 GCM。 所以在我的MainActivityonCreate() 方法中我这样做了:

    GCMRegistrar.checkDevice(this);
    GCMRegistrar.checkManifest(this);

    if(!GcmResistered)
        GCMRegistrar.register(this, SENDER_ID);
        GcmResistered = true;
    

    final String regId = GCMRegistrar.getRegistrationId(this);

    if(regId == null)
        GcmResistered= false;
           
    else
      //Save it in local and server
    

我遵循了笨拙的方式。首先我注册了 GCM,然后通过GCMRegistrar.getRegistrationId() 方法检查它,只是为了避免 Reg_Id 过期问题。否则它只会获取过期的 Reg_Id 并跳过注册。

有什么完美的方法可以帮助我摆脱这种笨拙的方法。我对 GCM_Reg ID 完全绝望,只是因为这个突然死亡。

【问题讨论】:

【参考方案1】:

要解决这个问题,而不是在应用启动时重新注册,你应该写一个service,它应该在一天内在后台运行。

通过这种方法,您将始终在您的服务器上更新 GCM ID,并且可以根据您的要求提供帮助。

【讨论】:

感谢您的回答。但我不想为此启动后台服务,因为它会比现在占用更多的资源。我只是想摆脱这种重新注册。 @RanjitPati 不要让它一直运行。启动它然后做你的工作然后停止它。 警报任务也是一个选项,每天安排一次。

以上是关于每次应用启动时 GCM 重新注册的主要内容,如果未能解决你的问题,请参考以下文章

如何从应用服务器向 GCM 服务器发送发送重新注册请求以注册设备?

使所有 gcm 令牌无效

取消注册和重新注册 GCM 消息会导致两个 regId 有效。这是预期的吗?

gcm注册id的持久化

当用户更新或重新安装应用程序时,注册 ID 是不是会更改

应用程序在重新安装后使用 GCM 收到重复通知 [重复]