gpt4 book ai didi

android - FCM 高优先级消息如何以及在什么条件下被取消优先级?如何从服务器获取缓存的 FCM 消息?

转载 作者:行者123 更新时间:2023-12-04 23:38:36 34 4
gpt4 key购买 nike

根据FCM documentation如果 FCM 服务器检测到高优先级消息不会导致用户交互的模式,则高优先级消息可能会被取消优先级。该机制的细节未指定。问题:

  • 这究竟是如何工作的?
  • 检测算法如何收集数据?
  • 消息的优先级降低了多长时间?

  • 其次,Android 应用程序有一个方法可以检查最近收到的消息的年龄。如果具有正常优先级的消息尚未传递但仍缓存在 FCM 服务器上,则此方法有时会报告错误的结果。问题:
  • 如何让 Android 应用先获取所有消息?

  • 一些可选的背景信息:

    我正在为一些安全关键应用程序编写监控应用程序。本地服务器可以处于两种互斥状态中的一种:“空闲”或“警报”。状态通过 FCM 发送给所有注册的客户端。为确保服务器仍在运行,该状态会定期作为心跳广播。这些心跳消息以正常优先级发送。此外,只要状态从“空闲”变为“警报”,就会立即发送一条额外的、具有高优先级的另类消息。例如。消息的顺序类似于
    ...  idle  idle  idle  *alarm*  alarm  alarm  alarm  idle  idle  ...

    由于连续的第一条警报消息触发通知,而所有其他消息只有正常优先级,因此(希望)没有被 FCM 取消优先级的风险。

    Android 应用程序包含一个 PeriodicWorkRequest用作看门狗并检查心跳是否仍在输入。如果最近收到的消息太旧(超过 30 分钟),则会向用户显示“连接丢失”通知以警告他。

    这是问题所在:

    通常的心跳消息具有正常的优先级,并缓存在 FCM 服务器上。看门狗发出错误的“连接丢失”通知。设备被唤醒(由于通知),突然最近的心跳消息进来(它们在服务器上折叠)。

    我看到两个解决方案(或解决方法):
  • 将所有消息设为高优先级消息,以便立即传递它们并且看门狗始终看到最新消息。但是,我担心 FCM 去优先级算法会起作用。(99,95% 是无聊的“空闲”消息)
  • 在看门狗检查最新消息的时间并最终发出警告之前,我必须以编程方式确保已获取所有消息。

  • 边注:

    我完全理解为什么 Google 对后台执行和异步任务实现越来越多的限制。 (广播接收器或多或少变得无用,AlarmManager 受到限制,JobScheduler 可以延迟,Android 9 引入了“备用桶”的概念。)许多开发人员滥用这些 API 来做一些疯狂的事情,而更好的(电池友好型) ) 解决方案本来就存在。然而,所有这些限制使得实现受法律法规约束的安全关键型应用程序变得非常困难,该应用程序必须提供可靠性保证,因此需要对不可靠的网络进行线路监控。

    所有的电源管理机制似乎都没有考虑安全相关的场景。用户无意使用该应用程序(这很好),在这种特殊情况下没有消息是好消息。 IE。该应用程序只是停留在后台。不幸的是,该应用程序被归类为“稀有”应用程序的备用存储桶,并且该应用程序受到惩罚,这并不好。

    最佳答案

    只有当您用完高优先级消息配额时,才会取消优先级。更多信息可以找到here .

    关于android - FCM 高优先级消息如何以及在什么条件下被取消优先级?如何从服务器获取缓存的 FCM 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53449674/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com