diff --git a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Auth.cs b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Auth.cs index ef2b31c..082d2cf 100644 --- a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Auth.cs +++ b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Auth.cs @@ -4,19 +4,21 @@ using UnityEngine; namespace Guru { + using System; public static partial class FirebaseUtil { public static FirebaseUser CurrentUser => FirebaseAuth.DefaultInstance.CurrentUser; private static readonly WaitForSeconds _wait = new WaitForSeconds(10); - public static void AuthUser() + public static void AuthUser(Action onSuccessHandler = null) { //FirebaseAuth获取用户验证并同步用户数据 if (CurrentUser != null) { Log.I(LOG_TAG, $"[Auth] user exists,UserId:{CurrentUser.UserId}"); OnFirebaseAuthResult?.Invoke(true); + onSuccessHandler?.Invoke(); return; } @@ -24,7 +26,7 @@ namespace Guru Log.I(LOG_TAG, $"[Auth] Firebase Token:{authToken}"); if (string.IsNullOrEmpty(authToken) || !NetworkUtil.IsNetAvaliable) { - CoroutineHelper.Instance.StartDelayed(_wait, AuthUser); + CoroutineHelper.Instance.StartDelayed(_wait, ()=> AuthUser(onSuccessHandler)); OnFirebaseAuthResult?.Invoke(false); return; } @@ -37,18 +39,19 @@ namespace Guru { Log.E(LOG_TAG,"[Auth] SignInWithCustomTokenAsync encountered an error: " + task.Exception); OnFirebaseAuthResult?.Invoke(false); - CoroutineHelper.Instance.StartDelayed(_wait, AuthUser); + CoroutineHelper.Instance.StartDelayed(_wait, () => AuthUser(onSuccessHandler)); return; } // ----- User is NULL ----- if (CurrentUser == null) { OnFirebaseAuthResult?.Invoke(false); - CoroutineHelper.Instance.StartDelayed(_wait, AuthUser); + CoroutineHelper.Instance.StartDelayed(_wait, ()=> AuthUser(onSuccessHandler)); return; } // ----- Success ----- OnFirebaseAuthResult?.Invoke(true); // 最后判定是成功的 + onSuccessHandler?.Invoke(); }); } } diff --git a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.cs b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.cs index a8088b1..9ce380d 100644 --- a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.cs +++ b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.cs @@ -61,8 +61,7 @@ namespace Guru .SetSuccessCallBack(() => { OnUserAuthResult?.Invoke(true); - InitializeMessage(); - AuthUser(); + AuthUser(InitializeMessage); }).SetFailCallBack(() => { OnUserAuthResult?.Invoke(false); @@ -84,12 +83,12 @@ namespace Guru //中台firebaseToken失效,从中台重新获取firebaseToken new RefreshFirebaseTokenRequest() .SetRetryTimes(-1) - .SetSuccessCallBack(AuthUser) + .SetSuccessCallBack(()=> AuthUser(InitializeMessage)) .Send(); } else { - AuthUser(); + AuthUser(InitializeMessage); } } } diff --git a/Runtime/GuruCore/Runtime/IPM/Scripts/DeviceUtil.cs b/Runtime/GuruCore/Runtime/IPM/Scripts/DeviceUtil.cs index 00c1153..bddc4e3 100644 --- a/Runtime/GuruCore/Runtime/IPM/Scripts/DeviceUtil.cs +++ b/Runtime/GuruCore/Runtime/IPM/Scripts/DeviceUtil.cs @@ -43,7 +43,7 @@ namespace Guru if(!string.IsNullOrEmpty(content)) { string[] infos = content.Split('$'); - IPMConfig.SetDeviceId(infos[0]); + // IPMConfig.SetDeviceId(infos[0]); IPMConfig.IPM_APP_VERSION = infos[1]; IPMConfig.IPM_TIMEZONE = infos[2]; IPMConfig.IPM_MODEL = infos[3]; diff --git a/Runtime/GuruCore/Runtime/IPM/Scripts/IPMConfig.cs b/Runtime/GuruCore/Runtime/IPM/Scripts/IPMConfig.cs index d4a5e73..3899bdf 100644 --- a/Runtime/GuruCore/Runtime/IPM/Scripts/IPMConfig.cs +++ b/Runtime/GuruCore/Runtime/IPM/Scripts/IPMConfig.cs @@ -127,10 +127,10 @@ namespace Guru public static readonly string IPM_EVENT_URL = IPM_URL + "push/api/v1/push/app/event"; - public static string UUID + public static string IPM_UUID { - get => PlayerPrefs.GetString(nameof(UUID), ""); - set => PlayerPrefs.SetString(nameof(UUID), value); + get => PlayerPrefs.GetString(nameof(IPM_UUID), ""); + set => PlayerPrefs.SetString(nameof(IPM_UUID), value); } public static string IPM_UID diff --git a/Runtime/GuruCore/Runtime/IPM/Scripts/RequestData/DeviceData.cs b/Runtime/GuruCore/Runtime/IPM/Scripts/RequestData/DeviceData.cs index 873b73b..f200c90 100644 --- a/Runtime/GuruCore/Runtime/IPM/Scripts/RequestData/DeviceData.cs +++ b/Runtime/GuruCore/Runtime/IPM/Scripts/RequestData/DeviceData.cs @@ -37,9 +37,9 @@ namespace Guru public DeviceData() { DeviceUtil.GetDeviceInfo(); - if (string.IsNullOrEmpty(IPMConfig.UUID)) + if (string.IsNullOrEmpty(IPMConfig.IPM_UUID)) { - IPMConfig.UUID = IDHelper.GenUUID(IPMConfig.IPM_UID); + IPMConfig.IPM_UUID = IDHelper.GenUUID(IPMConfig.IPM_UID); } deviceId = IPMConfig.IPM_DEVICE_ID; @@ -62,7 +62,7 @@ namespace Guru idfa = IPMConfig.ADJUST_IDFA; adid = IPMConfig.ADJUST_ADID; gpsAdid = IPMConfig.ADJUST_GPSADID; - userUuid = IPMConfig.UUID; + userUuid = IPMConfig.IPM_UUID; } public override string ToString() diff --git a/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/AuthUserRequest.cs b/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/AuthUserRequest.cs index 2a87a51..fa2d2d5 100644 --- a/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/AuthUserRequest.cs +++ b/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/AuthUserRequest.cs @@ -55,7 +55,7 @@ namespace Guru IPMConfig.IPM_NEWUSER = responseData.data.newUser; IPMConfig.IPM_TOKEN_TIME = TimeUtil.GetCurrentTimeStampSecond(); IPMConfig.IPM_FIREBASE_TOKEN_TIME = TimeUtil.GetCurrentTimeStampSecond(); - IPMConfig.UUID = IDHelper.GenUUID(responseData.data.uid); + IPMConfig.IPM_UUID = IDHelper.GenUUID(responseData.data.uid); DeviceUtil.Save2AppGroup(); } diff --git a/Runtime/GuruIAP/Runtime/Code/IAPServiceBase.cs b/Runtime/GuruIAP/Runtime/Code/IAPServiceBase.cs index aa3a62c..c69f4c3 100644 --- a/Runtime/GuruIAP/Runtime/Code/IAPServiceBase.cs +++ b/Runtime/GuruIAP/Runtime/Code/IAPServiceBase.cs @@ -70,7 +70,7 @@ namespace Guru private byte[] _googlePublicKey; private byte[] _appleRootCert; private string _uid; - + private string _uuid; /// /// 服务初始化回调 /// @@ -157,6 +157,30 @@ namespace Guru Initialize(uid, showLog); } + + public void SetUID(string uid) + { + if (_configBuilder != null && !string.IsNullOrEmpty(uid)) + { + _uid = uid; + _configBuilder.Configure().SetObfuscatedAccountId(uid); + Debug.Log($"[IAP] --- Set UID: {uid}"); + } + } + + + public void SetUUID(string uuid) + { + if (_appleExtensions != null && !string.IsNullOrEmpty(uuid)) + { + _uuid = uuid; + _appleExtensions.SetApplicationUsername(uuid); + Debug.Log($"[IAP] --- Set UUID: {uuid}"); + } + } + + + /// /// 初始化支付插件 /// @@ -231,14 +255,14 @@ namespace Guru { _storeController = controller; _storeExtensionProvider = extensions; - var uuid = IPMConfig.UUID; + var uuid = IPMConfig.IPM_UUID; if(string.IsNullOrEmpty(_uid)) _uid = IPMConfig.IPM_UID; if (!string.IsNullOrEmpty(_uid) && string.IsNullOrEmpty(uuid)) { uuid = IDHelper.GenUUID(_uid); } - LogI($"--- IAP Initialized Success. With UID: {_uid} and UUID: {uuid}"); + LogI($"--- IAP Initialized Success. With UID: {_uid} UUID: {uuid} DeviceId: {IPMConfig.IPM_DEVICE_ID}"); #if UNITY_IOS _appleExtensions = extensions.GetExtension(); @@ -250,12 +274,22 @@ namespace Guru LogI("Purchase deferred: " + item.definition.id); OnAppStorePurchaseDeferred?.Invoke(item); }); + + var appReceipt = _configBuilder.Configure().appReceipt; + if (!string.IsNullOrEmpty(appReceipt)) + { + LogI($"[IAP] --- AppReceipt: {appReceipt}"); + } + #elif UNITY_ANDROID _configBuilder.Configure().SetObfuscatedAccountId(_uid); // SetUp UID _googlePlayStoreExtensions = extensions.GetExtension(); //添加安装游戏后第一次初试化进行恢复购买的回调 只有安卓才有 _googlePlayStoreExtensions.RestoreTransactions(OnRestoreHandle); #endif + + + foreach (var product in _storeController.products.all) { @@ -764,7 +798,11 @@ namespace Guru appleReceiptString = recp.ToString(); LogI($"--- [{productId}] iOS receipt: {appleReceiptString}"); } + + Debug.Log($"[IAP] --- Full receipt: \n{args.purchasedProduct.receipt}"); #endif + + allReceipts = _validator.Validate(args.purchasedProduct.receipt);