无法通过Microsoft官方示例接收FCM后台通知

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法通过Microsoft官方示例接收FCM后台通知相关的知识,希望对你有一定的参考价值。

我正在按照本教程接收FCM背景通知https://docs.microsoft.com/en-us/xamarin/android/data-cloud/google-messaging/remote-notifications-with-fcm?tabs=macos

我使用Firebase中的“Test on device”发送消息:enter image description here

但是我收到以下错误

[FirebaseMessaging] Unable to log event: analytics library is missing [FirebaseMessaging] Missing Default Notification Channel metadata in androidManifest. Default value will be used. [FirebaseMessaging] Error while setting the notification channel [FirebaseMessaging] java.lang.NoSuchFieldError: No static field fcm_fallback_notification_channel_label of type I in class Lcom/google/android/gms/R$string; or its superclasses (declaration of 'com.google.android.gms.R$string' appears in /data/app/com.xamarin.fcmexample-sq_amXpUDW9K_irSBnrndA==/base.apk) [FirebaseMessaging] at com.google.firebase.messaging.zza.zzrj(Unknown Source:195) [FirebaseMessaging] at com.google.firebase.messaging.zza.zzs(Unknown Source:273) [FirebaseMessaging] at com.google.firebase.messaging.FirebaseMessagingService.handleIntent(Unknown Source:189) [FirebaseMessaging] at com.google.firebase.iid.zzg.run(Unknown Source:26) [FirebaseMessaging] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) [FirebaseMessaging] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) [FirebaseMessaging] at java.lang.Thread.run(Thread.java:764)

有谁知道如何修理它?或者有没有人知道一个可行的教程,让Xamarin Android应用程序接收FCM后台通知?

顺便说一句:在我看来,该教程有点过时,因为Firebase控制台UI与示例中引入的内容完全不同。微软应该更新教程,我​​发现教程已经过时并且当我按照我能做的一切时它不起作用,这是非常令人沮丧的。

答案

我有一种感觉,接收器丢失,请检查您是否已将以下内容添加到清单文件中:

  <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
    <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="$applicationId" />
        </intent-filter>
    </receiver>

请检查这是否有效,如果没有还原,还要确保接收器位于<application>标签内,而不是<manifest>标签。

更新:

另外,检查MainActivity中是否需要通知通道。您可以在onCreate方法中调用此方法:

void CreateNotificationChannel()
    
        if (Build.VERSION.SdkInt < BuildVersionCodes.O)
        
            // Notification channels are new in API 26 (and not a part of the
            // support library). There is no need to create a notification 
            // channel on older versions of Android.
            return;
        

        var channel = new NotificationChannel(CHANNEL_ID, "FCM Notifications", NotificationImportance.Default)
                      
                          Description = "Firebase Cloud Messages appear in this channel"
                      ;

        var notificationManager = (NotificationManager) GetSystemService(NotificationService);
        notificationManager.CreateNotificationChannel(channel);
    

哪里

    internal static readonly string CHANNEL_ID = "my_notification_channel";
    internal static readonly int NOTIFICATION_ID = 100; 

分别是通道ID和通知ID的定义。

以上是关于无法通过Microsoft官方示例接收FCM后台通知的主要内容,如果未能解决你的问题,请参考以下文章

应用程序被杀死时无法接收推送解析 FCM

我在后台应用程序中无法再收到任何 FCM 消息

iOS 无法通过 FCM 接收推送通知(可以通过 APNs)

Swift 5 - 无法通过 FCM 接收推送通知

如何在应用程序处于后台(ios)时使 FCM 通知正常工作?

Android - 通过活动启动 Firebase 消息传递 (FCM) 的某种方式?