发送触发来自服务器的拉取请求的 Firebase 消息或通知的最佳方式


  • 目前,我负责的Android应用程序每分钟在服务器上执行一次"拉动",以恢复数据并使用此数据更新片段。显然,当设备切换到打瞌睡模式时,这不起作用。所以我决定按照谷歌的建议使用FCM。

约束条件

  • 用户需要知道即使在打瞌睡模式下也可以使用新数据。

  • 为了不对应用程序进行太多更改,我不想在收到 fcm 消息时发送 firebase 消息中的数据,而是向服务器发送 https 请求。

  • fcm 消息必须:

    1. 通知用户有新数据可用。

    2. 如果用户在打开屏幕后按下通知返回应用程序,则必须触发 https 请求并更新片段。 我将补充一点,它必须最迟在用户返回应用程序时触发。

我现在的解决方案

我使用了具有高优先级的数据消息而不是通知消息,因为通知消息需要用户录制通知以触发操作。

在收到消息中:

  • 我发送重定向到我的应用程序的通知。
  • 我将请求发送到服务器并更新我的应用程序。

我的解决方案的缺点:

  • 如果我的应用程序在屏幕关闭时被系统杀死,这是怎么回事?
  • 我的请求有时间限制,当手机退出打瞌睡模式时完成。

问题:

  • 这个解决方案是最好的吗?
  • 有没有其他方法可以继续?
  • 也许我可以安排一个任务,当用户在收到消息中恢复我的应用程序时立即运行?但我不知道该怎么做。

使用 WorkManager 安排后台工作立即运行。 它还将重试,直到您的代码指示它成功。

我回答自己结束这个主题,希望它可以帮助某人!

  • 一夜后...我绝对不喜欢工作管理器解决方案。即使在实践中它可以工作,我也不喜欢将 API 用于计划外的用途。如果谷歌告诉我立即启动任务并不重要,他们(:))比我好,我相信他们!

在这种情况下,我认为我的任务可能会被推迟,例如因为操作系统想要将呼叫与其他应用程序分组。可能有我不知道的内部条件。

  • 特别是因为我找到了一个更简单的解决方案。

在 onMessageReceived 中,我使用了一个简单的布尔指示符。 在我要更新的活动的 onResume 中,我阅读了此指标,例如,如果为 true,则启动我的请求。

我不再需要调度程序,毕竟如果它不是 100% 可靠的,没关系:

  • 如果 fcm 可以向我发送消息,那么当用户打开屏幕时,很有可能有网络。
  • 即使没有,也不是很严重,因为我可以警告可以继续的用户(例如通过打电话!!!)

相关内容

  • 没有找到相关文章

最新更新