【发布时间】:2017-10-16 12:56:40
【问题描述】:
我正在尝试在我的 Xamarin Android 项目中实现远程通知。我按照各种指南中的分步说明进行操作,但从未调用过 OnTokenRefresh 方法,即使是第一次,所以看起来我的应用程序没有收到任何类型的令牌,甚至没有进行任何类型的 firebase 注册.
- 我已将 Firebase 添加到我的 Android 应用并下载了
google-services.json - 我在我的 Xamarin Android 项目中包含了
google-services.json,并将 Build Action 设置为 GoogleServicesJson -
我将此代码插入
AndroidManifest.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> -
我创建了一个扩展
FirebaseInstanceIdService的类[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 } }
正如我已经说过的,OnTokenRefresh 永远不会被调用。
我无法理解的是:Firebase 注册谁来接收有效令牌?
是否缺少指令?
是否存在进行此注册的缺失方法?
为什么永远不会调用OnTokenRefresh?
【问题讨论】:
-
您是否正在获取
unsuccessful或successfulFirebaseApp 初始化? stackoverflow.com/a/42159446/4984832 -
在 MainActivity 我执行:
FirebaseApp.InitializeApp(this);但它返回此 Java 异常:“Java.Lang.IllegalStateException:默认 FirebaseApp 未在此过程中初始化。确保调用 Firebase...” -
我已经解决了制作清洁解决方案的问题。难以置信。
-
我发现卸载应用程序并清理解决方案对我有用。
-
遇到这个问题的人,请尝试“清理”解决方案,这涉及手动删除项目中的 \obj\debug 或 \obj\release 文件夹。
标签: android firebase xamarin push-notification xamarin.android