【问题标题】:Showing Notifications To The Intended User Only仅向目标用户显示通知
【发布时间】:2018-05-08 16:15:29
【问题描述】:

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

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

假设用户 AB 在同一台设备上登录我的应用程序。收到的通知是发给User A,但当前登录的用户是User B,我不希望User B 看到User A'snotifications。

我曾尝试在我的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,它根本不起作用。

【问题讨论】:

    标签: android firebase firebase-cloud-messaging google-cloud-functions


    【解决方案1】:

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

    由于您的推送消息已经有一个data 节点(您用来识别它被发送到的用户),您不需要拥有notification 节点。从推送消息 json 中删除通知节点后,流程将始终到达您的 FirebaseMessagingService

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-10
        • 1970-01-01
        • 2021-02-06
        • 2011-09-24
        • 1970-01-01
        • 2011-03-02
        • 1970-01-01
        相关资源
        最近更新 更多