【问题标题】:Pinpoint FCM push notification status "Successful" but not received in console/device查明 FCM 推送通知状态“成功”但未在控制台/设备中收到
【发布时间】:2019-10-21 02:53:31
【问题描述】:

我有一个 Android 应用程序,我正在尝试通过 Amazon Pinpoint 向它发送推送通知。

  • 我的应用能够使用我的 API 密钥接收通过 Postman 发送的 FCM 推送通知。
  • 这些通知会同时显示在 FCM 控制台和设备上。

然后我使用相同的 API 密钥精确设置 FCM 推送通知,并使用他们的“测试消息传递”工具进行测试。

  • 测试消息工具显示消息发送成功。
  • 消息未出现在设备或 FCM 控制台中。
  • 我使用 pinpoint CLI 或通过我的 RAILS 应用发送类似的成功响应。
  • APNS 消息在我的应用程序中具有精确定位功能。

对于通过测试消息传递工具、通过 CLI 和从我的 Rails 应用程序发送的 FCM 消息,我收到了成功响应,但它们都没有出现在 FCM 控制台中,也没有到达设备。

我在设置中唯一注意到与documentation 不匹配的是 Pinpoint 似乎没有任何地方可以添加 发件人 ID,只有 API 密钥。 (但是,我不确定发件人 ID 是否真的必要,因为我可以只使用 API 密钥直接发送 POST 请求,而 FCM 得到它......也许这已经过时了??)

如果出于某种原因确实需要发件人 ID,应在哪里输入?

我还能做些什么来调试它?

【问题讨论】:

    标签: amazon-web-services aws-pinpoint


    【解决方案1】:

    “我的应用能够使用我的 API 密钥接收通过 Postman 发送的 FCM 推送通知,并且这些通知会同时显示在 FCM 控制台和设备上”

    从上面的引述中,由于直接使用 FCM (Firebase Cloud Messaging) 进行测试时,您会在设备上收到推送通知,那么我怀疑问题可能与此有关到两件事,即 PushListener 类或推送通知消息类型。让我解释一下

    对于 FCM 推送通知,支持两种类型的 message types,即 “数据””通知”。因此,默认情况下,FCM 控制台/SDK 会发送 "Notification" 消息类型的推送通知。此类消息由 FCM SDK 自动处理并传递到应用程序的通知托盘。而另一方面,“数据” 消息并未由 FCM SDK 处理,而客户端需要处理此类消息。

    Amazon Pinpoint,目前默认使用 “Data” 消息类型作为标准消息,这意味着客户端应用程序必须实现方法的 (例如,实现一个 PushListenerClass 来摄取负载并在通知托盘中显示传入的通知) 以处理负载并采取行动。

    您能否确认您的应用程序代码中是否有 PushListener 类?如果没有,那么您可以参考以下文章,其中详细解释了如何在 Android 中处理 FCM 消息(通知和数据):

    https://www.zoftino.com/android-notification-data-messages-from-app-server-using-firebase-cloud-messaging

    https://aws-amplify.github.io/docs/android/push-notifications

    如果您想发送 "Notification" 类型的推送通知,那么您需要使用:

    1. RawContent 属性,如果使用 Pinpoint SDK/REST API/CLI。RawContent 属性需要定义/指定为 JSON 格式的字符串,如下所示:

      'RawContent' : '{"notification":{"title":"TEST PUSH NOTIFICATION","body":"Hello, this is a test push notification!"}}', // If you define 'RawContent' here, everything ("message") else in the "MessageConfiguration" will be ignored.
      
    2. RawMessage 属性,如果使用 Pinpoint 控制台,如下图所示,您将“数据”替换为“通知”:

    希望对您有所帮助!,

    【讨论】:

    • 这里需要注意的是,在我用“title”和“body”替换“message”之前,这不起作用
    【解决方案2】:

    标准消息在发送到firebase时默认为数据消息。要发送通知,您需要将其作为原始消息发送。这是 APN 和 Firebase 的示例

      "APNSMessage": {
        "aps": {
          "alert": {
            "title": "Hello Apple",
            "subtitle": "Notification test",
            "body": "From Pinpoint"
          }
        }
      },
      "GCMMessage": {
        "notification": {
          "title": "Hello Android",
          "body": "From PinPoint"
        }
      },
      "ADMMessage": {
        "data": {
          "message": ""
        }
      },
      "BaiduMessage": {
        "title": "",
        "description": ""
      }
    }```
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-25
      • 2018-05-01
      • 2018-10-09
      • 2017-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      相关资源
      最近更新 更多