Xamarin.forms 表单FCM OnRefereshToken方法在发布模式Android设备中未调用

Xamarin.forms 表单FCM OnRefereshToken方法在发布模式Android设备中未调用,xamarin.forms,xamarin.android,firebase-cloud-messaging,Xamarin.forms,Xamarin.android,Firebase Cloud Messaging,我已经使用FCM实现了一个Xamarin Pushnotification,我的代码如下 // This service handles the device's registration with FCM. [Service] [IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })] public class ZCFirebaseIIDService : FirebaseInstanceIdService {

我已经使用FCM实现了一个Xamarin Pushnotification,我的代码如下

 // This service handles the device's registration with FCM.
[Service]
[IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
public class ZCFirebaseIIDService : FirebaseInstanceIdService
{

    #region override methods
    public override void OnTokenRefresh()
    {
        var refreshedToken = FirebaseInstanceId.Instance.Token;
        App.DeviceToken = FirebaseInstanceId.Instance.Token;
    }
    #endregion
}
此外,我在AndroidManifest及其类似文件中添加了所有必需的权限

<uses-sdk android:minSdkVersion="14" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:label="App name" android:icon="@drawable/icon">
    <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.appname.fileprovider" android:exported="false" android:grantUriPermissions="true">
        <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths">
        </meta-data>
    </provider>
    <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>

它在调试模式下非常好,但是当我在发布模式下运行应用程序时,
OnTokenRefresh
方法甚至没有被调用


有人能告诉我如何解决这个问题吗。

FCM中有一个已知的错误,即使是我在android应用程序中实现该错误时也遇到过

Java.Lang.IllegalStateException:此过程中未初始化默认FirebaseApp
确保首先调用FirebaseApp.initializeApp(上下文)。

这是一个bug,你也可以在微软的xamarin网站上找到,在那里你可以找到FCM的实现

此外,还有一份Bugzilla报告

解决问题的步骤:

Xamarin只提供以下信息:

这是一个已知的问题,您可以通过清理解决方案并重建项目(生成>清理解决方案,生成>重建解决方案)来解决。有关更多信息,请参见此

但我建议你一定要做到以下几点

  • 检查在调试模式下是否收到通知

  • 如果没有,请从Android项目中删除bin和obj文件夹

  • 清理并构建解决方案,然后重试

  • 如果它在存档应用程序并处于发布模式下工作,请测试您是否收到通知。(如果它在一台设备上工作,那么它将在所有设备上工作)

  • 可以找到归档的步骤


你在使用proguard吗?不,我没有使用proguard,顺便说一句,我已经用谷歌搜索了它,并检查了那些已经可用的设置:)但是运气不好:(您在android中使用的firebase版本是什么app@G.hakim:我使用了Xamarin.Firebase.Messaging、Xamarin.Firebase.Iid、Xamarin.Firebase.Common所有版本号为42.1021.1I的版本,我已经发布了ans,看看好运!