26

我们的应用现在有targetSdkVersion 26(Android 8)并且应用使用 FCM 推送通知。

按照FCM 文档的规定,我将 FCM 客户端库更新到了 11.2.0 版:

dependencies {
     compile 'com.google.firebase:firebase-messaging:11.2.0'
}

通过此 FCM 客户端库更新,FCM 通知开始出现在 Android 设备上。很好,但是当应用程序在后台时,系统会处理 FCM 消息,因此它使用名为“Miscellaneous”的默认 Android 通知通道,这不是我们想要的(我们有其他通知通道,并且“Miscellaneous”在该列表中听起来令人困惑)。

正如FCM 文档所说,有一种方法可以为 FCM 消息指定默认通知通道:

(可选)在应用程序组件中,元数据元素为通知设置默认图标、颜色和通知通道(Android O 中的新功能)。每当传入消息未明确设置图标、颜色或notification_channel时,Android 都会使用这些值。

但是没有显示代码示例(示例仅显示图标和颜色)。所以我刚刚通过谷歌搜索github 上的Firebase Cloud Messaging Quickstart中的示例找到:

<meta-data
    android:name="com.google.firebase.messaging.default_notification_channel"
    android:value="@string/default_notification_channel_id"/>

但它不起作用 - FCM 通知仍然出现在“杂项”频道中。我在日志中看到:

W/FirebaseMessaging:AndroidManifest 中缺少默认通知通道元数据。将使用默认值。

当然,我尝试重新安装该应用程序。仍然有问题。

好吧,理想情况下,应该有某种方法在发送消息时在后端指定通知通道。允许测试发送的 FCM 开发控制台现在在 UI 中有这样一个选项:

在此处输入图像描述

它工作正常。但是我们的后端使用 Java Amazon SNS API,我不知道该 API 是否允许在发送消息时指定 Android 通知通道(因为它是一个新的 Android 功能,亚马逊需要时间来采用它)。因此,目前设置默认通知通道AndroidManifest.xml是一种有效的解决方法,但它不起作用。

4

3 回答 3

20

查看文档:https ://firebase.google.com/docs/cloud-messaging/http-server-ref

android_channel_id通知的频道 ID(Android O 中的新功能)。

应用程序必须先创建一个具有此 ID 的通道,然后才能接收到具有此密钥的任何通知。

如果您未在请求中发送此密钥,或者您的应用尚未创建所提供的频道 ID,则 FCM 将使用您的应用清单中指定的频道 ID。

尝试包含android_channel_id在您即将发布到 fcm 的 json 中。我不知道为什么 manifest value 不适合你。尝试将频道添加到您的请求中,您应该获得与 Firebase 控制台相同的效果。

编辑:我刚刚意识到您要求亚马逊客户端集成。也许你可以手动构建 json 请求(我不太了解亚马逊服务,抱歉)。

于 2017-08-29T11:04:37.633 回答
11

FCM 已迁移到HTTP v1 API

https://fcm.googleapis.com/v1/projects/{{projectId}}/messages:send

android_channel_id将导致错误的请求:

"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
  {
    "field": "message.notification",
    "description": "Invalid JSON payload received. Unknown name \"android_channel_id\" at 'message.notification': Cannot find field."
  }

正确的有效载荷应该是:

{
    "message": {
        "token": "{{deviceToken}}",
        "notification": {
            "body": "This is an FCM notification message hello 23",
            "title": "FCM Message",
            "image": "https://lumiere-a.akamaihd.net/v1/images/au_moviesshowcase_mulan_poster_r_2_54011055.jpeg?region=0,0,960,1420"
        },
        "android": {
          "notification": {
            "channel_id": "channel_id_1"
          }
        },
        "data": {
            "key1": "42",
            "key2": "sent by 21"
        }
    }
}

https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#resource:-message

于 2020-04-09T05:53:21.707 回答
5

取决于此资源:https ://firebase.google.com/docs/cloud-messaging/http-server-ref

这里有效载荷看起来像:

{
   "to":"$device_token"
   "notification":{
      "title":"Title",
      "body":"Here Body",
      "android_channel_id":"$channel_id", // For Android >= 8
      "channel_id":"$channel_id", // For Android Version < 8
      "image": "https://xxxxx.com/xxxxx.jpeg"
   },
   "data":{},
   "priority":"normal"
}
于 2021-09-09T08:11:30.803 回答