PubNub - 以推送和实时方式接收消息 [Android]

问题描述

我在 2 个地方订阅了所有必要的频道:

// For receiving real time (regular) messages
pubnub.subscribe().channels(channels).execute();

和推送

pubnub.addPushNotificationsOnChannels()
                            .pushType(PNPushType.FCM)
                            .channels(channels)
                            .deviceid(firebaseMessageingTokenForThisUser)

当我发送消息时,我也会为推送指定数据:

PushPayloadHelper pushPayloadHelper = new PushPayloadHelper();

// set FCM payload
pushPayloadHelper.setFcmPayload(fcmPayload);

// Set APNs payload
pushPayloadHelper.setApnsPayload(apnsPayload);

// Common payload for realtime PubNub subscribe
Map<String,Object> commonPayload = new HashMap<>();
commonPayload.put("message",jsonPayload);
pushPayloadHelper.setCommonPayload(commonPayload);

pubnub.publish()
                .channel(channelName)
                .message(pushPayloadHelper.build())...

预期行为:

  1. 当 Android 客户端在前台时,消息会实时传递
  2. 当应用程序被关闭/终止时,消息将作为推送发送

当前行为:

当应用程序运行时,消息以 Push 方式传递(调用 Firebase Push 服务方法
和实时(调用public void message(@NotNull PubNub pubnub,@NotNull PNMessageResult message)方法

我做错了什么?在官方文档中找不到任何相关信息。

解决方法

PubNub 实时消息和移动推送通知

在 2 个地方订阅所有必要的频道

首先,为了保持术语的有序性,您订阅实时消息的频道并注册设备移动推送通知渠道。订阅仅适用于实时消息。这是一个吹毛求疵但很重要的事情,当我们谈论这个时,要保持清楚。

是的,每次您发布包含移动推送有效负载的消息时,它都会被传送给活跃的订阅者到频道,并作为移动推送通知传送到在该频道上注册推送的设备。这是意料之中且必要的。

诀窍在于,当应用处于前台(活动)时,您只是不显示推送通知,因为您在 addListener''s message` 处理程序中收到了它。

那么问题是,您的“移动推送消息接收器”处理程序是什么样的?

这是一个 really old blog/video that explains all this。虽然它已经超过 5 年了,但它仍然具有相关性。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...