Xamarin.Forms FCM OnRefereshToken方法未在发布模式Android Device中调用

时间:2018-03-15 12:21:10

标签: xamarin.forms xamarin.android firebase-cloud-messaging

我已经使用FCM实现了Xamarin推送,我的代码看起来像

 // 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方法中运行应用程序时甚至没有调用。

任何人都可以建议我如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

FCM中存在一个已知的错误,即使我在我的Android应用程序中实现相同的内容时也面临着

Java.Lang.IllegalStateException: Default FirebaseApp is not initialized in this process Make sure to call FirebaseApp.initializeApp(Context) first.

您还可以在Microsoft xamarin网站上找到哪个错误,其中显示了您可以找到的FCM的实施here

此外,还有一个关于同一here的Bugzilla报告。

解决问题的步骤:

Xamarin只给你这个:

  

这是一个已知的问题,您可以通过清理解决方案和重建项目来解决这个问题(Build&gt; Clean Solution,Build&gt; Rebuild Solution)。有关详细信息,请参阅此forum discussion

但我建议你做以下事情以确定。

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

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

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

  • 如果它可以归档应用程序并处于发布模式,请测试您是否收到通知。(如果它在一台设备上运行,则可以全部使用)。

  • 可以找到存档步骤here