在Xamarin Android中从未调用过OnTokenRefresh
我正试图在我的XamarinAndroid项目中实现远程通知。我遵循了各种指南中的逐步说明,但从未调用过在Xamarin Android中从未调用过OnTokenRefresh,android,firebase,xamarin,push-notification,xamarin.android,Android,Firebase,Xamarin,Push Notification,Xamarin.android,我正试图在我的XamarinAndroid项目中实现远程通知。我遵循了各种指南中的逐步说明,但从未调用过OnTokenRefresh方法,即使是第一次,因此我的应用程序似乎没有收到任何类型的令牌,甚至没有进行任何类型的firebase注册 我已将Firebase添加到我的Android应用程序中,并下载了google services.json 我在Xamarin Android项目中包含了google services.json,并将构建操作设置为GoogleServicesJson 我在An
OnTokenRefresh
方法,即使是第一次,因此我的应用程序似乎没有收到任何类型的令牌,甚至没有进行任何类型的firebase注册
google services.json
google services.json
,并将构建操作设置为GoogleServicesJsonAndroidManifest.xml
<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>
OnTokenRefresh
从未被调用。
我无法理解的是:Firebase注册是为了让谁获得有效令牌?
是否缺少指令?
是否缺少进行此注册的方法?
为什么从不调用OnTokenRefresh
根据(请参阅标题为:实现Firebase实例ID服务的部分)OnTokenRefresh仅在少数情况下调用:
- 安装或卸载应用程序时
- 当用户删除应用程序数据时
- 当应用程序删除实例ID时
- 当令牌的安全性受到威胁时
为了触发OnTokenRefresh,您应该首先从设备卸载应用程序。然后,当您重新安装并首次打开应用程序时,将调用OnTokenRefresh。您应该在活动中启动服务,如下所示:
var intent=新的intent(这个,类型为(FirebaseRegistrationService));
StartService(意向)代码>
另外,请清洁解决方案一次,然后再次运行应用程序。firebase for xamarin中存在一个bug。您可以通过禁用该选项来避免每次清洗该解决方案
在部署之间保留设备上的应用程序数据缓存
在
VS2017 Enterprise中的工具->选项->Xamarin->Android设置
这使得每次重新部署后都会调用OnTokenRefresh
。如果您使用的是emulator,请确保安装google应用程序,因为它取决于设备中存在的google play services软件包
如果您使用的是Genymotion,您可以按install Gapps您是否获得不成功
或成功
FirebaseApp初始化?在MainActivity中,我执行:FirebaseApp.InitializeApp(this)代码>但它返回此Java异常:“Java.Lang.IllegalStateException:默认FirebaseApp在此过程中未初始化。请确保调用Firebase…”我已解决了清理解决方案的问题。难以置信。我发现卸载应用程序和清理解决方案对我来说是可行的。遇到此问题的任何人,请尝试“清理”解决方案,包括从项目中手动删除\obj\debug或\obj\release文件夹。这是否仍然是一个需要按所述启动活动的错误?或者在随后的Xamarin.Android更新中已经修复了这个问题?在我写这篇文章时的个人测试中,我不需要执行上述代码,但是知道是否仍然需要解决方法对以后搜索这个主题会有帮助。我认为你不必每次都手动启动服务。它是自动发生的。xamarin中的FCM存在一个错误,当您卸载应用程序、删除bin和debug文件夹并重建应用程序时,该错误将得到解决
[Service]
[IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
class FirebaseRegistrationService : FirebaseInstanceIdService
{
const string TAG = "FirebaseRegistrationService";
public override void OnTokenRefresh()
{
var refreshedToken = FirebaseInstanceId.Instance.Token;
System.Diagnostics.Debug.WriteLine(TAG, "Refreshed token: " + refreshedToken);
MainActivity.CurrentActivity.RunOnUiThread(() => RegisterDeviceOnServer(refreshedToken));
}
public void RegisterDeviceOnServer(string refreshedToken)
{
// Custom implementation
}
}