update: 更新打点参数和打点库逻辑

--story=1020273 --user=yufei.hu 【中台】【BI】 中台打点标准化, 更新原有的打点和用户属性上报逻辑 https://www.tapd.cn/33527076/s/1147487

Signed-off-by: huyufei <yufei.hu@castbox.fm>
hotfix/v1.0.12.2
胡宇飞 2024-05-29 21:00:29 +08:00
parent 7babe561b0
commit beb027bf76
8 changed files with 252 additions and 349 deletions

View File

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using Guru;
using UnityEngine;
@ -198,9 +199,10 @@ namespace Guru
/// 广告ARO收益打点
/// </summary>
/// <param name="adInfo"></param>
private void OnAdImpression(MaxSdkBase.AdInfo adInfo)
/// <param name="platform"></param>
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;
}
}
/// <summary>
@ -330,9 +341,14 @@ namespace Guru
/// </summary>
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();
}
}
/// <summary>
@ -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);
}
/// <summary>
/// Banner 收益打点
/// </summary>

View File

@ -21,22 +21,37 @@ namespace Guru
#region Ads
private static Dictionary<string, object> BuildAdEventData(AdParams adParams)
private static Dictionary<string, object> BuildAdEventData(AdParams adParams, Dictionary<string, object> 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<string, object>()
{
{ 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<string, object>()
{
["loaded_times"] = loadedTimes,
["fail_times"] = failTimes
};
LogEvent(EventBadsHide, dict);
}
//---------------------- INTERSTITIAL -------------------------
/// <summary>
/// 广告拉取
@ -205,12 +229,13 @@ namespace Guru
{
SetAttProperty(status);
Debug.Log($"{TAG} AttResult: {status} type:{type} others:{others}");
LogEvent(EventATTResult, new Dictionary<string, dynamic>()
{
{ ParameterItemCategory, status },
{ "type", type },
{ ParameterItemName, others },
});
var dict = new Dictionary<string, dynamic>()
{
{ ParameterItemCategory, status },
{ "type", type }
};
if(!string.IsNullOrEmpty(others)) dict[ParameterItemName] = others;
LogEvent(EventATTResult, dict);
}
/// <summary>

View File

@ -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";

View File

@ -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";
}
}

View File

@ -66,109 +66,34 @@ namespace Guru
/// <param name="level">关卡数</param>
/// <param name="levelName">关卡名称</param>
/// <param name="levelType">关卡类型</param>
/// <param name="levelConfigId">关卡配置表 ID</param>
/// <param name="itemId">关卡配置表 ID</param>
/// <param name="startType">启动方式</param>
/// <param name="isReplay">是否是重玩</param>
/// <param name="extra">额外数据</param>
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<string, object> extra = null)
{
Dictionary<string, object> dataDict = new Dictionary<string, object>()
Dictionary<string, object> dict = new Dictionary<string, object>()
{
{ 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);
}
/// <summary>
/// 玩家已开始挑战某个关卡时触发。
/// </summary>
/// <param name="itemCategory">关卡类型(主关卡xx模式/每日挑战/活动1/活动2 等)</param>
/// <param name="itemID">棋局id /图片id</param>
/// <param name="levelName">关卡名称</param>
/// <param name="level">关卡数</param>
[Obsolete("Obsolete method, please use <LogLevelStart> 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<string, object>()
{
{ ParameterItemCategory, itemCategory},
{ ParameterItemId, itemID},
{ ParameterLevelName, levelName },
{ ParameterLevel, level },
{ ParameterReplay, isReplay ? "true" : "false"},
{ ParameterContinue, isContinue ? "true" : "false"},
{ ParameterStartType, startType },
});
LogEvent(EventLevelStart, dict);
}
/// <summary>
/// 关卡结束(Firebase标准事件)
/// </summary>
/// <param name="itemCategory">关卡类型(主关卡xx模式/每日挑战/活动1/活动2 等)</param>
/// <param name="itemID">棋局id /图片id</param>
/// <param name="levelName">关卡名称</param>
/// <param name="level">关卡数</param>
/// <param name="result">"此参数是对success参数的补充说明,除成功/失败/超时/退出这四种情况外,其余情况可自行定义值"</param>
/// <param name="duration">游戏时长单位msec【可选】</param>
/// <param name="step">游戏步数【可选】</param>
/// <param name="score">游戏分数【可选】</param>
/// <param name="isReplay">重玩标记【可选】</param>
[Obsolete("Obsolete method, please use <LogLevelEnd> 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<string, object> extra = null)
{
var dict = new Dictionary<string, object>()
{
{ 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);
}
}
/// <summary>
/// 关卡结束(Firebase标准事件)
/// </summary>
@ -176,30 +101,29 @@ namespace Guru
/// <param name="result"></param>
/// <param name="levelName"></param>
/// <param name="levelType"></param>
/// <param name="puzzleId"></param>
/// <param name="itemId"></param>
/// <param name="duration"></param>
/// <param name="step"></param>
/// <param name="score"></param>
/// <param name="extra"></param>
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<string, object> extra = null)
string levelName = "", string levelType = "main", string itemId = "",
int duration = 0, int? step = null, int? score = null, Dictionary<string, object> extra = null)
{
bool isSuccess = result.Equals("success");
var dict = new Dictionary<string, object>()
{
{ 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
/// <summary>
/// 新用户通过第几关仅记录前n关,根据项目自行确定,不区分关卡类型)[买量用]
/// </summary>
/// <param name="level">总计完成的管卡数 (b_play)</param>
/// <param name="levelType"></param>
/// <param name="level">关卡从1开始</param>
/// /// <param name="puzzleId">棋局id /图片id</param>
public static void LevelEndSuccess( int level, string levelType, string puzzleId)
/// <param name="itemId">棋局id /图片id</param>
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<string, object>()
var dict = new Dictionary<string, object>()
{
{ 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买量点
/// </summary>
/// <param name="impressionData">广告收入数据</param>
/// <param name="platform">广告平台</param>
/// <a href="https://docs.google.com/spreadsheets/d/1lFWLeOGJgq34QDBTfl6OpNh7MoI37ehGrhdbxlOrJgs/edit#gid=983654222"></a>
/// <li>
/// value double eg0.002
@ -489,14 +424,15 @@ namespace Guru
/// ad_unit_name string 广告位名称
/// ad_creative_id string 广告素材id
/// </li>
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<string, dynamic>()
{
[ParameterValue] = revenue,
[ParameterCurrency] = USD,
[ParameterAdPlatform] = AdMAX,
[ParameterAdPlatform] = platform,
[ParameterAdSource] = impressionData.NetworkName,
[ParameterAdFormat] = impressionData.AdFormat,
[ParameterAdUnitName] = impressionData.AdUnitIdentifier,
@ -569,10 +505,11 @@ namespace Guru
/// <param name="currency">用户的付费币种</param>
/// <param name="orderId">订单 ID</param>
/// <param name="type">付费类型订阅/产品subscription/product</param>
/// <param name="isfree">是否为试用1试用0付费</param>
public static void IAPRetTrue(string scene, string productId, double value, string currency, string orderId, string type, bool isfree)
/// <param name="isFree">是否为试用1试用0付费</param>
/// <param name="offerId">若存在 Offer 的话需要上报 OfferID</param>
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<string, object>()
var dict = new Dictionary<string, object>()
{
{ 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,
});
}
/// <summary>
/// "app 内弹出的付费引导IAP付费或试用失败打点"
/// </summary>
/// <param name="itemCategory">界面跳转的来源</param>
/// <param name="productID">product id,多个产品用逗号分隔第一个商品id放主推商品id</param>
public static void IAPRetFalse(string itemCategory, string productID, string failReason)
/// <param name="productId">product id,多个产品用逗号分隔第一个商品id放主推商品id</param>
/// <param name="failReason"></param>
internal static void IAPRetFalse(string itemCategory, string productId, string failReason)
{
LogEvent(EventIAPReturnFalse, new Dictionary<string, object>()
{
{ 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

View File

@ -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());

View File

@ -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;
}

View File

@ -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);
}
/// <summary>
/// 上报 Apple Order Request
/// </summary>
@ -1022,6 +1019,10 @@ namespace Guru
/// <param name="orderId"></param>
/// <param name="date"></param>
/// <param name="level"></param>
/// <param name="userCurrency"></param>
/// <param name="payPrice"></param>
/// <param name="scene"></param>
/// <param name="isFree"></param>
/// <param name="offerId"></param>
/// <param name="basePlanId"></param>
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);
}