首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FCM +工作管理器

FCM +工作管理器
EN

Stack Overflow用户
提问于 2022-05-10 21:47:44
回答 1查看 413关注 0票数 3

我目前正在更新一个应用程序,它有以下工作流程:

  1. 我们用一些数据将一条记录上传到Fi还原数据库
  2. 这是通过google云自动生成一个推送通知,通过一个通道发送到我们的用户设备。
  3. 设备接收到此通知,并且使用来自FCM的onMessageReceived函数,我们还触发了与Firestore数据库的同步。
  4. 尝试与Firestore数据库同步。
  5. 不管这种同步是否正确,推送通知仍然会显示给用户。当他按下这个程序时,应用程序就崩溃了。

不过,我的理论是,当Android进入Doze模式时,步骤4会出现一个错误;因此,该设备无法与Firestore同步,因此该应用程序将为用户崩溃。目前大约有20%的用户正在发生这种情况。

然后我发现了Workmanager,我相信它可以帮助解决这个问题。不过,我对这件事还是很陌生的。我在想一个解决方案可以是:我专门创建了一个WorkRequest,其中有一个约束,说明设备应该连接到互联网上。在这个WorkRequest中,我将执行数据库同步,并向用户显示通知。

然而,这可能会导致一些延迟,因为这取决于用户何时将他们的设备连接到互联网。理想情况下,我认为最好的解决方案应该是类似于描述的这里。最后,在我的例子中,同步(计划作业)是由外部事件(FCM)触发的,但是我很难理解这是否真的是最好的解决方案。

你认为如何?第一个解决办法是好的吗?如果第二个是更好的,那么您是否有一个关于代码外观的示例(基本上是一个框架,这样我就可以理解如何将WorkManager与FCM联系起来)?或者,工作经理可能不是解决这个问题的最佳方案吗?

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2022-05-12 08:16:42

请在此阅读:

https://developer.android.com/topic/performance/appstandby

在这里:

https://firebase.google.com/docs/cloud-messaging/concept-options#setting-the-priority-of-a-message

但是长话短说--如果你使用push --你需要对消息赋予很高的优先级,这样用户就会与他们进行交互,这将把应用程序转移到活动桶中。这甚至可以在打瞌睡模式下工作。

但是,如果没有用户交互:

  • 在收到推送后,您有一段时间,所以应用程序会很快入睡(这就是推送通知的一般工作方式)。
  • 此外,一般来说,您应该在这里创建一个服务,而不是被杀死,而是使用从后台启动前台服务的新限制--更难做到的是:https://developer.android.com/about/versions/12/behavior-changes-12#foreground-service-launch-restrictions基本上,Google正迫使我们走向WM.
  • 如果您将优先级设置为高优先级,但用户不会单击该通知并将其取消--它将被剥夺,并且将不再为您工作。
  • --如果您的优先级很低,那么唯一的选择就是在满足约束的情况下,从推送开始工作--您可以做您的工作。

所以基本上这是我的建议:

  1. 以低优先级发送推送。您不需要用户。
  2. 创建具有正确约束的工作来完成该工作。(您可以在wi应用程序中设置一些设置,包括高/低电池、充电或不充电等) https://developer.android.com/topic/libraries/architecture/workmanager/how-to/define-work#work-constraints
  3. 当工作开始时,您可以为活动同步显示一个通知(它是API -ForegroundInfo的一部分),当工作完成时,您可以显示一些已完成同步的通知。

同时,要记住,当你收到下一次的推动时,可能会有未完成的工作。因此,寻找链接作品和独特的作品。

例如,您可能只想要一件作品,并且使用“唯一”--您可以替换旧的作品,甚至可以将新的作品附加到其中。检查这里:

https://developer.android.com/topic/libraries/architecture/workmanager/how-to/managing-work#conflict-resolution

我建议你看这张播放列表。最后,也有一个问题与男人的背后的WM。你会理解你所需要的大部分东西:

channel=AndroidDevelopers

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72193282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档