【问题标题】:Generate device token for FCM push notification in android same device with different credentials在具有不同凭据的 android 同一设备中为 FCM 推送通知生成设备令牌
【发布时间】:2017-09-11 12:19:33
【问题描述】:

对于 android 中的推送通知,FCM 为每个设备创建令牌。在这种情况下,如果多个用户使用同一设备登录,令牌如何用于推送通知?如果推送通知仅针对当前用户发送,那么已经使用该设备的其他用户呢?如果用户再次激活同一设备,此通知会在队列中发送吗?请在这种情况下帮助我。谢谢。

【问题讨论】:

标签: android firebase push-notification firebase-cloud-messaging


【解决方案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();
        }
    }

【讨论】:

    【解决方案2】:

    生成令牌时,它将存储在 refreshedToken 字符串中。这个语句首先执行,因为我们正在创建一个服务。所以当应用程序启动时......服务被调用,我们应该将该字符串存储到共享首选项中,而不是每当我们需要该字符串时,我们想在那个时候使用。

     @Override
    public void onTokenRefresh() {
        //Getting registration token
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        // store the refreshedToken into shared preferencees.
    }
    

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    • 当你的令牌生成时,它将存储在 refreshedToken 字符串中。这个语句首先执行,因为我们正在创建一个服务。所以当应用程序启动时......服务被调用,我们应该将该字符串存储到共享首选项中,而不是每当我们需要该字符串时,我们想在那个时候使用。
    猜你喜欢
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多