我们在phonegap上使用pubnub api创建了一个聊天应用程序。我们正在为两个用户(例如A& B)使用共同的唯一信道来发送和接收消息。
另外,除此之外,我们还启用了pubnub gcm通知,以便用户可以在应用程序处于后台或关闭时收到通知。
现在当用户A向B发送pubnub消息并立即更改应用程序或隐藏它时,用户A自己也接收到他自己的消息的gcm通知。
这是困扰我们的唯一问题。休息一切正常。
答案 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,即使应用程序处于后台,也不要显示通知。