我们的应用现在有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
是一种有效的解决方法,但它不起作用。