在我的Android App
中,有多个用户使用它,他们可能会在不同的时间登录它。
我正在使用Cloud Functions
将通知发送到特定tokens
,这意味着特定设备,但我找不到一种方法来确保notification
仅显示给发送给它的用户。
假设A
和B
用户在同一设备上登录到我的应用。收到的通知旨在User A
,但当前登录的用户User B
,我不希望User B
看到User A's
通知。
我试图在我的FirebaseMessagingService
中以这种方式检查它:
String receiverEmail= remoteMessage.getData().get("sendTo");
String loggedEmail=firebaseUser.getEmail();
if (loggedEmail!=null){
if (receiverEmail.equals(loggedEmail)){
sendNotification(
context.getString(R.string.your_friend_request_was_accepted),
context.getString(R.string.by)+" "+senderName);
}
}
并且仅在应用程序运行时有效。关闭时不起作用。
我也尝试从Shared Preferences
获取登录用户并检查它,但后来loggedEmail
null
,它根本不起作用。
由于这两个用户使用相同的应用安装,因此他们由相同的 FCM 令牌标识。这意味着无法在服务器上进行拆分,您必须将消息定向到客户端上的正确用户。
但是,如果当前两个用户都没有主动使用该应用程序,则通知消息将由系统处理。这意味着没有当前活动用户的概念,系统将显示通用通知(通常在单击时激活您的应用)。
我会考虑 FCM 是否真的是针对此类通知的最佳工具。FCM 通过 FCM 令牌定位最详细的级别,而您更可能希望通过 UID(或电子邮件地址)进行定位。我会考虑使用 Firebase 实时数据库按 UID(或电子邮件地址)存储消息,然后使用 FCM 向设备发送通知。当用户单击通知消息时,应用将启动,你可以从数据库中为登录的任何用户检索消息。
如果您的 FCM 消息的 JSON 中包含notification
节点,则系统会在应用处于后台时自动发送通知,并且仅当应用处于前台时才会FirebaseMessagingService
。
由于推送消息已具有data
节点(用于标识其发送到的用户),因此不需要具有notification
节点。从推送消息 json 中删除通知节点后,流将始终FirebaseMessagingService