【问题标题】:Amazon Pinpoint Push Notification not displayed when the app is in foreground on Android应用程序在 Android 上处于前台时不显示 Amazon Pinpoint 推送通知
【发布时间】:2019-04-05 19:37:47
【问题描述】:

我正在使用 Firebase 通过 Pinpoint 推送通知。

当应用程序不在前台时,我能够接收推送通知。但是当应用程序打开时我没有收到它。

我查看了 PushListenerService 代码,它有这样的内容:

 @Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
    Log.d(TAG, "Message: " + remoteMessage.getData());

    final NotificationClient notificationClient= NofiticaiontProvider.getNotificationClient();

    final NotificationDetails notificationDetails = NotificationDetails.builder()
            .from(remoteMessage.getFrom())
            .mapData(remoteMessage.getData())
            .intentAction(NotificationClient.FCM_INTENT_ACTION)
            .build();

    NotificationClient.CampaignPushResult pushResult = notificationClient.handleCampaignPush(notificationDetails);

    if (!NotificationClient.CampaignPushResult.NOT_HANDLED.equals(pushResult)) {
        /**
         The push message was due to a Pinpoint campaign.
         If the app was in the background, a local notification was added
         in the notification center. If the app was in the foreground, an
         event was recorded indicating the app was in the foreground,
         for the demo, we will broadcast the notification to let the main
         activity display it in a dialog.
         */
        if (NotificationClient.CampaignPushResult.APP_IN_FOREGROUND.equals(pushResult)) {
            /* Create a message that will display the raw data of the campaign push in a dialog. */

            final HashMap<String, String> dataMap = new HashMap<>(remoteMessage.getData());
            broadcast(remoteMessage.getFrom(), dataMap);
        }
        return;
    }

我想玩 if 语句(前台应用程序),这会给我正确的结果。但事实证明,sdk 内部有逻辑,如果它在前台,则不显示通知。

这里有一个来自 SDK 的小 sn-p

public final NotificationClient.CampaignPushResult handleCampaignPush(NotificationDetails notificationDetails) {
    final String from = notificationDetails.getFrom();
    final Bundle data = notificationDetails.getBundle();
    final Class<?> targetClass = notificationDetails.getTargetClass();
    String intentAction = notificationDetails.getIntentAction();
    notificationChannelId = notificationDetails.getNotificationChannelId();

    // Check if push data contains a Campaign Id
    if (data == null || !data.containsKey(CAMPAIGN_ID_PUSH_KEY)) {
        return NotificationClient.CampaignPushResult.NOT_HANDLED;
    }

    final boolean isAppInForeground = appUtil.isAppInForeground();

    final String imageUrl = data.getString(CAMPAIGN_IMAGE_PUSH_KEY);
    final String imageIconUrl = data.getString(CAMPAIGN_IMAGE_ICON_PUSH_KEY);
    final String imageSmallIconUrl = data.getString(CAMPAIGN_IMAGE_SMALL_ICON_PUSH_KEY);
    final Map<String, String> campaignAttributes = new HashMap<String, String>();

    campaignAttributes.put(CAMPAIGN_ID_ATTRIBUTE_KEY, data.getString(CAMPAIGN_ID_PUSH_KEY));
    campaignAttributes.put(CAMPAIGN_TREATMENT_ID_ATTRIBUTE_KEY, data.getString(CAMPAIGN_TREATMENT_ID_PUSH_KEY));
    campaignAttributes.put(CAMPAIGN_ACTIVITY_ID_ATTRIBUTE_KEY, data.getString(CAMPAIGN_ACTIVITY_ID_PUSH_KEY));

    this.pinpointContext.getAnalyticsClient().setCampaignAttributes(campaignAttributes);
    log.info("Campaign Attributes are:" + campaignAttributes);

    if (AWS_EVENT_TYPE_OPENED.equals(from)) {
        return this.handleNotificationOpen(campaignAttributes, data);
    }

    // Create the push event.
    String eventType = null;
    if (isAppInForeground) {
        eventType = AWS_EVENT_TYPE_RECEIVED_FOREGROUND;
    } else {
        eventType = AWS_EVENT_TYPE_RECEIVED_BACKGROUND;
    }

可能 eventType 是应用程序处于前台时未显示通知的原因。有没有其他方法可以绕过这个?除了提取信息和创建我自己的通知之外?

我找不到任何合适的文档。谁能帮我解决这个问题?

一切都将我引向这个document

【问题讨论】:

  • 你知道为什么应用在前台时不显示通知吗?
  • 不,这仍然是一个谜。所以我所做的只是从 PushListenerService 接收有效负载并抛出我自己的通知。所以我使用 pinpoint 只是为了获取信息。

标签: android push-notification aws-pinpoint


【解决方案1】:

这并不神秘 - 这是设计使然。当应用程序在前台并且您在 PushListenerService 中的代码发送本地广播时,Amazon SDK 不会创建相应的通知。

【讨论】:

  • 如果您有新问题,请点击 按钮提出问题。如果有助于提供上下文,请包含指向此问题的链接。
猜你喜欢
  • 1970-01-01
  • 2017-10-31
  • 2019-02-25
  • 2022-12-22
  • 1970-01-01
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
相关资源
最近更新 更多