>目标:为所有用户设备发送通知。
问题描述:我在为一个用户发送通知时遇到问题。注册后,我将FCM令牌存储在数据库中,供用户为他发送通知。问题是当用户多次注册时 - 将为多个用户存储相同的令牌。
例:
- 用户使用电子邮件注册 test@gmail.com 和 test2@gmail.com
- 用户登录 test@gmail.com
- 其他用户向 test@gmail.com 发送通知
- 通知将在两个帐户(test@gmail.com 和 test2@gmail.com(上发送,而不是仅发送到 test@gmail.com
所以这是我的问题 - 如何将通知发送到连接到用户的所有设备而不是与设备连接的所有用户?
QuerySnapshot ref = await Firestore.instance.collection('users')
.document(_textController.text)
.collection('tokens')
.getDocuments();
ref.documents.forEach((snapshot) async {
http.Response response = await http.post(
'https://fcm.googleapis.com/fcm/send',
headers: <String, String>{
'Content-Type': 'application/json',
'Authorization': 'key=$serverKey',
},
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': snapshot.data['token'],
},
),
);
});
感谢您的帮助!
我找到了解决方案!
如果您遇到同样的问题,您所要做的就是在注销时删除令牌。
final Firestore store = Firestore.instance;
final FirebaseAuth auth = FirebaseAuth.instance
String token = await _fcm.getToken();
await store
<reference to token document>
.delete();
await auth.signOut();