如何避免用户在Pubnub上收到自己的聊天gcm通知

时间:2015-05-11 15:03:23

标签: android cordova pubnub

我们在phonegap上使用pubnub api创建了一个聊天应用程序。我们正在为两个用户(例如A& B)使用共同的唯一信道来发送和接收消息。

另外,除此之外,我们还启用了pubnub gcm通知,以便用户可以在应用程序处于后台或关闭时收到通知。

现在当用户A向B发送pubnub消息并立即更改应用程序或隐藏它时,用户A自己也接收到他自己的消息的gcm通知。

这是困扰我们的唯一问题。休息一切正常。

2 个答案:

答案 0 :(得分:0)

在您的订阅回调中,您是否可以检测应用程序是否不在前台,如果不在前台,则立即返回?

这样,除非你处于前台,否则将接收到的消息传递给应用程序逻辑的逻辑根本不会触发......?

答案 1 :(得分:0)

我遇到了你所做的同样类似的问题,所以我一起操作了一些对我有用的东西。

private boolean isFromSelf(final Object msgSent){
    boolean isEcho = false;
    String msgText = msgSent.toString();
    JSONObject j;
    String receiver = currentUserId; //a unique string ID for each user
    try
    {
        j = new JSONObject(msgText);
        String senderID = j.get("senderID").toString();
        if (senderID.equals(receiver)){
            isEcho = true;
    }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

        return isEcho;
}

假设每个向频道发布消息的用户都会将其唯一ID作为“senderID”发送到有效负载中。然后,当收到消息时,从有效负载中提取消息并根据用户的Id进行检查。所以我添加isFromSelf方法作为收到消息时调用的第一个东西,如:

pN = new Pubnub(pub_key, sub_key);
    try {
        pN.subscribe(CHANNEL_NAME, new Callback() {
            public void successCallback(String channel, Object msg) {

                if (!isFromSelf(msg)) {
                    //Now add here what you want to do with the message
                }
            }

            public void errorCallback(String channel, PubnubError error) {
                Toast.makeText(MainActivity.this, "there was an error connecting", Toast.LENGTH_SHORT).show();
            }
        });
    } catch (PubnubException e) {
        e.printStackTrace();
    }

因此,在您的情况下,也许可以组合一个senderID检查,这样如果您确实收到了自己的GCM,即使应用程序处于后台,也不要显示通知。