注销时调用 FirebaseInstanceId.Instance.DeleteInstanceId() 以停止 Xamarin.Android 中的 FCM 通知会引发异常
Calling FirebaseInstanceId.Instance.DeleteInstanceId() on logout to stop FCM notification in Xamarin.Android would throw an exception
我有一个 Xamarin.Forms v4.4.0.991477 应用程序,我在其中设置了 Firebase 推送通知。对于我用过的Xamarin.Android项目,Xamarin.Firebase.Messaging v71.1740.0 package.
在用户退出时,我调用,
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 void deleteInstanceId ()
Delete the Instance ID and the data associated with it.
This stops the periodic sending of data to the Firebase backend started when the Instance ID was generated, unless another library that requires InstanceId (like FCM, RemoteConfig or Analytics) is used or it's configured to be executed automatically.
A new Instance ID is generated asynchronously if Firebase Cloud Messaging auto-init is enabled.
This is a blocking function so do not call it on the main thread.
我有一个 Xamarin.Forms v4.4.0.991477 应用程序,我在其中设置了 Firebase 推送通知。对于我用过的Xamarin.Android项目,Xamarin.Firebase.Messaging v71.1740.0 package.
在用户退出时,我调用,
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 void deleteInstanceId ()
Delete the Instance ID and the data associated with it.
This stops the periodic sending of data to the Firebase backend started when the Instance ID was generated, unless another library that requires InstanceId (like FCM, RemoteConfig or Analytics) is used or it's configured to be executed automatically.
A new Instance ID is generated asynchronously if Firebase Cloud Messaging auto-init is enabled.
This is a blocking function so do not call it on the main thread.