Вызов FirebaseInstanceId.Instance.DeleteInstanceId () при выходе из системы, чтобы остановить уведомление FCM в Xamarin. Android вызовет исключение - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть Xamarin.Forms v4.4.0.991477 приложение, в котором я настроил Firebase Pu sh Уведомление . Для проекта 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 для истечения срока действия токена?

1 Ответ

0 голосов
/ 11 февраля 2020

Вызов,

FirebaseInstanceId.Instance.DeleteInstanceId();

должен вызываться в фоновом потоке, как это,

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

, потому что это служба блокировки . Он должен не вызываться в потоке Main.

Ссылка,

publi c void deleteInstanceId ()

Удалить идентификатор экземпляра и данные

Это останавливает периодическую c отправку данных в серверную часть Firebase, начатую при создании идентификатора экземпляра, если только не используется другая библиотека, для которой требуется InstanceId (например, FCM, RemoteConfig или Analytics) или настроен на автоматическое выполнение.

Новый идентификатор экземпляра генерируется асинхронно, если включен автоматический запуск Firebase Cloud Messaging.

Это функция блокировки, поэтому не вызывайте ее на основная резьба.

...