diff --git a/Runtime/GuruCore/Runtime/Ads/ADServiceBase.cs b/Runtime/GuruCore/Runtime/Ads/ADServiceBase.cs index e8fae02..5b94adc 100644 --- a/Runtime/GuruCore/Runtime/Ads/ADServiceBase.cs +++ b/Runtime/GuruCore/Runtime/Ads/ADServiceBase.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Guru; using UnityEngine; @@ -198,9 +199,10 @@ namespace Guru /// 广告ARO收益打点 /// /// - private void OnAdImpression(MaxSdkBase.AdInfo adInfo) + /// + private void OnAdImpression(MaxSdkBase.AdInfo adInfo, string platform = "") { - Analytics.ADImpression(adInfo); + Analytics.ADImpression(adInfo, platform); } @@ -250,6 +252,10 @@ namespace Guru protected float _badsloadStartTime = 0; private bool _bannerVisible = false; public bool IsBannerVisible => _bannerVisible; + private int _badsloadedNum = 0; + private int _badsLoadFailNum = 0; + + private int GetAdsLoadDuration(ref float startTime) { @@ -320,9 +326,14 @@ namespace Guru string adUnitId = GetBannerID(); MaxSdk.ShowBanner(adUnitId); MaxSdk.SetBannerBackgroundColor(adUnitId, _backColor); - OnBannerImpEvent(adUnitId); SetBannerAutoRefresh(true, adUnitId); - _bannerVisible = true; + if (!_bannerVisible) + { + _bannerVisible = true; + OnBannerImpEvent(adUnitId); + _badsloadedNum = 0; + _badsLoadFailNum = 0; + } } /// @@ -330,9 +341,14 @@ namespace Guru /// public virtual void HideBanner() { - MaxSdk.HideBanner(GetBannerID()); - SetBannerAutoRefresh(true, GetBannerID()); - _bannerVisible = false; + string adUnitId = GetBannerID(); + MaxSdk.HideBanner(adUnitId); + SetBannerAutoRefresh(false, adUnitId); + if (_bannerVisible) + { + _bannerVisible = false; + OnBannerHideEvent(); + } } /// @@ -346,14 +362,16 @@ namespace Guru private void OnBannerLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { - // Analytics.ADBadsLoaded(adUnitId, GetAdsLoadDuration(ref _badsloadStartTime), _badsCategory); - Analytics.ADBadsLoaded(AdParams.Build(adUnitId, adInfo, - duration: GetAdsLoadDuration(ref _badsloadStartTime), category: _badsCategory)); + _badsloadedNum++; + // --- fixed by Yufei 2024-5-29 为 don't report bads_loaded any more. --- + // Analytics.ADBadsLoaded(AdParams.Build(adUnitId, adInfo, + // duration: GetAdsLoadDuration(ref _badsloadStartTime), category: _badsCategory)); OnBadsLoaded(); } private void OnBannerFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo) { + _badsLoadFailNum ++; // Analytics.ADBadsFailed(adUnitId, (int)errorInfo.Code, GetAdsLoadDuration(ref _badsloadStartTime), _badsCategory); Analytics.ADBadsFailed(AdParams.Build(adUnitId, duration: GetAdsLoadDuration(ref _badsloadStartTime), category: _badsCategory, @@ -373,6 +391,12 @@ namespace Guru Analytics.ADBadsImp(AdParams.Build(adUnitId, category: _badsCategory)); } + + private void OnBannerHideEvent() + { + Analytics.ADBadsHide(_badsloadedNum, _badsLoadFailNum); + } + /// /// Banner 收益打点 /// diff --git a/Runtime/GuruCore/Runtime/Analytics/Analytics.Ads.cs b/Runtime/GuruCore/Runtime/Analytics/Analytics.Ads.cs index 30dd20f..43a235e 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Analytics.Ads.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Analytics.Ads.cs @@ -21,22 +21,37 @@ namespace Guru #region Ads - private static Dictionary BuildAdEventData(AdParams adParams) + private static Dictionary BuildAdEventData(AdParams adParams, Dictionary extra = null) { - if (string.IsNullOrEmpty(adParams.category)) adParams.category = DefaultCategory; - if (string.IsNullOrEmpty(adParams.waterfallName)) adParams.waterfallName = DefaultWaterfall; + if (string.IsNullOrEmpty(adParams.category)) + adParams.category = DefaultCategory; + if (string.IsNullOrEmpty(adParams.waterfallName)) + adParams.waterfallName = DefaultWaterfall; var data = new Dictionary() { { ParameterItemCategory, adParams.category }, { ParameterItemName, adParams.adUnitId }, - { ParameterNetworkName, adParams.networkName }, - { ParameterNetworkPlacement, adParams.networkPlacement }, - { ParameterWaterfall, adParams.waterfallName }, - { ParameterDuration, adParams.duration }, }; - if (adParams.errorCode != 0) data[ParameterErrorCode] = adParams.errorCode; + if (adParams.duration > 0) + data[ParameterDuration] = adParams.duration; + if (adParams.errorCode != 0) + data[ParameterErrorCode] = adParams.errorCode; + if (!string.IsNullOrEmpty(adParams.networkName)) + data[ParameterNetworkName] = adParams.networkName; + if (!string.IsNullOrEmpty(adParams.networkPlacement)) + data[ParameterNetworkPlacement] = adParams.networkPlacement; + if (!string.IsNullOrEmpty(adParams.waterfallName)) + data[ParameterWaterfall] = adParams.waterfallName; + + if (extra != null && extra.Count > 0) + { + foreach (var k in extra.Keys) + { + data[k] = extra[k]; + } + } return data; } @@ -66,6 +81,15 @@ namespace Guru LogEvent(EventBadsImp, BuildAdEventData(adParams)); } + public static void ADBadsHide( int loadedTimes, int failTimes) + { + var dict = new Dictionary() + { + ["loaded_times"] = loadedTimes, + ["fail_times"] = failTimes + }; + LogEvent(EventBadsHide, dict); + } //---------------------- INTERSTITIAL ------------------------- /// /// 广告拉取 @@ -205,12 +229,13 @@ namespace Guru { SetAttProperty(status); Debug.Log($"{TAG} AttResult: {status} type:{type} others:{others}"); - LogEvent(EventATTResult, new Dictionary() - { - { ParameterItemCategory, status }, - { "type", type }, - { ParameterItemName, others }, - }); + var dict = new Dictionary() + { + { ParameterItemCategory, status }, + { "type", type } + }; + if(!string.IsNullOrEmpty(others)) dict[ParameterItemName] = others; + LogEvent(EventATTResult, dict); } /// diff --git a/Runtime/GuruCore/Runtime/Analytics/Analytics.Const.cs b/Runtime/GuruCore/Runtime/Analytics/Analytics.Const.cs index a05ea44..4c545d0 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Analytics.Const.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Analytics.Const.cs @@ -34,6 +34,7 @@ namespace Guru public static readonly string EventBadsFailed = "bads_failed"; public static readonly string EventBadsClick = "bads_clk"; public static readonly string EventBadsImp = "bads_imp"; + public static readonly string EventBadsHide = "bads_hide"; //插屏广告打点事件 public static readonly string EventIadsLoad = "iads_load"; diff --git a/Runtime/GuruCore/Runtime/Analytics/Analytics.FirebaseDefine.cs b/Runtime/GuruCore/Runtime/Analytics/Analytics.FirebaseDefine.cs index b714efa..2cfffdb 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Analytics.FirebaseDefine.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Analytics.FirebaseDefine.cs @@ -1,207 +1,108 @@ namespace Guru { - using Firebase.Analytics; //https://firebase.google.com/docs/reference/cpp/group/parameter-names //Firebase内置定义事件名称和参数名称 public static partial class Analytics { - private static string EventAdImpression => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventAdImpression : "ad_impression"; - private static string EventAddPaymentInfo => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventAddPaymentInfo : "add_payment_info"; - private static string EventAddShippingInfo => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventAddShippingInfo : "add_shipping_info"; - private static string EventAddToCart => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventAddToCart : "add_to_cart"; - private static string EventAddToWishlist => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventAddToWishlist : "add_to_wishlist"; - private static string EventAppOpen => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventAppOpen : "app_open"; - private static string EventBeginCheckout => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventBeginCheckout : "begin_checkout"; - private static string EventCampaignDetails => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventCampaignDetails : "campaign_details"; - private static string EventEarnVirtualCurrency => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventEarnVirtualCurrency : "earn_virtual_currency"; - private static string EventGenerateLead => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventGenerateLead : "generate_lead"; - private static string EventJoinGroup => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventJoinGroup : "join_group"; - private static string EventLevelEnd => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventLevelEnd : "level_end"; - private static string EventLevelStart => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventLevelStart : "level_start"; - private static string EventLevelUp => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventLevelUp : "level_up"; - private static string EventLogin => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventLogin : "login"; - private static string EventPostScore => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventPostScore : "post_score"; - private static string EventPurchase => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventPurchase : "purchase"; - private static string EventRefund => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventRefund : "refund"; - private static string EventRemoveFromCart => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventRemoveFromCart : "remove_from_cart"; - private static string EventScreenView => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventScreenView : "screen_view"; - private static string EventSearch => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventSearch : "search"; - private static string EventSelectContent => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventSelectContent : "select_content"; - private static string EventSelectItem => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventSelectItem : "select_item"; - private static string EventSelectPromotion => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventSelectPromotion : "select_promotion"; - private static string EventShare => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventShare : "share"; - private static string EventSignUp => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventSignUp : "sign_up"; - private static string EventSpendVirtualCurrency => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventSpendVirtualCurrency : "spend_virtual_currency"; - private static string EventTutorialBegin => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventTutorialBegin : "tutorial_begin"; - private static string EventTutorialComplete => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventTutorialComplete : "tutorial_complete"; - private static string EventUnlockAchievement => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventUnlockAchievement : "unlock_achievement"; - private static string EventViewCart => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventViewCart : "view_cart"; - private static string EventViewItem => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventViewItem : "view_item"; - private static string EventViewItemList => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventViewItemList : "view_item_list"; - private static string EventViewPromotion => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventViewPromotion : "view_promotion"; - private static string EventViewSearchResults => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.EventViewSearchResults : "view_search_results"; - private static string ParameterAchievementId => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterAchievementId : "achievement_id"; - private static string ParameterAdFormat => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterAdFormat : "ad_format"; - private static string ParameterAdNetworkClickID => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterAdNetworkClickID : "aclid"; - private static string ParameterAdPlatform => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterAdPlatform : "ad_platform"; - private static string ParameterAdSource => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterAdSource : "ad_source"; + internal static readonly string EventAdImpression = "ad_impression"; + internal static readonly string EventAddPaymentInfo = "add_payment_info"; + internal static readonly string EventAddShippingInfo = "add_shipping_info"; + internal static readonly string EventAddToCart = "add_to_cart"; + internal static readonly string EventAddToWishlist = "add_to_wishlist"; + internal static readonly string EventAppOpen = "app_open"; + internal static readonly string EventBeginCheckout = "begin_checkout"; + internal static readonly string EventCampaignDetails = "campaign_details"; + internal static readonly string EventEarnVirtualCurrency = "earn_virtual_currency"; + internal static readonly string EventGenerateLead = "generate_lead"; + internal static readonly string EventJoinGroup = "join_group"; + internal static readonly string EventLevelEnd = "level_end"; + internal static readonly string EventLevelStart = "level_start"; + internal static readonly string EventLevelUp = "level_up"; + internal static readonly string EventLogin = "login"; + internal static readonly string EventPostScore = "post_score"; + internal static readonly string EventPurchase = "purchase"; + internal static readonly string EventRefund = "refund"; + internal static readonly string EventRemoveFromCart = "remove_from_cart"; + internal static readonly string EventScreenView = "screen_view"; + internal static readonly string EventSearch = "search"; + internal static readonly string EventSelectContent = "select_content"; + internal static readonly string EventSelectItem = "select_item"; + internal static readonly string EventSelectPromotion = "select_promotion"; + internal static readonly string EventShare = "share"; + internal static readonly string EventSignUp = "sign_up"; + internal static readonly string EventSpendVirtualCurrency = "spend_virtual_currency"; + internal static readonly string EventTutorialBegin = "tutorial_begin"; + internal static readonly string EventTutorialComplete = "tutorial_complete"; + internal static readonly string EventUnlockAchievement = "unlock_achievement"; + internal static readonly string EventViewCart = "view_cart"; + internal static readonly string EventViewItem = "view_item"; + internal static readonly string EventViewItemList = "view_item_list"; + internal static readonly string EventViewPromotion = "view_promotion"; + internal static readonly string EventViewSearchResults = "view_search_results"; + internal static readonly string ParameterAchievementId = "achievement_id"; + internal static readonly string ParameterAdFormat = "ad_format"; + internal static readonly string ParameterAdNetworkClickID = "aclid"; + internal static readonly string ParameterAdPlatform = "ad_platform"; + internal static readonly string ParameterAdSource = "ad_source"; - private static string ParameterAffiliation => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterAffiliation : "affiliation"; - private static string ParameterCP1 => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterCP1 : "cp1"; - private static string ParameterCampaign => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterCampaign : "campaign"; - private static string ParameterCharacter => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterCharacter : "character"; - private static string ParameterContent => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterContent : "content"; - private static string ParameterContentType => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterContentType : "content_type"; - private static string ParameterCoupon => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterCoupon : "coupon"; - private static string ParameterCreativeName => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterCreativeName : "creative_name"; - private static string ParameterCreativeSlot => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterCreativeSlot : "creative_slot"; - private static string ParameterCurrency => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterCurrency : "currency"; - private static string ParameterDestination => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterDestination : "destination"; - private static string ParameterDiscount => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterDiscount : "discount"; - private static string ParameterEndDate => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterEndDate : "end_date"; - private static string ParameterExtendSession => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterExtendSession : "extend_session"; - private static string ParameterFlightNumber => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterFlightNumber : "flight_number"; - private static string ParameterGroupId => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterGroupId : "group_id"; - private static string ParameterIndex => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterIndex : "index"; - private static string ParameterItemBrand => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterItemBrand : "item_brand"; - private static string ParameterItemCategory => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterItemCategory : "item_category"; - private static string ParameterItemCategory2 => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterItemCategory2 : "item_category2"; - private static string ParameterItemCategory3 => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterItemCategory3 : "item_category3"; - private static string ParameterItemCategory4 => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterItemCategory4 : "item_category4"; - private static string ParameterItemCategory5 => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterItemCategory5 : "item_category5"; - private static string ParameterItemId => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterItemId : "item_id"; - private static string ParameterItemList => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterItemListName : "item_id"; - private static string ParameterItemListID => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterItemListID : "item_list_id"; - private static string ParameterItemListName => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterItemListName : "item_list_name"; - private static string ParameterItemName => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterItemName : "item_name"; - private static string ParameterLevel => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterLevel : "level"; - private static string ParameterLevelName => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterLevelName : "level_name"; - private static string ParameterLocation => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterLocation : "location"; - private static string ParameterLocationID => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterLocationID : "location_id"; - private static string ParameterMedium => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterMedium : "medium"; - private static string ParameterMethod => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterMethod : "method"; - private static string ParameterNumberOfNights => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterNumberOfNights : "number_of_nights"; - private static string ParameterNumberOfPassengers => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterNumberOfPassengers : "number_of_passengers"; - private static string ParameterNumberOfRooms => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterNumberOfRooms : "number_of_rooms"; - private static string ParameterOrigin => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterOrigin : "origin"; - private static string ParameterPaymentType => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterPaymentType : "payment_type"; - private static string ParameterPrice => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterPrice : "price"; - private static string ParameterPromotionID => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterPromotionID : "promotion_id"; - private static string ParameterPromotionName => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterPromotionName : "promotion_name"; - private static string ParameterQuantity => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterQuantity : "quantity"; - private static string ParameterScore => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterScore : "score"; - private static string ParameterScreenClass => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterScreenClass : "screen_class"; - private static string ParameterScreenName => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterScreenName : "screen_name"; - private static string ParameterSearchTerm => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterSearchTerm : "search_term"; - private static string ParameterShipping => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterShipping : "shipping"; - private static string ParameterShippingTier => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterShippingTier : "shipping_tier"; - private static string ParameterSignUpMethod => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.UserPropertySignUpMethod : "sign_up_method"; - private static string ParameterSource => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterSource : "source"; - private static string ParameterStartDate => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterStartDate : "start_date"; - private static string ParameterSuccess => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterSuccess : "success"; - private static string ParameterTax => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterTax : "tax"; - private static string ParameterTerm => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterTerm : "term"; - private static string ParameterTransactionId => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterTransactionId : "transaction_id"; - private static string ParameterTravelClass => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterTravelClass : "travel_class"; - private static string ParameterValue => - FirebaseUtil.IsFirebaseInitialized ? FirebaseAnalytics.ParameterValue : "value"; + internal static readonly string ParameterAffiliation = "affiliation"; + internal static readonly string ParameterCP1 = "cp1"; + internal static readonly string ParameterCampaign = "campaign"; + internal static readonly string ParameterCharacter = "character"; + internal static readonly string ParameterContent = "content"; + internal static readonly string ParameterContentType = "content_type"; + internal static readonly string ParameterCoupon = "coupon"; + internal static readonly string ParameterCreativeName = "creative_name"; + internal static readonly string ParameterCreativeSlot = "creative_slot"; + internal static readonly string ParameterCurrency = "currency"; + internal static readonly string ParameterDestination = "destination"; + internal static readonly string ParameterDiscount = "discount"; + internal static readonly string ParameterEndDate = "end_date"; + internal static readonly string ParameterExtendSession = "extend_session"; + internal static readonly string ParameterFlightNumber = "flight_number"; + internal static readonly string ParameterGroupId = "group_id"; + internal static readonly string ParameterIndex = "index"; + internal static readonly string ParameterItemBrand = "item_brand"; + internal static readonly string ParameterItemCategory = "item_category"; + internal static readonly string ParameterItemCategory2 = "item_category2"; + internal static readonly string ParameterItemCategory3 = "item_category3"; + internal static readonly string ParameterItemCategory4 = "item_category4"; + internal static readonly string ParameterItemCategory5 = "item_category5"; + internal static readonly string ParameterItemId = "item_id"; + internal static readonly string ParameterItemList = "item_list"; + internal static readonly string ParameterItemListID = "item_list_id"; + internal static readonly string ParameterItemListName = "item_list_name"; + internal static readonly string ParameterItemName = "item_name"; + internal static readonly string ParameterLevel = "level"; + internal static readonly string ParameterLevelName = "level_name"; + internal static readonly string ParameterLocation = "location"; + internal static readonly string ParameterLocationID = "location_id"; + internal static readonly string ParameterMedium = "medium"; + internal static readonly string ParameterMethod = "method"; + internal static readonly string ParameterNumberOfNights = "number_of_nights"; + internal static readonly string ParameterNumberOfPassengers = "number_of_passengers"; + internal static readonly string ParameterNumberOfRooms = "number_of_rooms"; + internal static readonly string ParameterOrigin = "origin"; + internal static readonly string ParameterPaymentType = "payment_type"; + internal static readonly string ParameterPrice = "price"; + internal static readonly string ParameterPromotionID = "promotion_id"; + internal static readonly string ParameterPromotionName = "promotion_name"; + internal static readonly string ParameterQuantity = "quantity"; + internal static readonly string ParameterScore = "score"; + internal static readonly string ParameterScreenClass = "screen_class"; + internal static readonly string ParameterScreenName = "screen_name"; + internal static readonly string ParameterSearchTerm = "search_term"; + internal static readonly string ParameterShipping = "shipping"; + internal static readonly string ParameterShippingTier = "shipping_tier"; + internal static readonly string ParameterSignUpMethod = "sign_up_method"; + internal static readonly string ParameterSource = "source"; + internal static readonly string ParameterStartDate = "start_date"; + internal static readonly string ParameterSuccess = "success"; + internal static readonly string ParameterTax = "tax"; + internal static readonly string ParameterTerm = "term"; + internal static readonly string ParameterTransactionId = "transaction_id"; + internal static readonly string ParameterTravelClass = "travel_class"; + internal static readonly string ParameterValue = "value"; } } \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Analytics/Analytics.TemplateDefine.cs b/Runtime/GuruCore/Runtime/Analytics/Analytics.TemplateDefine.cs index 0c3d157..85710f0 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Analytics.TemplateDefine.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Analytics.TemplateDefine.cs @@ -66,109 +66,34 @@ namespace Guru /// 关卡数 /// 关卡名称 /// 关卡类型 - /// 关卡配置表 ID + /// 关卡配置表 ID /// 启动方式 /// 是否是重玩 /// 额外数据 public static void LogLevelStart(int level, string levelName, - string levelType = "main", string levelConfigId = "", string startType = "play", bool isReplay = false, + string levelType = "main", string itemId = "", string startType = "play", bool isReplay = false, Dictionary extra = null) { - Dictionary dataDict = new Dictionary() + Dictionary dict = new Dictionary() { { ParameterLevel, level }, { ParameterLevelName, levelName }, { ParameterItemCategory, levelType }, - { ParameterItemId, levelConfigId }, { ParameterStartType, startType }, { ParameterReplay, isReplay ? "true" : "false" }, }; + + if(!string.IsNullOrEmpty(itemId)) + dict[ParameterItemId] = itemId; if (extra != null) { - dataDict.AddRange(extra, isOverride:true); + dict.AddRange(extra, isOverride:true); } - LogEvent(EventLevelStart, dataDict); - } - - /// - /// 玩家已开始挑战某个关卡时触发。 - /// - /// 关卡类型(主关卡xx模式/每日挑战/活动1/活动2 等) - /// 棋局id /图片id - /// 关卡名称 - /// 关卡数 - [Obsolete("Obsolete method, please use instead. will be discard in next version.")] - internal static void LevelStart(string itemCategory, string itemID, string levelName, int level, bool isReplay, bool isContinue) - { - - string startType = "play"; - if (isReplay) startType = "replay"; - if (isContinue) startType = "continue"; - - LogEvent(EventLevelStart, new Dictionary() - { - { ParameterItemCategory, itemCategory}, - { ParameterItemId, itemID}, - { ParameterLevelName, levelName }, - { ParameterLevel, level }, - { ParameterReplay, isReplay ? "true" : "false"}, - { ParameterContinue, isContinue ? "true" : "false"}, - { ParameterStartType, startType }, - }); + LogEvent(EventLevelStart, dict); } - - - /// - /// 关卡结束(Firebase标准事件) - /// - /// 关卡类型(主关卡xx模式/每日挑战/活动1/活动2 等) - /// 棋局id /图片id - /// 关卡名称 - /// 关卡数 - /// "此参数是对success参数的补充说明,除成功/失败/超时/退出这四种情况外,其余情况可自行定义值" - /// 游戏时长(单位:msec)【可选】 - /// 游戏步数【可选】 - /// 游戏分数【可选】 - /// 重玩标记【可选】 - [Obsolete("Obsolete method, please use instead. will be discard in next version.")] - internal static void LevelEnd(string itemCategory, string itemID, string levelName, int level, - ELevelResult result, int? duration = null, int? step = null, int? score = null, bool isReplay = false, - Dictionary extra = null) - { - var dict = new Dictionary() - { - { ParameterItemCategory, itemCategory }, - { ParameterItemId, itemID }, - { ParameterLevelName, levelName }, - { ParameterLevel, level }, - { ParameterSuccess, result == ELevelResult.success ? "true" : "false" }, - { ParameterResult, result.ToString() }, - { ParameterReplay, isReplay ? "true" : "false"}, - }; - - if (duration != null) - dict[ParameterDuration] = duration.Value; - if(step != null) - dict[ParameterStep] = step.Value; - if(score != null) - dict[ParameterScore] = score.Value; - if(extra != null) - dict.AddRange(extra, isOverride:true); - - LogEvent(EventLevelEnd, dict); - - if (result == ELevelResult.success) - { - int lv = BPlay; - if (lv == 0) lv = level; - LevelEndSuccess(lv, itemCategory, itemID); - } - } - - /// /// 关卡结束(Firebase标准事件) /// @@ -176,30 +101,29 @@ namespace Guru /// /// /// - /// + /// /// /// /// /// public static void LogLevelEnd(int level, string result, - string levelName = "", string levelType = "main", string puzzleId = "", - int? duration = null, int? step = null, int? score = null, Dictionary extra = null) + string levelName = "", string levelType = "main", string itemId = "", + int duration = 0, int? step = null, int? score = null, Dictionary extra = null) { bool isSuccess = result.Equals("success"); - + var dict = new Dictionary() { - { ParameterItemCategory, levelType }, - { ParameterLevelName, levelName }, - { ParameterLevel, level }, - { ParameterSuccess, isSuccess ? "true" : "false" }, - { ParameterResult, result }, + [ParameterLevel] = level, + [ParameterLevelName] = levelName, + [ParameterItemCategory] = levelType, + [ParameterSuccess] = isSuccess ? "true" : "false", + [ParameterResult] = result, + [ParameterDuration] = duration }; - if(!string.IsNullOrEmpty(puzzleId)) - dict[ParameterItemId] = puzzleId; - if (duration != null) - dict[ParameterDuration] = duration.Value; + if(!string.IsNullOrEmpty(itemId)) + dict[ParameterItemId] = itemId; if(step != null) dict[ParameterStep] = step.Value; if(score != null) @@ -213,7 +137,7 @@ namespace Guru { int lv = BPlay; if (lv == 0) lv = level; - LevelEndSuccess(lv, levelType, puzzleId); + LevelEndSuccess(lv, levelType, itemId); } } @@ -222,20 +146,30 @@ namespace Guru /// /// 新用户通过第几关(仅记录前n关,根据项目自行确定,不区分关卡类型)[买量用] /// + /// 总计完成的管卡数 (b_play) /// - /// 关卡(从1开始) - /// /// 棋局id /图片id - public static void LevelEndSuccess( int level, string levelType, string puzzleId) + /// 棋局id /图片id + public static void LevelEndSuccess( int level, string levelType = "", string itemId = "") { if (level > GuruSettings.Instance.AnalyticsSetting.LevelEndSuccessNum) return; string eventName = $"level_end_success_{level}"; - LogEvent(eventName,new Dictionary() + var dict = new Dictionary() { { ParameterLevel, level }, - { ParameterItemId, puzzleId }, - { ParameterItemCategory, levelType} + }; + + if(!string.IsNullOrEmpty(levelType)) + dict[ParameterItemCategory] = levelType; + if(!string.IsNullOrEmpty(itemId)) + dict[ParameterItemId] = itemId; + + LogEvent(eventName, dict, new EventSetting() + { + EnableFirebaseAnalytics = true, + EnableFacebookAnalytics = true, + EnableAdjustAnalytics = true }); } @@ -479,6 +413,7 @@ namespace Guru /// Google ARO买量点 /// /// 广告收入数据 + /// 广告平台 /// ///
  • /// value double eg:0.002 @@ -489,14 +424,15 @@ namespace Guru /// ad_unit_name string 广告位名称 /// ad_creative_id string 广告素材id ///
  • - public static void ADImpression(MaxSdkBase.AdInfo impressionData) + public static void ADImpression(MaxSdkBase.AdInfo impressionData, string platform = "") { + if (string.IsNullOrEmpty(platform)) platform = AdMAX; double revenue = impressionData.Revenue; LogEvent(EventAdImpression, new Dictionary() { [ParameterValue] = revenue, [ParameterCurrency] = USD, - [ParameterAdPlatform] = AdMAX, + [ParameterAdPlatform] = platform, [ParameterAdSource] = impressionData.NetworkName, [ParameterAdFormat] = impressionData.AdFormat, [ParameterAdUnitName] = impressionData.AdUnitIdentifier, @@ -569,10 +505,11 @@ namespace Guru /// 用户的付费币种 /// 订单 ID /// 付费类型订阅/产品(subscription/product) - /// 是否为试用(1:试用,0:付费) - public static void IAPRetTrue(string scene, string productId, double value, string currency, string orderId, string type, bool isfree) + /// 是否为试用(1:试用,0:付费) + /// 若存在 Offer 的话需要上报 OfferID + internal static void IAPRetTrue(string scene, string productId, double value, string currency, string orderId, string type, bool isFree = false, string offerId = "") { - LogEvent(EventIAPReturnTrue, new Dictionary() + var dict = new Dictionary() { { ParameterItemCategory, scene }, { ParameterItemName, productId }, @@ -580,22 +517,34 @@ namespace Guru { ParameterValue, value }, { ParameterCurrency, currency }, { "order_id", orderId }, - { "type", type }, - { "isfree", isfree ? 1 : 0 }, + { "type", type }, + { "isfree", isFree ? 1 : 0 }, + }; + + if(!string.IsNullOrEmpty(offerId)) + dict["basePlan"] = offerId; + + LogEvent(EventIAPReturnTrue, dict, new EventSetting() + { + EnableFirebaseAnalytics = true, + EnableAdjustAnalytics = true, }); + } - + /// /// "app 内弹出的付费引导IAP付费或试用失败打点" /// /// 界面跳转的来源 - /// product id,多个产品用逗号分隔,第一个商品id放主推商品id - public static void IAPRetFalse(string itemCategory, string productID, string failReason) + /// product id,多个产品用逗号分隔,第一个商品id放主推商品id + /// + internal static void IAPRetFalse(string itemCategory, string productId, string failReason) { LogEvent(EventIAPReturnFalse, new Dictionary() { { ParameterItemCategory, itemCategory }, - { ParameterItemName, productID }, + { ParameterItemName, productId }, + { ParameterProductId, productId }, { ParameterResult, failReason } }); } @@ -660,28 +609,27 @@ namespace Guru string orderDate = orderData.payedDate; string scene = orderData.scene; bool isFree = orderData.isFree; + string offerId = orderData.offerId; // TCH 001 Tch001IAPRev(usdPrice, productId, orderId, orderType, orderDate); // TCH 020 Tch02IAPRev(usdPrice, productId, orderId, orderType, orderDate); - // Adjust Track IAP Purchase - AdjustService.TrackIAPPurchase(usdPrice, productId); // 上报 IAP 支付事件 // Facebook Track IAP Purchase FBPurchase(usdPrice, USD, "iap", IAPPlatform); if (orderData.orderType == 1) { - // sub_pruchase + // sub_pruchase : Firebase + Guru + Adjust SubPurchase(usdPrice, productId, orderId, orderDate); } else { - // iap_purchase + // iap_purchase : Firebase + Guru + Adjust IAPPurchase(usdPrice, productId, orderId, orderDate); } - // IAP Ret true - IAPRetTrue(scene, productId, payPrice, userCurrency, orderId, orderType2, isFree); + // IAP Ret true : Firebase + Guru + Adjust + IAPRetTrue(scene, productId, payPrice, userCurrency, orderId, orderType2, isFree, offerId); } @@ -714,7 +662,7 @@ namespace Guru [ParameterPlatform] = IAPPlatform, [ParameterValue] = value, [ParameterCurrency] = USD, - ["product_id"] = productId, + [ParameterProductId] = productId, ["order_id"] = orderId, ["order_type"] = orderType, ["trans_ts"] = orderDate diff --git a/Runtime/GuruCore/Runtime/Analytics/Analytics.cs b/Runtime/GuruCore/Runtime/Analytics/Analytics.cs index 1840f37..36df1d0 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Analytics.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Analytics.cs @@ -209,6 +209,9 @@ namespace Guru parameters.Add(new Parameter(kv.Key, doubleValue)); else if (kv.Value is decimal decimalValue) parameters.Add(new Parameter(kv.Key, decimal.ToDouble(decimalValue))); + else + parameters.Add(new Parameter(kv.Key, kv.Value.ToString())); + } FirebaseAnalytics.LogEvent(eventName, parameters.ToArray()); diff --git a/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/AppleOrderRequest.cs b/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/AppleOrderRequest.cs index 58e09df..73c5b59 100644 --- a/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/AppleOrderRequest.cs +++ b/Runtime/GuruCore/Runtime/IPM/Scripts/Requests/AppleOrderRequest.cs @@ -58,13 +58,13 @@ namespace Guru public static AppleOrderRequest Build(int orderType, string productId, string receipt, string orderId, string date, int level, - string userCurrency, double payPrice, string scene, bool isFree = false) + string userCurrency, double payPrice, string scene, bool isFree = false, string offerId = "", string basePlanId = "") { var request = new AppleOrderRequest() { receipt = receipt, orderData = new AppleOrderData(orderType, productId, receipt, orderId, date, level, - userCurrency, payPrice, scene, isFree), + userCurrency, payPrice, scene, isFree, offerId, basePlanId), }; return request; } diff --git a/Runtime/GuruIAP/Runtime/Code/IAPServiceBase.cs b/Runtime/GuruIAP/Runtime/Code/IAPServiceBase.cs index c69f4c3..37106dd 100644 --- a/Runtime/GuruIAP/Runtime/Code/IAPServiceBase.cs +++ b/Runtime/GuruIAP/Runtime/Code/IAPServiceBase.cs @@ -287,9 +287,6 @@ namespace Guru //添加安装游戏后第一次初试化进行恢复购买的回调 只有安卓才有 _googlePlayStoreExtensions.RestoreTransactions(OnRestoreHandle); #endif - - - foreach (var product in _storeController.products.all) { @@ -1012,7 +1009,7 @@ namespace Guru var request = GoogleOrderRequest.Build(data); ReportNextOrder(request); } - + /// /// 上报 Apple Order Request /// @@ -1022,6 +1019,10 @@ namespace Guru /// /// /// + /// + /// + /// + /// /// /// private void ReportAppleOrder(int orderType, string productId, string receipt, @@ -1030,7 +1031,7 @@ namespace Guru { var payedDate = TimeUtil.GetTimeStampString(date); var request = AppleOrderRequest.Build(orderType, productId, receipt, orderId, payedDate, level, - userCurrency, payPrice, scene, isFree); + userCurrency, payPrice, scene, isFree, offerId, basePlanId); ReportNextOrder(request); }