注销时调用FirebaseInstanceId.Instance.DeleteInstanceId()以停止Xamarin中的FCM通知。Android会引发异常

问题描述 投票:0回答:1

我有一个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以使令牌失效?

xamarin xamarin.android firebase-cloud-messaging
1个回答
0
投票

通话,

FirebaseInstanceId.Instance.DeleteInstanceId();

应该在这样的后台线程中调用,

Task.Run(() => { FirebaseInstanceId.Instance.DeleteInstanceId(); });

因为它是阻止服务。应该在Main线程上调用not

Reference,

public void deleteInstanceId()

删除实例ID和与其关联的数据。

这将停止向生成实例ID时启动的Firebase后端定期发送数据,除非使用了另一个需要InstanceId的库(例如FCM,RemoteConfig或Analytics(分析)),或者配置为自动执行。

如果启用了Firebase Cloud Messaging自动初始化,则会异步生成一个新的实例ID。

这是一个阻塞函数,因此不要在主线程上调用它。

© www.soinside.com 2019 - 2024. All rights reserved.