FCM-登录以其他用户的登录后无法接收从同一设备发送的通知



我正在使用PYFCM从烧瓶服务器发送通知,并且我正在单个Android设备上对其进行测试。测试是这样的:我被签名为用户A,我对用户B的帖子发表评论,该帖子一旦b登录,该帖子应显示推送通知。这是我从服务器发送通知的方式:

registration_id="<device_registration_id>"
message_body = "A has commented on your post."
data_message = {"sender": current_user.id}
result =  push_service.notify_single_device(
    registration_id=registration_id,
    message_body=message_body,
    data_message=data_message
)

这就是我在Android Firebase消息传递服务中收到消息的方式:

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    Intent intent = new Intent(this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent resultIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT):
    String senderId = remoteMessage.getData().get("sender");
    if (senderId != currentUser.id) {
        NotificationCompat.Builder mNotificationBuilder = new NotificationCompat.Builder(this, "default_channel")
            .setSmallIcon(R.drawable.android_icon)
            .setContentTitle("New Comment")
            .setContentText(remoteMessage.getNotification().getBody())
            .setAutoCancel(true)
            .setSound(soundURI)
            .setContentIntent(resultIntent);
        NoticationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, mNotificationBuilder.build());
    }  
}

您可以看到,我有以下条件:senderId != currentUser.id在实际撰写通知之前。这是因为我正在使用一台设备发送和接收该通知,因此用户A和B。如果删除该条件,则只有一个Registation_ID/令牌。我想确保B是收到通知的人。但是,在登录A并登录为B后,我看不到任何推动通知。

我认为仅一次触发了一次。说,我正在尝试将通知从我的服务器发送给所有用户,并在登录时收到A。我清除了通知托盘,登录并登录为B通知。

这是按预期工作的。从您的帖子中,我认为您没有特别删除注册令牌,即同一设备的用户 re-> repus 相同的令牌。因此,流现在看起来像这样:

  1. 用户a标志,因此devicetoken = a。
  2. 您将消息从服务器发送到DeviceToken。
  3. DeviceToken收到消息,,但您不显示它。
  4. 用户A登录,用户B登录,现在DeviceToken =B。注意:相同的DevicEtoken,只是不同的用户。

在步骤4中,您仍然期望一条消息到达,但是从技术上讲,当用户A仍在登录时,它已经做到了。onMessageReceived不会再次触发,因为它已经按照预期收到了消息。

为了测试您所需的行为,您需要两个设备。实际上,我也对我制作的应用程序这样做(使用CurrentUser ID检查senderID(,所以我认为它也对您有效。

另外,登录时,通常会用FCM流动和建议的流程,这是您必须使令牌无效 - 有关更多详细信息,请参见我的答案。

相关内容

  • 没有找到相关文章

最新更新