限制 Flutter 中特定用户的 FCM 通知
Posted
技术标签:
【中文标题】限制 Flutter 中特定用户的 FCM 通知【英文标题】:Restrict FCM Notification for a specific users in Flutter 【发布时间】:2020-04-01 01:03:49 【问题描述】:我是 DART 的初学者。 实际问题是“即使用户已注销,应用也会收到 FCM 通知。” 因此,如果用户已注销,我想阻止通知。 我的问题是,“我可以检查新通知是否针对当前登录人”(使用成功登录后从服务器发送的令牌 ID)。
我可以在收到通知后添加检查语句吗? 在使用令牌 ID 将其显示在托盘中之前
if(stored_apiToken == apiToken_sent_with_the_Notification)
ShowNotification();
别的
dontShowNotification();
提前致谢
【问题讨论】:
您将如何识别已发送消息中的收件人?这似乎是必要的。onMessage: (Map<String, dynamic> message) async print('on message $message'); , // ignore: missing_return onResume: (Map<String, dynamic> message) async print('onResume $message'); , // ignore: missing_return onLaunch: (Map<String, dynamic> message) async print('onLaunch $message'); ,
使用 onMessage、onResume 和 onLaunch
我实际做的是, 1. 打开应用程序时我得到一个 FCm 令牌。 (卸载应用后 FCM 令牌会发生变化)。 2. 当我调用 LoginApi 时,我将一些凭据与 FCMToken 一起传递。 3. Backe-end给出一个API key作为响应。 (我将它存储在 SharedPreferences 中) 4. 使用登录时我已经提供给服务器的 FCM 令牌从服务器发送通知。 5. 该 FCMToken 也包含相同的 API 密钥。 那么有什么方法可以通过任何比较或其他方式检查传入的 FCM 通知是针对 userA 还是 userB。
【参考方案1】:
这不是在客户端执行此操作的好方法。我们可以配置 Firebase 云消息传递 (FCM) 来完成繁重的工作。就像我们可以让 FCM 只向我们希望它接收的设备或用户发送通知。这可以根据用例以多种方式存档,
如果您想向一组用户发送消息,您可以在 FCM 控制台上创建一个主题并使用 firebase_messaging 库在该主题上设置用户 subscribe,因此为该主题发送的通知将是仅由那些订阅的用户接收。 使用以下链接了解它是如何完成的,并使用 firebase_messaging 包应用它
Send Mssage to topic FCM
如果您想发送给特定用户, FCM 在应用程序的初始启动时创建一个设备注册令牌。您可以通过在 FCM 对象上调用 getToken() 来检索此令牌。 firebase 可能会刷新令牌,因此您应该使用onTokenRefresh 收听。将接收到的令牌与数据库上的用户关联,然后您可以使用该令牌send notification to that particular user。您可以通过多种方式使用AdminSDK 或REST 发送通知
如果您只想在用户登录时收到通知,您可以让用户在登录后订阅主题(如登录用户)。或者您可以添加@ 987654330@ 在 if 块内检查是否为 user is logged in(不推荐)。
我之前提到的向特定用户发送消息仅在用户登录后才能工作,因为我们仅在用户登录后将设备注册令牌存储在数据库中给该特定用户。强>
【讨论】:
感谢您的信息。那么我们如何在用户注销特定设备后删除 fcm 令牌。 ? 您不必这样做,fcm 令牌对于每个设备不是唯一的,而是对于每个应用程序实例都是唯一的,即使清除应用程序的数据也会删除该令牌,并且将创建一个新的 fcm 令牌再次启动应用程序。更多信息在这里link。当用户再次登录时,您只需要覆盖数据库上的 fcm 令牌。 fcm 的 deleteInstance() 方法将删除当前的 fcm 令牌。谢谢你的信息。以上是关于限制 Flutter 中特定用户的 FCM 通知的主要内容,如果未能解决你的问题,请参考以下文章
应用打开时在整个应用中显示 FCM 通知 (Flutter)