我正在使用Firebase的FCM进行应用通知。从用户启动应用程序的那一刻起,需要订阅某些主题。
到目前为止,我已经处理了我们自己的服务器上的"主题"和各种指标,但是当我们将逻辑零件移至其适当的位置以减少服务器上的负载时,需要将其移至Firebase本身。<<<<<<<<<<
我们想处理事情有所不同。用户将能够订阅并从某些通知组中订阅/退订/从某些通知组中订阅,但是FCM的文档没有提及哪个时间,哪个回调是处理此问题的合适地方。
流将如下:
- 用户安装应用程序
- 用户启动应用
- 应用程序更新缓存的数据(以较大间隔更改的信息,例如每3-6个月一次(
- 应用程序从Google帐户中删除同步数据,包括主题列表
- 应用通知的应用程序寄存器设备
- 应用程序将用户订阅"所有"主题(在此处注册了所有想要接收通知的用户。仅当用户在设置中取消选中"发送我的通知"选项时,取消订阅才有可能( (
- 应用程序订阅步骤4中同步的主题
什么不清楚在哪里放置步骤6和7。我是否将其放入FirebaseInstanceIdService
的实现,Android上的OnTokenRefresh
以及iOS上的Messaging.SharedInstance.Connect
或InstanceId.Notifications.ObserveTokenRefresh
中?FCM代币更改发生时,我需要重新注册到主题吗?
该应用程序是用Xamarin编写的,因此我们使用FCM用于iOS和Android。
在其中放置代码以订阅令牌完全取决于您。通常,它放置在应用程序的初始活动上。这样可以确保用户将订阅该某些主题。
但是,在用例中,您可以制作一种方法,以检查应用程序的通知设置是否为 ticked ,如果是,请订阅令牌(如果不是(,请取消订阅。然后只需在您的初始活动中调用此方法。
关于" 发生FCM代币更改发生?,我需要重新注册到主题?",您不必这样做。@diegogiorgini参考此答案:
如果令牌"刷新",则维护主题订阅。
应将其寄存到主题的寄存器应放在视图中(Android中的Activity
类(。这取决于您需要的地方。可以通过使用此代码
FirebaseMessaging.Instance.SubscribeToTopic("promotion");
请注意,当您订阅不存在的主题时,该主题将在服务器中创建。但是,该创建需要很长时间,因此主题不可立即出现在您的Firebase控制台中。
稍后,当您要退订时(可能是在注销后(,只需在视图中调用此内容。
FirebaseMessaging.Instance.UnsubscribeFromTopic("promotion");
希望这可以有所帮助。