ben-xD / push

Push notifications in Flutter without firebase_messaging.
https://pub.dev/packages/push
36 stars 22 forks source link

Android: Crash on simulator #54

Closed pfcstyle closed 2 months ago

pfcstyle commented 2 months ago

ERROR

Crash when getToken if Firebase Installations Service is unavailable.

E/FirebaseMessaging(23424): Failed to get FIS auth token
E/FirebaseMessaging(23424): java.util.concurrent.ExecutionException: com.google.firebase.installations.FirebaseInstallationsException: Firebase Installations Service is unavailable. Please try again later.
......

FATAL EXCEPTION: main
Process: com.example.arcgis_workplace, PID: 19717
com.google.android.gms.tasks.RuntimeExecutionException: java.io.IOException: java.util.concurrent.ExecutionException: java.io.IOException: SERVICE_NOT_AVAILABLE
    at com.google.android.gms.tasks.zzw.getResult(com.google.android.gms:play-services-tasks@@18.0.2:3)
    at uk.orth.push.PushHostHandlers.getToken$lambda$0(PushHostHandlers.kt:53)
    at uk.orth.push.PushHostHandlers.$r8$lambda$0r2v2uu1xZZwKWxpH2qnestbryI(Unknown Source:0)
    at uk.orth.push.PushHostHandlers$$ExternalSyntheticLambda0.onComplete(Unknown Source:2)
    at com.google.android.gms.tasks.zzi.run(com.google.android.gms:play-services-tasks@@18.0.2:1)
    at android.os.Handler.handleCallback(Handler.java:958)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loopOnce(Looper.java:205)
    at android.os.Looper.loop(Looper.java:294)
    at android.app.ActivityThread.main(ActivityThread.java:8177)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
Caused by: java.io.IOException: java.util.concurrent.ExecutionException: java.io.IOException: SERVICE_NOT_AVAILABLE
    at com.google.firebase.messaging.FirebaseMessaging.blockingGetToken(FirebaseMessaging.java:632)
    at com.google.firebase.messaging.FirebaseMessaging.lambda$getToken$4$com-google-firebase-messaging-FirebaseMessaging(FirebaseMessaging.java:393)
    at com.google.firebase.messaging.FirebaseMessaging$$ExternalSyntheticLambda10.run(Unknown Source:4)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:487)
    at java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:307)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
    at com.google.android.gms.common.util.concurrent.zza.run(com.google.android.gms:play-services-basement@@18.1.0:2)
    at java.lang.Thread.run(Thread.java:1012)
Caused by: java.util.concurrent.ExecutionException: java.io.IOException: SERVICE_NOT_AVAILABLE
    at com.google.android.gms.tasks.Tasks.zza(com.google.android.gms:play-services-tasks@@18.0.2:5)
    at com.google.android.gms.tasks.Tasks.await(com.google.android.gms:play-services-tasks@@18.0.2:8)
    at com.google.firebase.messaging.FirebaseMessaging.blockingGetToken(FirebaseMessaging.java:630)
    at com.google.firebase.messaging.FirebaseMessaging.lambda$getToken$4$com-google-firebase-messaging-FirebaseMessaging(FirebaseMessaging.java:393) 
    at com.google.firebase.messaging.FirebaseMessaging$$ExternalSyntheticLambda10.run(Unknown Source:4) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:487) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:264) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:307) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) 
    at com.google.android.gms.common.util.concurrent.zza.run(com.google.android.gms:play-services-basement@@18.1.0:2) 
    at java.lang.Thread.run(Thread.java:1012) 
Caused by: java.io.IOException: SERVICE_NOT_AVAILABLE
    at com.google.android.gms.cloudmessaging.zzv.then(com.google.android.gms:play-services-cloud-messaging@@17.0.0:5)
    at com.google.android.gms.tasks.zzc.run(com.google.android.gms:play-services-tasks@@18.0.2:3)
    at com.google.android.gms.cloudmessaging.zzz.execute(Unknown Source:0)
    at com.google.android.gms.tasks.zzd.zzd(com.google.android.gms:play-services-tasks@@18.0.2:1)
    at com.google.android.gms.tasks.zzr.zzb(com.google.android.gms:play-services-tasks@@18.0.2:5)
    at com.google.android.gms.tasks.zzw.zza(com.google.android.gms:play-services-tasks@@18.0.2:4)
    at com.google.android.gms.tasks.TaskCompletionSource.setException(com.google.android.gms:play-services-tasks@@18.0.2:1)
    at com.google.android.gms.cloudmessaging.zzp.zzc(com.google.android.gms:play-services-cloud-messaging@@17.0.0:3)
    at com.google.android.gms.cloudmessaging.zzm.zze(com.google.android.gms:play-services-cloud-messaging@@17.0.0:5)
    at com.google.android.gms.cloudmessaging.zzk.run(com.google.android.gms:play-services-cloud-messaging@@17.0.0:1)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:487) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:264) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:307) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) 
    at com.google.android.gms.common.util.concurrent.zza.run(com.google.android.gms:play-services-basement@@18.1.0:2) 
    at java.lang.Thread.run(Thread.java:1012) 
Caused by: com.google.android.gms.cloudmessaging.zzq: Timed out waiting for response
    at com.google.android.gms.cloudmessaging.zzm.zze(com.google.android.gms:play-services-cloud-messaging@@17.0.0:4)
    at com.google.android.gms.cloudmessaging.zzk.run(com.google.android.gms:play-services-cloud-messaging@@17.0.0:1) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:487) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:264) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:307) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) 
    at com.google.android.gms.common.util.concurrent.zza.run(com.google.android.gms:play-services-basement@@18.1.0:2) 
    at java.lang.Thread.run(Thread.java:1012) 
pfcstyle commented 2 months ago

In PushHostHandlers.kt

override fun getToken(callback: (Result<String>) -> Unit) {
      FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
          val fcmToken = task.result
          if (!task.isSuccessful) {
              Log.w(TAG, "Fetching FCM registration token failed", task.exception)
              callback(
                  Result.failure(
                      IllegalStateException(
                          "Fetching FCM registration token failed, but exception was null",
                          task.exception
                      )
                  )
              )
              return@OnCompleteListener
          } else if (fcmToken == null) {
              Log.w(TAG, "FCM token was null")
              callback(Result.failure(IllegalStateException("FCM token was null")))
              return@OnCompleteListener
          }
          // Return latest FCM registration token
          callback(Result.success(fcmToken))
      })
  }

Exception occurred on val fcmToken = task.result, the result should be called when task is successful.

ben-xD commented 2 months ago

Nice, fixed by your https://github.com/ben-xD/push/pull/55