如果客户端发送新的注册令牌时应用服务器离线怎么办?

Posted

技术标签:

【中文标题】如果客户端发送新的注册令牌时应用服务器离线怎么办?【英文标题】:What if the app server is offline when the client sends a new registration token? 【发布时间】:2016-11-27 19:57:35 【问题描述】:

如果我的 android 客户端应用收到新的注册令牌,它将通过 FCM 将此新令牌发送到应用服务器。如果应用服务器拥有新的令牌,他可以向客户端应用发送消息。

如果客户端离线,FCM会存储消息,直到客户端上线再将消息转发给客户端。到目前为止,一切顺利。

但是,如果客户端想要发送一个新的注册令牌,但应用服务器离线,FCM 不会存储令牌以便在他一开始就将它们发送到应用服务器上线。

是否存在现有机制(除了定期轮询注册令牌的计时器机制),应用服务器获取注册令牌,直到其状态从不可访问变为可访问?

【问题讨论】:

据我所知没有机制,您需要确保应用服务器始终在线。我所采取的是应用程序检查我的 onResume 中是否有新令牌并一直上传到服务器,不能冒险拥有不是最新的令牌 确保您的应用服务器不会宕机。如果您的后端不起作用,那么您的应用程序就不起作用。我不明白你在问什么。通过确保必要的正常运行时间来完全避免问题,有一些策略可以尽可能地增加它。不要针对罕见的极端情况进行优化,无论出于何种原因,您的后端都无法正常工作。更有可能的问题是您的客户端处于离线状态或处于速度较慢或无法访问您的后端的网络中。你在你的应用程序中处理过这些问题吗?那你就真的没有什么好担心的了。 【参考方案1】:

正如@Manny264 在 cmets 部分中已经提到的,目前还没有针对这种情况的机制或 API。而且由于这里的问题是因为预计将在您端处理的 App Server,我认为您也非常希望您自己处理这种情况。

我建议在尝试将注册令牌发送到您的应用服务器时检查您收到的响应,如果失败,请稍后重新尝试请求,但您已经提到您不想要类似定时器机制之类的。

你可以做的是利用Topics Messaging,拥有一个所有用户自动订阅的通用主题(在这种情况下,客户端应用程序能够成功订阅),并且如果您的 App Server 关闭了一段时间,再次上线后,使用InstanceID API 检索已订阅令牌列表,然后检查并比较是否有任何新令牌未保存在您的应用服务器尚未。

不过,选择取决于您。我认为如果你只是在客户端应用端实现一个重试机制会更容易。

【讨论】:

以上是关于如果客户端发送新的注册令牌时应用服务器离线怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

keycloak javascript适配器请求离线令牌

Angular Node - 在打开新的浏览器窗口时向服务器发送令牌

移动应用的身份验证令牌,是不是存在离线暴力破解漏洞?

如何在有在线交易时向离线应用发送通知

为啥我必须对注册令牌保密?

服务器端的服务器发送事件成本