diff --git a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Message.cs b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Message.cs index 68e28a7..28da19c 100644 --- a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Message.cs +++ b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Message.cs @@ -1,5 +1,8 @@ +using System.Threading.Tasks; +using Firebase.Extensions; + namespace Guru { using System; @@ -34,27 +37,72 @@ namespace Guru FirebaseMessaging.TokenReceived += OnTokenReceived; FirebaseMessaging.MessageReceived += OnMessageReceived; - GetFCMToken(); + + DelayGetFCMToken(0); } - private static void GetFCMToken() + /// + /// 异步获取 FCM Token + /// + private static void GetFCMTokenAsync() + { + Debug.Log($"[Firebase] --- Start GetTokenAsync ---"); + FirebaseMessaging.GetTokenAsync().ContinueWithOnMainThread(task => + { + if (!task.IsCompletedSuccessfully) + { + DelayGetFCMToken(10); + return; + } + + var token = task.Result; + if (string.IsNullOrEmpty(token)) + { + DelayGetFCMToken(10); + return; + } + + + Debug.Log($"[Firebase] --- GetPushToken:{token}"); + IPMConfig.IPM_PUSH_TOKEN = token; + IPMConfig.IS_UPLOAD_DEVICE_SUCCESS = true; + + UploadDeviceInfo(); + }); + } + + private static async void DelayGetFCMToken(int seconds = 10) + { + await Task.Delay(seconds * 1000); // 等待 10s + GetFCMTokenAsync(); + } + + + //-------- Upload DeviceInfo ----------- + + + /* + private static void GetFCMToken() { CoroutineHelper.Instance.StartCoroutine(CoroutineGetFCMToken()); } private static IEnumerator CoroutineGetFCMToken() { + Debug.Log($"[Firebase] --- Start GetTokenAsync ---"); + var task = FirebaseMessaging.GetTokenAsync(); while (!task.IsCompleted) yield return new WaitForEndOfFrame(); if (task.IsFaulted || task.IsCanceled) { + Log.I(LOG_TAG, $"--- GetTokenAsync Token Failed! {task.Status}"); CoroutineHelper.Instance.StartDelayed(10, GetFCMToken); } else { - Log.I(LOG_TAG, "GetTokenAsync Token: " + task.Result); + Log.I(LOG_TAG, "--- GetTokenAsync Token: " + task.Result); if (IPMConfig.IPM_PUSH_TOKEN != task.Result || !IPMConfig.IS_UPLOAD_DEVICE_SUCCESS) { IPMConfig.IPM_PUSH_TOKEN = task.Result; @@ -62,6 +110,7 @@ namespace Guru } } } + */ private static void UploadDeviceInfo() { @@ -73,7 +122,7 @@ namespace Guru } else { - Log.I(LOG_TAG, "FirebaseMessage Send UploadDeviceInfo"); + Debug.Log($"[Firebase] --- UploadDeviceInfo ---"); //延时重试 new DeviceInfoUploadRequest() .SetRetryTimes(1)