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

PubNub - Messages are received both as Push and as realtime [Android]

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

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

和推送

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

当我发送消息时,我也为 Push 指定了数据:

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. 当应用 closed/killed 消息作为推送传送时

当前行为:

当应用为 运行 时,消息以推送方式传送(调用 Firebase 推送服务方法)
和实时(public void message(@NotNull PubNub pubnub, @NotNull PNMessageResult message)方法被调用)

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

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

subscribe to all necessary channels in 2 places

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

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

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

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

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