我有一个Xamarin.Forms v4.4.0.991477应用程序,其中已设置Firebase Push Notification。对于我使用的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 Visit.Mobile.Droid.XamFcmPlugin.XamFcmPluginPlatform.Terminate () [0x00002] in /Volumes/SharedDrive/rizan/My Work/DIPS/Visit.Mobile/src/Visit.Mobile.Android/XamFcmPlugin/XamFcmPluginPlatform.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
线程上调用not。
public void deleteInstanceId()
删除实例ID和与其关联的数据。
这将停止向生成实例ID时启动的Firebase后端定期发送数据,除非使用了另一个需要InstanceId的库(例如FCM,RemoteConfig或Analytics(分析)),或者配置为自动执行。
如果启用了Firebase Cloud Messaging自动初始化,则会异步生成一个新的实例ID。
这是一个阻塞函数,因此不要在主线程上调用它。