仅向目标用户显示通知



在我的Android App中,有多个用户使用它,他们可能会在不同的时间登录它。

我正在使用Cloud Functions将通知发送到特定tokens,这意味着特定设备,但我找不到一种方法来确保notification仅显示给发送给它的用户。

假设AB用户在同一设备上登录到我的应用。收到的通知旨在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获取登录用户并检查它,但后来loggedEmailnull,它根本不起作用。

由于这两个用户使用相同的应用安装,因此他们由相同的 FCM 令牌标识。这意味着无法在服务器上进行拆分,您必须将消息定向到客户端上的正确用户。

但是,如果当前两个用户都没有主动使用该应用程序,则通知消息将由系统处理。这意味着没有当前活动用户的概念,系统将显示通用通知(通常在单击时激活您的应用)。

我会考虑 FCM 是否真的是针对此类通知的最佳工具。FCM 通过 FCM 令牌定位最详细的级别,而您更可能希望通过 UID(或电子邮件地址)进行定位。我会考虑使用 Firebase 实时数据库按 UID(或电子邮件地址)存储消息,然后使用 FCM 向设备发送通知。当用户单击通知消息时,应用将启动,你可以从数据库中为登录的任何用户检索消息。

如果您的 FCM 消息的 JSON 中包含notification节点,则系统会在应用处于后台时自动发送通知,并且仅当应用处于前台时才会FirebaseMessagingService

由于推送消息已具有data节点(用于标识其发送到的用户),因此不需要具有notification节点。从推送消息 json 中删除通知节点后,流将始终FirebaseMessagingService

最新更新