【问题标题】:InstanceID, what if I do not succeed on sending the token to my server?InstanceID,如果我没有成功将令牌发送到我的服务器怎么办?
【发布时间】:2023-03-19 17:10:01
【问题描述】:

我使用 Google Cloud Messaging (GCM) 创建了推送通知服务器 (PNS)。 使用这种架构,我的服务器必须知道与用户关联的令牌才能向他发送推送通知。

我扩展了InstanceIDListenerService 类,当令牌被刷新时它会被正确通知(我用 adb 对其进行了测试)。当它的方法 onTokenRefresh() 被调用时,我会使用新的令牌,到目前为止,一切都很好。

我的问题如下:如果我无法将此新令牌发送到我的服务器怎么办? (网络错误、缺少连接、设备突然关闭或其他原因……)。 我是否必须存储服务器不知道我的新令牌的某个地方(首选项?)并在可能的情况下重试?有没有办法让操作系统执行这个操作?

【问题讨论】:

  • “我是否必须在某个服务器不知道我的新令牌的地方存储(首选项?)并在可能的情况下重试?” gcmquickstart sample app 就是这样做的,所以你可以看看他们的实现。
  • 好吧,这个想法还不错。但是有一个问题:当我被通知必须刷新令牌时,我的应用程序可能无法运行,那么如果我没有机会将令牌发送到我的服务器,我将失去所有(最终)通知在 onTokenRefresh 调用和我的应用程序的下一次启动之间。 (也许我过度放大了问题)

标签: android google-cloud-messaging token instanceid


【解决方案1】:

您可以使用GCM NetworkManager 来排队、安排、检查网络连接和...,它非常可靠和有用,它可以处理您想要的所有任务。

您还必须将令牌保存在设备的某个位置,可能在您的共享首选项中,直到您确保您的服务器接收到它为止。请注意,如果您想使用 GCM 的其他功能,例如topic messaging,您必须保存并使用令牌进行所有主题注册。

【讨论】:

    【解决方案2】:

    您的应用程序(当它运行时)应始终检查令牌是否已发送到服务器。当调用 onTokenRefresh 时,您应该生成一个新令牌并将其发送到服务器。如果将令牌发送到服务器失败,那么您的应用下次运行时应该重试。

    您是正确的,如果您未能将令牌发送到服务器 onTokenRefresh,您的应用将不会收到通知,直到它再次运行并将令牌成功发送到服务器。

    另请注意,令牌刷新不应经常发生。仅当应用程序被卸载并重新安装或令牌被认为不再安全时才会发生这种情况。

    【讨论】:

      猜你喜欢
      • 2017-08-23
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 2016-11-08
      • 2023-04-02
      • 2017-11-08
      相关资源
      最近更新 更多