Flutter 中特定设备的 Firebase 消息通知

cus*_*pps 3 push-notification dart firebase flutter firebase-cloud-messaging

我正在开发一个颤振应用程序,其中在我们的自定义服务器上实现了许多服务器请求,包括登录/注册。但是,我们决定使用 Firebase Cloud Messaging 进行通知。例如,应用程序中包含聊天功能。

在端到端消息传递期间,当消息发布到我们的服务器时,用户应该会在其特定设备上收到通知。我已经firebase在应用程序中成功实现和配置,可以从控制台发送消息,但我需要让它在特定设备上工作。

// Replace with server token from firebase console settings.
final String serverToken = '<Server-Token>';
final FirebaseMessaging firebaseMessaging = FirebaseMessaging();

Future<Map<String, dynamic>> sendAndRetrieveMessage() async {
  await firebaseMessaging.requestNotificationPermissions(
    const IosNotificationSettings(sound: true, badge: true, alert: true, provisional: false),
  );

  await http.post(
    'https://fcm.googleapis.com/fcm/send',
     headers: <String, String>{
       'Content-Type': 'application/json',
       'Authorization': 'key=$serverToken',
     },
     body: jsonEncode(
     <String, dynamic>{
       'notification': <String, dynamic>{
         'body': 'this is a body',
         'title': 'this is a title'
       },
       'priority': 'high',
       'data': <String, dynamic>{
         'click_action': 'FLUTTER_NOTIFICATION_CLICK',
         'id': '1',
         'status': 'done'
       },
       'to': await firebaseMessaging.getToken(),
     },
    ),
  );
Run Code Online (Sandbox Code Playgroud)

这是在 flutter 中发送消息的记录方式。但是,这将向所有用户而不是单个用户发送通知。那么,我如何定位特定用户?

小智 6

我已经阅读了您想要实现的一些实现,我想您应该遵循以下步骤:

  1. 为 Flutter 安装 Firebase Cloud Messaging (FCM)(我看到你已经完成了)
  2. 通过调用 FCM 提供的“getToken”方法获取设备 firebase 消息令牌
  3. 当用户登录 Firebase Cloud Firestore 的文档时保存此令牌以将此设备令牌与用户相关联(或为用户创建一组令牌,以便每个用户可以拥有多个设备
  4. 监视何时在您的数据库上发生消息。当它发生时,收集目标用户,获取与该用户关联的令牌并将一个 FCM 发送到该特定设备 ID。对于这一点,我建议您使用 Firebase Cloud Functions,尽管这可能会导致服务器之间的所有数据重复(例如:您的服务器的用户名带有一些 id,并且相同的 id 在 Firestore 内的某个 noSQL 文档中“存在”)

希望能帮助到你。我不提供任何代码,因为我相信这不是您要搜索的内容。