FCM升级后,通知未显示在Android API级别26+上

时间:2018-10-02 16:11:29

标签: android firebase push-notification android-emulator firebase-cloud-messaging

下面的代码似乎没有在我的模拟器上显示通知。我将不赞成使用的Firebase代码升级为带有频道的新内容。有什么我应该研究的吗?

<application android:icon="@drawable/icon" android:allowBackup="false" android:label="@string/application_label" android:theme="@style/Theme">
        <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/icon" />
        <meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/accentColor" />
        <meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id" />
        ......
        <service
            android:name="com.exposure.services.ExposureFirebaseMessagingService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
        </service>
    </application>

enter image description here

2 个答案:

答案 0 :(得分:1)

在Android Oreo中,您必须使用渠道来创建通知。

  

从Android 8.0(API级别26)开始,必须将所有通知分配给一个频道。对于每个渠道,您可以设置应用于该渠道中所有通知的视觉和听觉行为。然后,用户可以更改这些设置,并确定您应用中的哪些通知渠道应该是侵入性的或根本不可见的。


  

警告::如果您以Android 8.0(API级别26)为目标并且在未指定通知渠道的情况下发布通知,则该通知不会出现,并且系统会记录错误。

有关更多文档,请访问:https://developer.android.com/training/notify-user/channels


显然,您已使用通知通道进行通知,但尚未创建与该ID关联的通知通道。因此,在创建通知之前,您需要创建一个通知渠道。

下面给出了创建通知通道的示例(也许在FCM服务类中):

@Override
public void onCreate() {
    super.onCreate();
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        // Make sure you use the same channel id ("default" in this case)
        // while creating notifications.
        NotificationChannel channel = new NotificationChannel("default", "Default Channel",
                NotificationManager.IMPORTANCE_HIGH);
        channel.setDescription("Default Notification Channel");
        NotificationManager notificationManager = (NotificationManager)
                getSystemService(NOTIFICATION_SERVICE);
        if (notificationManager != null) {
            notificationManager.createNotificationChannel(channel);
        }
    }
}

答案 1 :(得分:0)

在根据Google开发者方面https://developer.android.com/training/notify-user/channels创建通知之前,请使用通知通道