gpt4 book ai didi

android - FCM - 以不同用户身份登录后无法接收从同一设备发送的通知

转载 作者:行者123 更新时间:2023-11-30 00:00:25 32 4
gpt4 key购买 nike

我正在使用 PyFCM 从我的 Flask 服务器发送通知,我正在单个 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/token。如果我删除该条件,用户 A 将在评论 B 的帖子后立即收到通知。我想确保 B 是收到通知的人。但是,在以 A 登出并以 B 登入后,我看不到任何推送通知。

最佳答案

I think onMessageReceived is only being triggered once. Say, I'm trying to send a notification from my server to all users, and I receive it while logged in as A. I clear the notification tray, log out, and log in as B, but I don't see another instance of the notification.

这是按预期工作的。根据您的帖子,我假设您没有专门删除注册 token ,即同一设备的用户重新使用相同的 token 。所以流程现在看起来像这样:

  1. 用户 A 登录,因此 deviceToken = A。
  2. 您将一条消息从您的服务器发送到 deviceToken。
  3. deviceToken 收到消息,您不显示它。
  4. 用户 A 注销,用户 B 登录,现在 deviceToken = B。注意:相同的 deviceToken,只是不同的用户。

在第 4 步中,您仍然期待消息到达,但从技术上讲,当用户 A 仍处于登录状态时它已经到达。onMessageReceived 不会再次触发,因为它已经收到消息正如预期的那样。

为了测试您想要的行为,您需要两台设备。我实际上也在对我制作的应用程序执行此操作(使用 currentUser id 检查 senderId),所以我认为它应该也适合你。

此外,注销时 FCM 的常规和建议流程是您必须使 token 无效——请参阅我的 answer here了解更多详情。

关于android - FCM - 以不同用户身份登录后无法接收从同一设备发送的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50043911/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com