问题描述
我在 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())...
预期行为:
当前行为:
当应用程序运行时,消息以 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 年了,但它仍然具有相关性。