Xamarin.Forms FCM OnRefereshToken方法未在发布模式下调用Android设备 [英] Xamarin.Forms FCM OnRefereshToken Method not called in release mode Android Device

查看:88
本文介绍了Xamarin.Forms FCM OnRefereshToken方法未在发布模式下调用Android设备的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经使用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>

在Debug模式下完全可以,但是当我在发布模式下运行应用程序时,甚至没有调用OnTokenRefresh方法.

任何人都可以建议我如何解决此问题.

解决方案

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

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

这是一个错误,您还会在Microsoft xamarin网站上找到该错误,其中显示了FCM的实现,您可以找到此处上有Bugzilla报告./p>

解决此问题的步骤:

Xamarin仅为您提供:

这是一个已知问题,您可以通过清洁解决方案并重建项目来解决(构建>清洁解决方案,构建>重建解决方案).有关更多信息,请参见此论坛讨论.

但是我建议您执行以下操作以确保确定.

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

  • 如果不从您的Android项目中删除bin和obj文件夹.

  • 清洁构建您的解决方案,然后重试

  • 如果该软件可以存档应用程序并处于发布模式,请测试您是否收到通知.(如果它在一台设备上可以正常运行).

  • 可以在此处

  • 找到归档步骤

I have Implemented a Xamarin Pushnotification using FCM and my code looks like

 // 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
}

Also I have added all required permission in AndroidManifest and its like

<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>

it's perfectly fine in Debug mode but when I run the app in release mode OnTokenRefresh method not even called .

can anyone please suggest me how can I resolve this issue.

解决方案

There is a known bug in FCM that even I faced when I was implementing the same in my android application

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

Which is a bug that you will also find in the Microsoft xamarin website where it shows the implementation of FCM which you can find here

Also, there is a Bugzilla report on the same here.

Steps to solve the issue:

Xamarin only gives you this:

This is a known problem that you can work around by cleaning the solution and rebuilding the project (Build > Clean Solution, Build > Rebuild Solution). For more information, see this forum discussion.

But I recommend you do the following to be sure.

  • Check if you are receiving notifications when in debug mode.

  • If not remove bin and obj folders from your Android project.

  • Clean build your solution and try again

  • If it works archive the application and in release mode, test if you are receiving notifications.(If it works on one device it will work in all).

  • Steps for archive can be found here

这篇关于Xamarin.Forms FCM OnRefereshToken方法未在发布模式下调用Android设备的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆