对于android中的推送通知,FCM为每个设备创建令牌。在这种情况下,如果多个用户使用相同的设备进行登录,那么令牌如何用于推送通知?如果推送通知仅针对当前用户发送,那么已经使用该设备的其他用户呢?如果用户再次激活同一设备,此通知是否会在队列中并发送?请帮助我在这种情况下。感谢。
答案 0 :(得分:1)
实际上,您可以通过检查登录用户ID与FCM消息接收服务方法onMessageReceived()中收到的通知UserId进行比较来管理。
完整详情与示例: 当您从服务器生成通知时,请使用额外参数的UserID,如下面的方式,
{"to":"[add your token]","data":{"title":"[add title]","body":"[add your message]","userId":"[your userid]"},"priority":"high"}
知道这样做之后,请比较您的登录用户ID和收到的通知,如果两者都匹配,则生成您的本地通知,另一方面不生成,请在下面查看。
@Override
public void onMessageReceived(final RemoteMessage remoteMessage) {
Log.d("onMessageReceived-->", "getData ->" + remoteMessage.getData());
super.onMessageReceived(remoteMessage);
try {
String userId=remoteMessage.getData().get("userId");
if(userId==loginUserId){
genrateLocalNotification();
}
} catch (Exception e) {
e.printStackTrace();
}
}
答案 1 :(得分:0)
生成令牌时,它将存储在refreshedToken字符串中。这个语句首先执行,因为我们正在创建一个服务。所以当应用程序启动时....服务是调用,我们应该将该字符串存储到共享首选项中,而且每当我们需要该字符串时,我们希望在那时使用。 / p>
@Override
public void onTokenRefresh() {
//Getting registration token
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
// store the refreshedToken into shared preferencees.
}