commit db6324507de9712fd5bd6e57614081be06a8b589 Author: xiaohang Date: Mon Apr 1 17:24:16 2024 +0800 添加GuruSDKService实现GuruSDK接口 diff --git a/Editor.meta b/Editor.meta new file mode 100644 index 0000000..4a9ae9c --- /dev/null +++ b/Editor.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f647ee76aa4564f8897ce89748ce73b5 +timeCreated: 1702610996 \ No newline at end of file diff --git a/Editor/GuruSDKService.Editor.asmdef b/Editor/GuruSDKService.Editor.asmdef new file mode 100644 index 0000000..dd94239 --- /dev/null +++ b/Editor/GuruSDKService.Editor.asmdef @@ -0,0 +1,16 @@ +{ + "name": "GuruSDKService.Editor", + "rootNamespace": "", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Editor/GuruSDKService.Editor.asmdef.meta b/Editor/GuruSDKService.Editor.asmdef.meta new file mode 100644 index 0000000..fd30dba --- /dev/null +++ b/Editor/GuruSDKService.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d6c9b9a5879c04077be02fc6801ad1c7 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime.meta b/Runtime.meta new file mode 100644 index 0000000..710f98f --- /dev/null +++ b/Runtime.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a5e437dfefb504adc8311fcd64360dac +timeCreated: 1702610991 \ No newline at end of file diff --git a/Runtime/GuruSDKService.Callbacks.cs b/Runtime/GuruSDKService.Callbacks.cs new file mode 100644 index 0000000..ab44240 --- /dev/null +++ b/Runtime/GuruSDKService.Callbacks.cs @@ -0,0 +1,152 @@ +using System; +using Guru; +using UnityEngine; + +namespace GuruSDKService +{ + public partial class GuruSDKService + { + private void AddCallbackListener() + { + GuruSDK.Callbacks.App.OnAppPaused += OnAppPaused; + GuruSDK.Callbacks.App.OnAppQuit += OnAppQuit; + + GuruSDK.Callbacks.ConsentFlow.OnConsentResult += OnConsentResult; + GuruSDK.Callbacks.ConsentFlow.OnAttResult += OnAttResult; + + GuruSDK.Callbacks.SDK.OnFirebaseReady += OnFirebaseReady; + GuruSDK.Callbacks.SDK.OnGuruServiceReady += OnGuruServiceReady; + GuruSDK.Callbacks.SDK.OnUserAuthResult += OnUserAuthResult; + GuruSDK.Callbacks.SDK.OnFirebaseAuthResult += OnFirebaseAuthResult; + + GuruSDK.Callbacks.Ads.OnAdsInitComplete += OnAdsInitComplete; + GuruSDK.Callbacks.Ads.OnBannerADLoaded += OnBannerADLoaded; + GuruSDK.Callbacks.Ads.OnInterstitialADLoaded += OnInterstitialADLoaded; + GuruSDK.Callbacks.Ads.OnInterstitialADFailed += OnInterstitialADFailed; + GuruSDK.Callbacks.Ads.OnRewardedADLoaded += OnRewardedADLoaded; + GuruSDK.Callbacks.Ads.OnRewardADFailed += OnRewardADFailed; + + GuruSDK.Callbacks.Remote.OnRemoteFetchComplete += OnRemoteFetchComplete; + } + + #region App Callbacks + + private void OnAppPaused(bool paused) + { + Log.I($"[GuruCallback][OnAppPaused] paused:{paused}"); + _serviceImp?.OnAppPaused(paused); + } + + private void OnAppQuit() + { + Log.I($"[GuruCallback][OnAppQuit]"); + _serviceImp?.OnAppQuit(); + } + + #endregion + + #region SDK Callbacks + + private Action _onFirebaseReady; + + private void OnFirebaseReady(bool success) + { + Log.I($"[GuruCallback][OnFirebaseReady] success:{success}"); + if (success) _onFirebaseReady?.Invoke(); + _serviceImp?.OnFirebaseReady(success); + } + + private void OnGuruServiceReady() + { + Log.I($"[GuruCallback][OnGuruServiceReady]"); + _serviceImp?.OnGuruServiceReady(); + } + + private void OnUserAuthResult(bool success) + { + Log.I($"[GuruCallback][OnUserAuthResult] success:{success}"); + _serviceImp?.OnUserAuthResult(success); + } + + private void OnFirebaseAuthResult(bool success) + { + Log.I($"[GuruCallback][OnFirebaseAuthResult] success:{success}"); + _serviceImp?.OnFirebaseAuthResult(success); + } + + #endregion + + #region ConsentFlow Callbacks + + private void OnAttResult(int authorizationTrackingStatus) + { + Log.I($"[GuruCallback][OnAttResult] authorizationTrackingStatus:{authorizationTrackingStatus}"); + _serviceImp?.OnAttResult(authorizationTrackingStatus); + } + + private void OnConsentResult(int statusCode) + { + Log.I($"[GuruCallback][OnConsentResult] statusCode:{statusCode}"); + _serviceImp?.OnConsentResult(statusCode); + } + + #endregion + + #region AD Callbacks + + private void OnAdsInitComplete() + { + Log.I($"[GuruCallback][OnAdsInitComplete]"); + _serviceImp?.OnAdsInitComplete(); + } + + public bool HasBannerADLoaded; + + private void OnBannerADLoaded() + { + Log.I($"[GuruCallback][OnBannerADLoaded]"); + GuruSDK.Callbacks.Ads.OnBannerADLoaded -= OnBannerADLoaded; //只监听第一次banner加载成功,处理banner显示逻辑 + HasBannerADLoaded = true; + _serviceImp?.OnBannerADLoaded(); + } + + private void OnInterstitialADLoaded() + { + Log.I($"[GuruCallback][OnInterstitialADLoaded]"); + _serviceImp?.OnInterstitialADLoaded(); + } + + private void OnInterstitialADFailed() + { + Log.I($"[GuruCallback][OnInterstitialADFailed]"); + _serviceImp?.OnInterstitialADFailed(); + } + + private void OnRewardedADLoaded() + { + Log.I($"[GuruCallback][OnRewardedADLoaded]"); + _serviceImp?.OnRewardedADLoaded(); + } + + private void OnRewardADFailed() + { + Log.I($"[GuruCallback][OnRewardADFailed]"); + _serviceImp?.OnRewardADFailed(); + } + + #endregion + + #region Firebase Component Callbacks + + public bool IsRemoteConfigFetchSuccess = false; + + private void OnRemoteFetchComplete(bool success) + { + Log.I($"[GuruCallback][OnRemoteFetchComplete] success:{success}"); + IsRemoteConfigFetchSuccess = success; + _serviceImp?.OnRemoteFetchComplete(success); + } + + #endregion + } +} \ No newline at end of file diff --git a/Runtime/GuruSDKService.Callbacks.cs.meta b/Runtime/GuruSDKService.Callbacks.cs.meta new file mode 100644 index 0000000..670a4cd --- /dev/null +++ b/Runtime/GuruSDKService.Callbacks.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 80bb2eef12fb4131b6add5667fabfe80 +timeCreated: 1711961092 \ No newline at end of file diff --git a/Runtime/GuruSDKService.IAP.cs b/Runtime/GuruSDKService.IAP.cs new file mode 100644 index 0000000..e12e37a --- /dev/null +++ b/Runtime/GuruSDKService.IAP.cs @@ -0,0 +1,112 @@ +using Guru; +using UnityEngine.Purchasing; + +namespace GuruSDKService +{ + public partial class GuruSDKService + { + private void AddIAPCallbackListener() + { + GuruSDK.Callbacks.IAP.OnIAPInitStart += OnIAPInitStart; + GuruSDK.Callbacks.IAP.OnIAPInitComplete += OnIAPInitComplete; + GuruSDK.Callbacks.IAP.OnPurchaseStart += OnPurchaseStart; + GuruSDK.Callbacks.IAP.OnPurchaseEnd += OnPurchaseEnd; + GuruSDK.Callbacks.IAP.OnPurchaseFailed += OnPurchaseFailed; + GuruSDK.Callbacks.IAP.OnIAPRestored += OnIAPRestored; + } + + #region callbacks + + private void OnIAPInitStart() + { + Log.I($"[GuruCallback][OnIAPInitStart]"); + } + + private void OnIAPInitComplete(bool success) + { + Log.I($"[GuruCallback][OnIAPInitComplete] success:{success}"); + } + + private void OnPurchaseStart(string productName) + { + Log.I($"[GuruCallback][OnPurchaseStart] productName:{productName}"); + } + + private void OnPurchaseEnd(string productName, bool success) + { + Log.I($"[GuruCallback][OnPurchaseEnd] productName:{productName}, success:{success}"); + } + + private void OnPurchaseFailed(string productName, string reason) + { + Log.I($"[GuruCallback][OnPurchaseFailed] productName:{productName}, reason:{reason}"); + } + + private void OnIAPRestored(bool success, string msg) + { + Log.I($"[GuruCallback][OnIAPRestored] success:{success}, msg:{msg}"); + } + + #endregion + + #region 查询接口 + + public string GetProductCurrencyCode(string productName) + { + if (string.IsNullOrEmpty(productName)) + return Fallback(); + + var productInfo = GuruSDK.GetProductInfo(productName); + if (productInfo == null) + return Fallback(); + + return productInfo.CurrencyCode; + + string Fallback() + { + return "USD"; + } + } + + public string GetProductPriceString(string productName) + { + if (string.IsNullOrEmpty(productName)) + return Fallback(); + + var productInfo = GuruSDK.GetProductInfo(productName); + if (productInfo == null) + return Fallback(); + + return productInfo.LocalizedPriceString; + + string Fallback() + { + return "$0"; + } + } + + public double GetProductPrice(string productName) + { + if (string.IsNullOrEmpty(productName)) + return Fallback(); + + var productInfo = GuruSDK.GetProductInfo(productName); + if (productInfo == null) + return Fallback(); + + return productInfo.Price; + + double Fallback() + { + return 0.0; + } + } + + #endregion + + public void ShowIAPLoadingView() => _serviceImp.ShowIAPBuyLoadingView(); + public void CloseIAPLoadingView() => _serviceImp.CloseIAPLoadingView(); + public void IAPBuySuccessTip() => _serviceImp.IAPBuySuccessTip(); + public void IAPBuyFailTip() => _serviceImp.IAPBuyFailTip(); + } +} \ No newline at end of file diff --git a/Runtime/GuruSDKService.IAP.cs.meta b/Runtime/GuruSDKService.IAP.cs.meta new file mode 100644 index 0000000..d528aaa --- /dev/null +++ b/Runtime/GuruSDKService.IAP.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ad27e726ba8d45d2a9a2d363dda6105d +timeCreated: 1711961364 \ No newline at end of file diff --git a/Runtime/GuruSDKService.Model.cs b/Runtime/GuruSDKService.Model.cs new file mode 100644 index 0000000..7cd11e4 --- /dev/null +++ b/Runtime/GuruSDKService.Model.cs @@ -0,0 +1,26 @@ +using Guru; + +namespace GuruSDKService +{ + public partial class GuruSDKService + { + private void InitSDKModel() + { + if (_serviceImp != null) + { + SetGuruSDK_BLevel(_serviceImp.b_level); + SetGuruSDK_BPlay(_serviceImp.b_play); + } + } + + public void SetGuruSDK_BLevel(int level) + { + GuruSDK.SuccessLevelCount = level; + } + + public void SetGuruSDK_BPlay(int play) + { + GuruSDK.TotalPlayedCount = play; + } + } +} \ No newline at end of file diff --git a/Runtime/GuruSDKService.Model.cs.meta b/Runtime/GuruSDKService.Model.cs.meta new file mode 100644 index 0000000..7e8e92e --- /dev/null +++ b/Runtime/GuruSDKService.Model.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ed356411d778456f92641f70d047df48 +timeCreated: 1711961510 \ No newline at end of file diff --git a/Runtime/GuruSDKService.asmdef b/Runtime/GuruSDKService.asmdef new file mode 100644 index 0000000..b8a3e83 --- /dev/null +++ b/Runtime/GuruSDKService.asmdef @@ -0,0 +1,20 @@ +{ + "name": "GuruSDKService", + "rootNamespace": "", + "references": [ + "GUID:e241d247f550f427da05939864204192", + "GUID:85fac0454e8c64a0da25f1f632acaa75", + "GUID:94e1de2458b07d0bf1e9f13e6ae06443", + "GUID:e63a64384cc3ef04cac761c1ce76e9c2", + "GUID:d0bf1e9f644394e1de13e6ae02458b07" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Runtime/GuruSDKService.asmdef.meta b/Runtime/GuruSDKService.asmdef.meta new file mode 100644 index 0000000..1391ba5 --- /dev/null +++ b/Runtime/GuruSDKService.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 32693d56dfa3a46a3a0c9f54101785f1 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/GuruSDKService.cs b/Runtime/GuruSDKService.cs new file mode 100644 index 0000000..5c36e88 --- /dev/null +++ b/Runtime/GuruSDKService.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using Guru; + +namespace GuruSDKService +{ + public partial class GuruSDKService : Singleton + { + private bool _initService; + private IGuruSDKServiceImp _serviceImp; + + public void InitService(IGuruSDKServiceImp serviceImp, Action onFirebaseReady) + { + if(_initService) return; + _initService = true; + _serviceImp = serviceImp; + _onFirebaseReady = onFirebaseReady; + InitSDKModel(); + AddCallbackListener(); + AddIAPCallbackListener(); + + Guru.Analytics.EnableTch02Event = true; + GuruSDKInitConfig config = new GuruSDKInitConfig + { + UseCustomConsent = false, + AutoLoadWhenAdsReady = true, + AutoRecordFinishedLevels = true, + IsBuyNoAds = _serviceImp.IsNoAD, + CustomServiceKey = _serviceImp.CustomServiceKey, + BannerBackgroundColor = _serviceImp.BannerBackgroundColor, + IAPEnabled = _serviceImp.IsIAPEnabled, + DebugMode = _serviceImp.IsDebugMode, + DefaultRemoteData = _serviceImp.GetDefaultRemoteData(), + GoogleKeys = _serviceImp.GetGooglePlayTangleData(), + AppleRootCerts = _serviceImp.GetAppleTangleData() + }; + GuruSDK.Init(config, null); + } + } +} \ No newline at end of file diff --git a/Runtime/GuruSDKService.cs.meta b/Runtime/GuruSDKService.cs.meta new file mode 100644 index 0000000..b7aabd6 --- /dev/null +++ b/Runtime/GuruSDKService.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 66b76eee6ce0469087e581f05beb810f +timeCreated: 1711960633 \ No newline at end of file diff --git a/Runtime/IGuruSDKServiceImp.cs b/Runtime/IGuruSDKServiceImp.cs new file mode 100644 index 0000000..f484c3f --- /dev/null +++ b/Runtime/IGuruSDKServiceImp.cs @@ -0,0 +1,67 @@ +using System.Collections.Generic; + +namespace GuruSDKService +{ + public interface IGuruSDKServiceImp + { + #region GuruSDKInitConfig初始化参数 + + string CustomServiceKey { get; } + string BannerBackgroundColor { get; } + bool IsNoAD { get; } + bool IsIAPEnabled { get; } + bool IsDebugMode { get; } + Dictionary GetDefaultRemoteData(); + byte[] GetGooglePlayTangleData(); + byte[] GetAppleTangleData(); + + #endregion + + #region Model映射 + + int b_level { get; set; } + int b_play { get; set; } + + #endregion + + #region Callbacks回调 + + void OnAppPaused(bool paused); + void OnAppQuit(); + + void OnFirebaseReady(bool success); + void OnGuruServiceReady(); + void OnUserAuthResult(bool success); + void OnFirebaseAuthResult(bool success); + + void OnAttResult(int authorizationTrackingStatus); + void OnConsentResult(int statusCode); + + void OnAdsInitComplete(); + void OnBannerADLoaded(); + void OnInterstitialADLoaded(); + void OnInterstitialADFailed(); + void OnRewardedADLoaded(); + void OnRewardADFailed(); + + void OnRemoteFetchComplete(bool success); + + #endregion + + #region IAP回调 + + void OnIAPInitStart(); + void OnIAPInitComplete(bool success); + void OnPurchaseStart(string productName); + void OnPurchaseEnd(string productName, bool success); + void OnPurchaseFailed(string productName, string reason); + void OnIAPRestored(bool success, string msg); + + void ShowIAPBuyLoadingView(); + void CloseIAPLoadingView(); + void IAPBuySuccessTip(); + void IAPBuyFailTip(); + + #endregion + } +} \ No newline at end of file diff --git a/Runtime/IGuruSDKServiceImp.cs.meta b/Runtime/IGuruSDKServiceImp.cs.meta new file mode 100644 index 0000000..9fc9e6b --- /dev/null +++ b/Runtime/IGuruSDKServiceImp.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7ceb27a94150440981555f022a7a628b +timeCreated: 1711961309 \ No newline at end of file diff --git a/link.xml b/link.xml new file mode 100644 index 0000000..c6bf2fc --- /dev/null +++ b/link.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/link.xml.meta b/link.xml.meta new file mode 100644 index 0000000..3c70c4b --- /dev/null +++ b/link.xml.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2f1de04af38814476b397f7803cfe3a4 +timeCreated: 1703388178 \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..5aa5965 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "com.guru.sdk.service", + "displayName": "Guru SDK Service", + "version": "1.0.0", + "description": "Guru SDK Service for unity project", + "unity": "2020.3", + "author":{ + "name": "Guru Games" + }, + "license": "MIT", + "category": "Game,Tool,Development", + "dependencies": { + } +} \ No newline at end of file diff --git a/package.json.meta b/package.json.meta new file mode 100644 index 0000000..5f8ba1b --- /dev/null +++ b/package.json.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 76154b361987a46ea8809e66e06f7a38 +timeCreated: 1702610734 \ No newline at end of file