我有一个Xamarin.Forms v4.4.0.991477应用程序,其中我设置了Firebase推送通知。对于我使用的Xamarin.Android项目,Xamarin.Firebase.Messaging v71.1740.0包。
在用户注销时,我调用,
FirebaseInstanceId.Instance.DeleteInstanceId()
但它抛出了一个异常,
Java.IO.IOException: MAIN_THREAD
at Java.Interop.JniEnvironment+InstanceMethods.CallVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x0006e] in <af1c6fdcff1a4da4a0e44a8cdef352da>:0
at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x0002a] in <af1c6fdcff1a4da4a0e44a8cdef352da>:0
at Firebase.Iid.FirebaseInstanceId.DeleteInstanceId () [0x0000a] in <86531d1309d7458994f8292b9231bad1>:0
at MyDroid.Droid.PlatformFCM.Terminate () [0x00002] in /Volumes/MyDroid/Droid/PlatformFCM.cs:40
--- End of managed Java.IO.IOException stack trace ---
java.io.IOException: MAIN_THREAD
at com.google.firebase.iid.FirebaseInstanceId.deleteInstanceId(Unknown Source:69)
at crc64ee486da937c010f4.ButtonRenderer.n_onClick(Native Method)
at crc64ee486da937c010f4.ButtonRenderer.onClick(ButtonRenderer.java:104)
at android.view.View.performClick(View.java:6897)
at android.widget.TextView.performClick(TextView.java:12693)
at android.view.View$PerformClick.run(View.java:26101)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
令牌似乎也没有过期。当我检查令牌时,我得到相同的令牌。
如何删除令牌过期FirebaseInstanceId
?
调用,
FirebaseInstanceId.Instance.DeleteInstanceId();
应该像这样在后台线程中调用,
Task.Run(() => { FirebaseInstanceId.Instance.DeleteInstanceId(); });
因为它是阻止服务。不应在Main
线程上调用它。
参考
public voiddeleteInstanceId ((
删除实例 ID 及其关联的数据。
这会停止定期向生成实例 ID 时启动的 Firebase 后端发送数据,除非使用其他需要实例 ID 的库(如 FCM、RemoteConfig 或 Analytics(或将其配置为自动执行。
如果启用了 Firebase 云消息自动初始化功能,则会异步生成新的实例 ID。
这是一个阻塞函数,因此不要在主线程上调用它。