local BIReport = { isNewPlayer = false } -- 客户端的所有的上报事件都要加"client_"前缀 local EVENT_NAME_TUTORIAL = "client_tutorial" local EVENT_NAME_LUA_CRASH = "client_lua_crash" local EVENT_NAME_OPEN_UI = "client_open_ui" -- 所有需要上报的按钮点击事件 BIReport.CLICK_BTN_TYPE = { HOME = "Home", HERO = "Hero", } BIReport.ADS_OPT_TYPE = { CLICK = "Click", SUCCESS = "Success", REWARD_GET = "RewardGet", } BIReport.PAY_OPT_TYPE = { CLICK = "Click", BUY = "Buy", REWARD = "Reward", APPLE_REVIEW_REWARD = "AppleReviewReward", WHITELIST_REWARD = "WhitelistReward", CANCEL = "Cancel", FAILED = "Failed", INIT_SUC = "InitSuc", INIT_FAILED = "InitFailed", } BIReport.ACCOUNT_OPT_TYPE = { LOGIN_SUCCESS = "LoginSuccess", LOGIN_FAILED = "LoginFailed", CLICK_BIND = "ClickBind", BIND_SUCCESS = "BindSuccess", BIND_FAILED = "BindFailed", DELETE = "Delete", CLICK_CHANGE_ACCOUNT = "ClickChangeAccount", CHANGE_ACCOUNT_SUCCESS = "ChangeAccountSuccess", CHANGE_ACCOUNT_FAILED = "ChangeAccountFailed", } BIReport.CHAPTER_OPT_TYPE = { PASS = "Pass", BOX_OPEN = "BoxOpen", } BIReport.TASK_TYPE = { DAILY = "Daily", } BIReport.TASK_OPT_TYPE = { FINISH = "Finish", REWARD = "Reward", } BIReport.ITEM_GET_TYPE = { NONE = "None", NEW_PLAYER_INITIAL = "NewPlayerInitial", -- 新玩家创号自带 UPGRADE_HERO = "UpgradeHero", CHAPTER_FIGHT_START = "ChapterFightStart", CHAPTER_FIGHT_END = "ChapterFightEnd", CHAPTER_BOX = "ChapterBox", CROSS_DAY = "CrossDay", RECOVERY_TIME = "RecoveryTime", ADS_BUY_VIT = "AdsBuyVit", GEM_BUY_VIT = "GemBuyVit", ADS_BUY_ARENA_TICKET = "AdsBuyArenaTicket", GEM_BUY_ARENA_TICKET = "GemBuyArenaTicket", TASK_DAILY_REFRESH = "TaskDailyRefresh", TASK_DAILY_REWARD = "TaskDailyReward", BOUNTY_UNLOCK_LEVEL = "BountyUnlockLevel", BOUNTY_REWARD = "BountyReward", BOUNTY = "Bounty", ARENA_BOUNTY_UNLOCK_LEVEL = "ArenaBountyUnlockLevel", ARENA_BOUNTY_REWARD = "ArenaBountyReward", ARENA_BOUNTY = "ArenaBounty", IDLE_DROP = "IdleDrop", IDLE_QUICK_DROP = "IdleQuickDrop", MAIL = "Mail", MALL = "Mall", MALL_IDLE = "MallIdle", -- 常驻金币挂机礼包 MALL_TREASURE = "MallTreasure", -- 常驻钻石礼包 MALL_DAILY = "MallDaily", -- 每日特惠 MALL_DAILY_RESET = "MallDailyReset", FIRST_RECHARGE = "FirstRecharge", COIN_GIFT = "CoinGift", BEGINNER_GIFT = "BeginnerGift", LEVEL_UP_GIFT = "LevelUpGift", ACT_CHAPTER_STORE = "ActChapterStore", -- 章节礼包 SUMMON = "Summon", PLAYER_LV_UP = "PlayerLvUp", GOLD_PIG = "GoldPig", BATTLE_SKILL_REFRESH = "BattleSkillRefresh", GROWTH_FUND = "GrowthFund", GROW_UP_GIFT_NEW = "GrowUpGiftNew", -- 新成长礼包 SEVEN_DAY_TASK = "SevenDayTask", SEVEN_DAY_STEP_REWARD = "SevenDayStepReward", DAILY_CHALLENGE = "DailyChallenge", -- 每日挑战进入战斗扣体力 DAILY_CHALLENGE_END = "DailyChallengeEnd", -- 每日挑战结算 DAILY_CHALLENGE_RESET = "DailyChallengeReset", -- 每日挑战重置 DAILY_CHALLENGE_TASK_REWARD = "DailyChallengeTaskReward", -- 每日挑战任务奖励 CDKEY = "Cdkey", DUNGEON_GOLD_CHALLENGE = "DungeonGoldChallenge", -- 金币副本挑战 DUNGEON_GOLD_END = "DungeonGoldEnd", -- 金币副本结算 DUNGEON_GOLD_SWEEP = "DungeonGoldSweep", -- 金币副本扫荡 DUNGEON_SHARDS_CHALLENGE = "DungeonShardsChallenge", -- 碎片副本挑战 DUNGEON_SHARDS_END = "DungeonShardsEnd", -- 碎片副本结算 DUNGEON_SHARDS_SWEEP = "DungeonShardsSweep", -- 碎片副本扫荡 ARENA_REMATCH_CD = "ArenaRematchCd", ARENA_REWARD = "ArenaReward", ARENA_AD_BOX_REWARD = "ArenaAdBoxReward", ARENA_SETTLEMENT = "ArenaSettlement", CHANGE_NAME = "ChangeName", -- 重命名 CHANGE_AVATAR = "ChangeAvatar", -- 修改头像 CHANGE_FRAME = "ChangeFrame", -- 修改头像框 INTRODUCTORY_GIFT = "IntroductoryGift", -- 入门礼包 ARENA_CHALLENGE = "ArenaChallenge", ARENA_SETTLEMENT = "ArenaSettlement", ARENA_GIFT = "ArenaGift", COLLECTION_HERO_REWARD = "CollectionHeroReward", } BIReport.ADS_CLICK_TYPE = { BATTLE_SKILL_REFRESH = "BattleSkillRefresh", AD_ENERGY = "AdEnergy", TASK_DAILY_REFRESH = "TaskDailyRefresh", TASK_DAILY_TASK = "TaskDailyTask", IDLE_QUICK_DROP = "IdleQuickDrop", ARENA_TICKET = "ArenaTicket", ARENA_REMATCH = "ArenaRematch", ARENA_AD_BOX = "ArenaAdBox", MALL_DAILY = "MallDaily", MALL_DAILY_RESET = "MallDailyReset", MALL_GOLD = "MallGold", MALL_TREASURE = "MallTreasure", MAIL = "Mail", } BIReport.FIGHT_OPT_TYPE = { START = "Start", END = "End", SELECT_SKILL_OPEN = "SelectSkillOpen", SELECT_SKILL = "SelectSkill", } BIReport.FIGHT_DEATH_TYPE = { SURVIVE = "Survive", ELITE_FAIL = "EliteFail", BOSS_FAIL = "BossFail", NORMAL_FAIL = "NormalFail", } BIReport.FIGHT_WAVE_END_TYPE = { WIN = "Win", FAIL = "Fail", QUIT = "Quit", } BIReport.BATTLE_TYPE = { ["1"] = "Stage", ["2"] = "DailyChallenge", ["3"] = "DungeonGold", ["4"] = "DungeonShards", ["5"] = "Arena", } BIReport.GIFT_TYPE = { FIRST_RECHARGE = "FirstRecharge", COIN_GIFT = "CoinGift", BEGINNER_GIFT = "BeginnerGift", LEVEL_UP_GIFT = "LevelUpGift", BOUNTY = "Bounty", GOLD_PIG = "GoldPig", MALL_TREASURE = "MallTreasure", ACT_CHAPTER_STORE = "ActChapterStore", GROWTH_FUND = "GrowthFund", GROW_UP_GIFT_NEW = "GrowUpGiftNew", ARENA_BOUNTY = "ArenaBounty", INTRODUCTORY_GIFT = "IntroductoryGift", ARENA_GIFT = "ArenaGift", } BIReport.COIN_TYPE = { [1] = "Gold", [2] = "Gem", } BIReport.MAIL_OPT_TYPE = { OPEN = "Open", CLAIM = "Claim", CLICK = "Click", } BIReport.BOUNTY_OPT_TYPE = { BOUNTY_LEVEL_UP = "BountyLevelUp", BOUNTY_REWARD = "BountyReward", ARENA_BOUNTY_LEVEL_UP = "ArenaBountyLevelUp", ARENA_BOUNTY_REWARD = "ArenaBountyReward", } BIReport.HERO_OPT_TYPE = { UNLOCK = "Unlock", ACTIVE = "Active", LEVEL_UP = "LevelUp", FORMATION = "Formation", } BIReport.NETWORK_OPT_TYPE = { DISCONNECT = "disconnect", RECONNECT = "reconnect", ERROR_CODE = "errorCode", PD_DECODE_FAILED = "pdDecodeFailed", AUTH_FAILED = "authFailed", } BIReport.DIALY_CHALLENGE_OPT_TYPE = { TASK_STATE = "TaskState", } BIReport.MISCELLANEOUS_OPT_TYPE = { EVALUATE_OPEN = "EvaluateOpen", EVALUATE_CLOSE = "EvaluateClose", } BIReport.ARENA_OPT_TYPE = { CONSUME = "Consume", SETTLEMENT = "Settlement", } -- b6 local EVENT_NAME_EXIT = "client_exit" local EVENT_NAME_FIGHT = "client_fight" local EVENT_NAME_CLICK_BTN = "client_click_btn" local EVENT_NAME_ITEM_GET = "client_item_get" local EVENT_NAME_ITEM_USE = "client_item_use" local EVENT_NAME_COIN_GET = "client_coin_get" local EVENT_NAME_COIN_USE = "client_coin_use" local EVENT_NAME_AD_OPT = "client_ads_opt" local EVENT_NAME_PAY_OPT = "client_pay_opt" local EVENT_NAME_LOGIN_FINISH = "client_login_finish" local EVENT_NAME_LOGIN = "client_login" local EVENT_NAME_PING_SERVER = "client_ping_server" local EVENT_NAME_ACCOUNT_OPT = "client_account_opt" local EVENT_NAME_CHAPTER_OPT = "client_chapter_opt" -- 章节 local EVENT_NAME_VIT_USE = "client_vit_use" local EVENT_NAME_VIT_GET = "client_vit_get" local EVENT_NAME_DAILY_TASK = "client_daily_task" local EVENT_NAME_MAIL_OPT = "client_mail_opt" local EVENT_NAME_HERO_OPT = "client_hero_opt" local EVENT_NAME_PLAYER_LV_UP = "client_player_lv_up" -- 玩家升级 local EVENT_NAME_PAY_UI_SHOW = "client_pay_ui_show" -- 内购相关界面展示 local EVENT_NAME_BOUNTY_OPT = "client_bounty_opt" -- 通用战令事件(包括常规,竞技场等) local EVENT_NAME_NETWORK_OPT = "client_network_opt" -- 网络操作 local EVENT_NAME_APPLOVIN_AD_REVENUE = "client_applovin_ad_revenue" -- applovin广告收入 local EVENT_NAME_DAILY_CHALLENGE_OPT = "client_daily_challenge_opt" local EVENT_NAME_ARENA_OPT = "client_arena_opt"-- 竞技场 local EVENT_NAME_MISCELLANEOUS_OPT = "event_name_miscellaneous_opt" -- 一些杂项 function BIReport:setIsNewPlayer(isNewPlayer) self.isNewPlayer = isNewPlayer end -- adjust function BIReport:postAdjustSimpleTrackEvent(eventName) if not Platform:getIsPublishChannel() or EDITOR_MODE then return end if not eventName then return end CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostAdjustSimpleTrackEvent(eventName) end function BIReport:postAdjustAdRevenueAppLovinMAX(revenue, networkName, adUnitIdentifier, placement) if not Platform:getIsPublishChannel() or EDITOR_MODE then return end CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostAdjustAdRevenueAppLovinMAX(revenue, networkName, adUnitIdentifier, placement) end function BIReport:updateAccountId(id) if id == nil then return end self:clearAccountId() CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:SetThinkingAnalyticsAccountId(tostring(id)) end function BIReport:clearAccountId() CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:ClearThinkingAnalyticsAccountId() end function BIReport:report(name, args) self:printArgsStr(name, args) -- 内网dev包和编辑器模式不上报 if Platform and Platform:getIsDevChannel() or EDITOR_MODE then return end -- 审核模式不上报 if CS.BF.BFMain.IsShenhe then return end if args and type(args) == "table" then if DataManager and DataManager:getIsInitWithServer() then if DataManager.ChapterData then if args.max_level == nil then args.max_level = DataManager.ChapterData:getMaxChapterId() end if args.level_id == nil then args.level_id = DataManager.ChapterData:getChapterId() end if args.max_chapter == nil then args.max_chapter = DataManager.ChapterData:getNextChapter(DataManager.ChapterData:getMaxChapterId()) end end if DataManager.BagData and DataManager.BagData.ItemData then args.gold = DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_GOLD) args.gem = DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_GEM) args.energy = DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_VIT) end if DataManager.PlayerData then args.player_level = DataManager.PlayerData:getLv() end local str, lv, atk, hp = DataManager.FormationData:getStageFormationBIStr() args.formation_atk = atk args.formation_hp = hp end args.current_version = CS.BF.BFMain.Instance.GameLaunchMgr:GetCurrentVersion() args.is_new_player = self.isNewPlayer args.device_unique_identifier = CS.UnityEngine.SystemInfo.deviceUniqueIdentifier CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostThinkingAnalyticsEvent(name, json.encode(args)) else CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostThinkingAnalyticsEvent(name) end end -- 上报引导每一步 function BIReport:postTutorialStep(id) local level = DataManager.PlayerData:getLv() local args = { client_tutorial_id = id, level = level } self:report(EVENT_NAME_TUTORIAL, args) end -- Lua crash function BIReport:postLuaCrash(logString, stackTrace) local msg = logString .. stackTrace if #msg > 2000 then msg = string.sub(msg, 1, 2000) end local args = { client_lua_crash_msg = msg, } self:report(EVENT_NAME_LUA_CRASH, args) end -- 上报界面打开 function BIReport:postOpenUI(uiName, childUI) if uiName == nil or uiName == "" then return end local args = { client_ui_name = uiName, client_ui_child_name = childUI, } self:report(EVENT_NAME_OPEN_UI, args) end -- 上报内购事件,单独处理,只上报到AF和FB,不上报数数 function BIReport:postPurchase(price, content, originOrderId, orderId) -- 只有外网正式渠道真机包才上报 if not Platform:getIsPublishChannel() or EDITOR_MODE then return end -- 审核模式不上报 if GFunc.isShenhe() then return end -- 白名单模式也不上报 if GFunc.isInWhitelist() then return end -- 上报AF,AF的所有事件值都是String类型 local args = { af_revenue = tostring(price), af_currency = "USD", af_quantity = "1", af_content_id = content, af_order_id = originOrderId, af_receipt_id = orderId } CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostAppsflyerEvent("af_purchase", json.encode(args)) -- 上报FB的付费事件 local fbArgs = { order_id = originOrderId, product_id = content } CS.BF.BFMain.Instance.SDKMgr.BFLoginSDKMgr.FBSdk:LogPurchase(price, "USD", json.encode(fbArgs)) -- 上报付费到adjust if Platform:isIosPlatform() then self:postAdjustSimpleTrackEvent("rumq9q") else self:postAdjustSimpleTrackEvent("xzqrsb") end CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostAdjustRevenueTrackEvent("naoyh8", price, "USD") end -- 上报等级提升事件,单独处理,只上报到AF和FB,不上报数数 function BIReport:postFirstLoginEvent() -- 只有外网正式渠道真机包才上报 if not Platform:getIsPublishChannel() or EDITOR_MODE then return end -- 审核模式不上报 if CS.BF.BFMain.IsShenhe then return end CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostAppsflyerEvent("af_first_login", json.encode({})) CS.BF.BFMain.Instance.SDKMgr.BFLoginSDKMgr.FBSdk:LogAppEvent("fb_first_login", json.encode({})) end -- 上报广告播放提升事件,单独处理,只上报到AF和FB,不上报数数 function BIReport:postAdEvent() -- 只有外网正式渠道真机包才上报 if not Platform:getIsPublishChannel() or EDITOR_MODE then return end -- 审核/白名单模式不上报 if CS.BF.BFMain.IsShenhe or CS.BF.BFMain.IsWhite then return end local adCount = DataManager.PlayerData:getAdCount() if not adCount then return end CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostAppsflyerEvent("af_AdRewardAD", json.encode({})) CS.BF.BFMain.Instance.SDKMgr.BFLoginSDKMgr.FBSdk:LogAppEvent("fb_AdRewardAD", json.encode({})) if not self.afPostAdCount then self.afPostAdCount = { [2] = true, [3] = true, [5] = true, [10] = true, [20] = true, [40] = true, [80] = true, } end if self.afPostAdCount[adCount] then local args = {} CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostAppsflyerEvent("af_AdRewardAD_" .. adCount, json.encode(args)) end if not self.fbPostAdCount then self.fbPostAdCount = { [2] = true, [3] = true, [5] = true, [10] = true, [20] = true, } end if self.fbPostAdCount[adCount] then local args = {} CS.BF.BFMain.Instance.SDKMgr.BFLoginSDKMgr.FBSdk:LogAppEvent("fb_AdRewardAD_" .. adCount, json.encode(args)) end end -- 上报进入章节事件,单独处理,只上报到AF和FB,不上报数数 function BIReport:postChapterEvent(chapter) -- 只有外网正式渠道真机包才上报 if not Platform:getIsPublishChannel() or EDITOR_MODE then return end -- 审核/白名单模式不上报 if CS.BF.BFMain.IsShenhe or CS.BF.BFMain.IsWhite then return end if not chapter then return end CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostAppsflyerEvent("af_Level", json.encode({})) CS.BF.BFMain.Instance.SDKMgr.BFLoginSDKMgr.FBSdk:LogAppEvent("fb_Level", json.encode({})) if not self.afPostChapter then self.afPostChapter = { [1] = true, [2] = true, [3] = true, [4] = true, [5] = true, [6] = true, [7] = true, [8] = true, [9] = true, [10] = true, [11] = true, [12] = true, [13] = true, [14] = true, [15] = true, [16] = true, [17] = true, [18] = true, [19] = true, [20] = true, [30] = true, [40] = true, [50] = true, } end if self.afPostChapter[chapter] then local args = {} CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostAppsflyerEvent("af_Chapter_" .. chapter, json.encode(args)) end if not self.fbPostChapter then self.fbPostChapter = { [1] = true, [2] = true, [3] = true, [4] = true, [5] = true, [6] = true, [7] = true, [8] = true, [9] = true, [10] = true, [15] = true, [20] = true, [30] = true, [40] = true, [50] = true, } end if self.fbPostChapter[chapter] then local args = {} CS.BF.BFMain.Instance.SDKMgr.BFLoginSDKMgr.FBSdk:LogAppEvent("fb_Chapter_" .. chapter, json.encode(args)) end end -- 上报获取任意x个英雄 function BIReport:postFirstGetHero(num) -- 只有外网正式渠道真机包才上报 if not Platform:getIsPublishChannel() or EDITOR_MODE then return end -- 审核/白名单模式不上报 if CS.BF.BFMain.IsShenhe or CS.BF.BFMain.IsWhite then return end if not self.postHeroNum then self.postHeroNum = { [4] = true, [6] = true, [8] = true, [10] = true, [12] = true, [14] = true, [16] = true, [18] = true, [20] = true, } end if not self.postHeroNum[num] then return end local args = {} CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostAppsflyerEvent("af_herosum_" .. num, json.encode(args)) CS.BF.BFMain.Instance.SDKMgr.BFLoginSDKMgr.FBSdk:LogAppEvent("fb_herosum_" .. num, json.encode(args)) end -- 上报英雄等级 function BIReport:postHeroLev(beforeLv, lv) -- 只有外网正式渠道真机包才上报 if not Platform:getIsPublishChannel() or EDITOR_MODE then return end -- 审核/白名单模式不上报 if CS.BF.BFMain.IsShenhe or CS.BF.BFMain.IsWhite then return end local allHeroes = DataManager.HeroData:getAllHeroes() if not self.postHeroLevel then self.postHeroLevel = { [3] = true, [5] = true, [7] = true, [9] = true } end local temp = {} for heroid, heroEntity in pairs(allHeroes) do for heroLv, _ in pairs(self.postHeroLevel) do if heroEntity:getLv() >= heroLv then temp[heroLv] = (temp[heroLv] or 0) + 1 end end end for heroLv, count in pairs(temp) do if heroLv > beforeLv and heroLv <= lv and count == 5 then local args = {} CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostAppsflyerEvent("af_hero4_lev" .. heroLv, json.encode(args)) CS.BF.BFMain.Instance.SDKMgr.BFLoginSDKMgr.FBSdk:LogAppEvent("fb_hero4_lev" .. heroLv, json.encode(args)) end end end -- 上报等级提升事件,单独处理,只上报到AF和FB,不上报数数 function BIReport:postLvEvent(beforeLv, nowLv) -- 只有外网正式渠道真机包才上报 if not Platform:getIsPublishChannel() or EDITOR_MODE then return end -- 审核/白名单模式不上报 if CS.BF.BFMain.IsShenhe or CS.BF.BFMain.IsWhite then return end if not nowLv then return end if not self.postLV then self.postLV = { [1] = true, [2] = true, [3] = true, [5] = true, [10] = true, [15] = true, [20] = true, [30] = true, [40] = true, [50] = true, [60] = true, [70] = true, [80] = true, } end -- CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostAppsflyerEvent("af_grade", json.encode({})) -- CS.BF.BFMain.Instance.SDKMgr.BFLoginSDKMgr.FBSdk:LogAppEvent("fb_grade", json.encode({})) local reportLv for lv, _ in pairs(self.postLV) do if beforeLv < lv and nowLv >= lv then reportLv = lv break end end if not reportLv then return end local args = {} CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostAppsflyerEvent("af_grade_" .. reportLv, json.encode(args)) CS.BF.BFMain.Instance.SDKMgr.BFLoginSDKMgr.FBSdk:LogAppEvent("fb_grade_" .. reportLv, json.encode(args)) end -- 上报部分档位首次付费 function BIReport:postFirstRechargeEvent(id) -- 只有外网正式渠道真机包才上报 if not Platform:getIsPublishChannel() or EDITOR_MODE then return end -- 审核/白名单模式不上报 if CS.BF.BFMain.IsShenhe or CS.BF.BFMain.IsWhite then return end if not self.postRechargeID then self.postRechargeID = { [1] = false, -- 0.99 [2] = false, -- 1.99 [3] = true, -- 2.99 [4] = false, -- 3.99 [5] = true, -- 4.99 [6] = false, -- 5.99 [7] = false, -- 6.99 [8] = false, -- 7.99 [9] = false, -- 8.99 [10] = true, -- 9.99 [11] = false, -- 11.99 [12] = false, -- 14.99 [13] = true, -- 19.99 [14] = false, -- 24.99 [15] = true, -- 29.99 [16] = true, -- 49.99 [17] = false, -- 69.99 [18] = false, -- 99.99 [19] = false, -- 199.99 } end if not self.postRechargeID[id] then return end local cfg = ConfigManager:getConfig("recharge")[id] if not cfg then return end local args = {} CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostAppsflyerEvent("af_package_" .. cfg.price, json.encode(args)) CS.BF.BFMain.Instance.SDKMgr.BFLoginSDKMgr.FBSdk:LogAppEvent("fb_package_" .. cfg.price, json.encode(args)) end -- 上报24小时内部分章节第一次失败的用户 function BIReport:postFirstDayGradeFailEvent(chapterId) -- 只有外网正式渠道真机包才上报 if not Platform:getIsPublishChannel() or EDITOR_MODE then return end -- 审核/白名单模式不上报 if CS.BF.BFMain.IsShenhe or CS.BF.BFMain.IsWhite then return end if not DataManager:getIsInCreate24Hour() then return end if not self.postChapterId then self.postChapterId = { [1] = true, [2] = true, [3] = true, [5] = true, } end if not self.postChapterId[chapterId] then return end local args = {} CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostAppsflyerEvent("af_24_grade_" .. chapterId .. "_fail", json.encode(args)) CS.BF.BFMain.Instance.SDKMgr.BFLoginSDKMgr.FBSdk:LogAppEvent("fb_24_grade_" .. chapterId .. "_fail", json.encode(args)) end -- 上报24小时内部分英雄升级 function BIReport:postFirstDayHeroLevel(heroId) -- 只有外网正式渠道真机包才上报 if not Platform:getIsPublishChannel() or EDITOR_MODE then return end -- 审核/白名单模式不上报 if CS.BF.BFMain.IsShenhe or CS.BF.BFMain.IsWhite then return end if not DataManager:getIsInCreate24Hour() then return end local heroEntity = DataManager.HeroData:getHeroById(heroId) if not heroEntity or heroEntity:getLv() > 2 then return end if not self.postHeroId then self.postHeroId = { [22001] = "24_blade_levelup", [32001] = "24_onion_levelup", [42001] = "24_iceheart_levelup", } end if not self.postHeroId[heroId] then return end local args = {} CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostAppsflyerEvent("af_" .. self.postHeroId[heroId], json.encode(args)) CS.BF.BFMain.Instance.SDKMgr.BFLoginSDKMgr.FBSdk:LogAppEvent("fb_" .. self.postHeroId[heroId], json.encode(args)) end -- 上报24小时内开宝箱 function BIReport:postFirstDayOpenBox(count) -- 只有外网正式渠道真机包才上报 if not Platform:getIsPublishChannel() or EDITOR_MODE then return end -- 审核/白名单模式不上报 if CS.BF.BFMain.IsShenhe or CS.BF.BFMain.IsWhite then return end if not DataManager:getIsInCreate24Hour() then return end if not self.postBoxCount then self.postBoxCount = { [3] = true } end if not self.postBoxCount[count] then return end local args = {} CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostAppsflyerEvent("af_24_boxopen_3", json.encode(args)) CS.BF.BFMain.Instance.SDKMgr.BFLoginSDKMgr.FBSdk:LogAppEvent("fb_24_boxopen_3", json.encode(args)) end -- Firebase function BIReport:postFirebaseLog(eventName, eventValue) if not Platform:getIsPublishChannel() or EDITOR_MODE then return end if not eventName or not eventValue then return end CS.BF.BFMain.Instance.SDKMgr.BFThirdReportSDKMgr:PostFireBaseEvent(eventName, json.encode(eventValue)) end -- 以下为数数 function BIReport:printArgsStr(eventName, args) if not EDITOR_MODE then return end local tab = clone(args) tab.eventName = eventName Logger.log("============report %s===========", eventName) Logger.printTable(tab or {}) end -- 开启游戏 function BIReport:postGameLogin(isFirstLogin) local args = { first_begin = isFirstLogin, -- LogType -- 进入类型,不处理 } self:report(EVENT_NAME_LOGIN, args) end -- 登录完成 function BIReport:postGameLoginFinish() -- FirstBegin 是否是首次登陆 -- DailyFirstBegin 是否当日首次登录 -- LogType 进入类型 -- PushID 推送id -- MaxLevel 已解锁最大关卡 -- Duration 登录加载时长 -- MyEquip 拥有装备 -- MyCherish 拥有传家宝 -- MyRunes 拥有符文 -- MaxTrial 副本进度 -- IsNew 是否是新用户 local args = { -- is_daily_first = DataManager:getIsTodayFirstLogin(), -- is_first = DataManager:getIsFirstLogin(), } args.all_heroes = DataManager.HeroData:getAllHeroesBIStr() self:report(EVENT_NAME_LOGIN_FINISH, args) end -- 游戏退出 function BIReport:postGameExit() local args = {} self:report(EVENT_NAME_EXIT, args) end -- 进入战斗 function BIReport:postFightBegin(battleType, wave, chapterId, maxChapter, startTimes) -- wave -- 波次 -- chapterId 进入关卡编号 -- maxChapter 已解锁最大关卡 -- startTimes 累计进入次数 local args = { battle_type = BIReport.BATTLE_TYPE[battleType], event_type = BIReport.FIGHT_OPT_TYPE.START, wave_id = wave, chapter_id = chapterId, fight_max_chapter = maxChapter, start_times = startTimes, } args.formation, args.famation_level = DataManager.FormationData:getStageFormationBIStr() self:report(EVENT_NAME_FIGHT, args) end function BIReport:postFightEnd(battleType, battleData, chapterId, wave, duration, totalTime, eliminateCount, chapterEliminateCount, type, deathType, startTimes, isFirstWin, isFianlStep, maxLinkCount) -- wave 进入关卡编号 -- LevelType 进入关卡类型 -- MaxLevel 已解锁最大关卡 -- StartTimes 累计进入次数 -- IsNew 是否是新用户 local skillStr = GConst.EMPTY_STRING local skillNum = 0 local skillMap = battleData:getSelectSkillMap() if skillMap then for skillId, info in pairs(skillMap) do skillStr = skillStr .. skillId .. "|" skillNum = skillNum + (info.count or 0) end end local args = { battle_type = BIReport.BATTLE_TYPE[battleType], event_type = BIReport.FIGHT_OPT_TYPE.END, wave_id = wave, chapter_id = chapterId, duration = duration, chapter_duration = totalTime, eliminate = eliminateCount, chapter_eleminate = chapterEliminateCount, skill = skillStr, skill_num = skillNum, type = type, -- "Win Fail Quit", death_type = deathType, start_times = startTimes, is_first_win = isFirstWin, isFianlStep = isFianlStep, } args.formation, args.famation_level = DataManager.FormationData:getStageFormationBIStr() args.max_link_count = maxLinkCount self:report(EVENT_NAME_FIGHT, args) end function BIReport:postShowFightSkillSelect(battleType, battleData, skillList, chapterId, totalTime, wave) local skillNum = 0 local skillMap = battleData:getSelectSkillMap() if skillMap then for skillId, info in pairs(skillMap) do skillNum = skillNum + (info.count or 0) end end local skillStr = GConst.EMPTY_STRING if skillList then for _, skillId in ipairs(skillList) do skillStr = skillStr .. skillId .. "|" end end local args = { battle_type = BIReport.BATTLE_TYPE[battleType], event_type = BIReport.FIGHT_OPT_TYPE.SELECT_SKILL_OPEN, wave_id = wave, chapter_id = chapterId, chapter_duration = totalTime, skill = skillStr, skill_num = skillNum, } self:report(EVENT_NAME_FIGHT, args) end function BIReport:postFightSkillSelect(battleType, battleData, skillList, chapterId, totalTime, wave) local skillNum = 0 local skillMap = battleData:getSelectSkillMap() if skillMap then for skillId, info in pairs(skillMap) do skillNum = skillNum + (info.count or 0) end end local skillStr = GConst.EMPTY_STRING if skillList then for _, skillId in ipairs(skillList) do skillStr = skillStr .. skillId .. "|" end end local args = { battle_type = BIReport.BATTLE_TYPE[battleType], event_type = BIReport.FIGHT_OPT_TYPE.SELECT_SKILL, wave_id = wave, chapter_id = chapterId, chapter_duration = totalTime, skill = skillStr, skill_num = skillNum, } self:report(EVENT_NAME_FIGHT, args) end -- 首页按钮点击 function BIReport:postHomeBtnCilck(clickType) local args = { event_type = clickType, type = BIReport.CLICK_BTN_TYPE[clickType], chapter_id = DataManager.ChapterData:getChapterId() } self:report(EVENT_NAME_CLICK_BTN, args) end function BIReport:postChapterOpenBox(chapterId, wave, rewards) local rewardStr = GFunc.getRewardsStr(rewards) local args = { box_level = wave, rewards = rewardStr, chapter_id = chapterId, event_type = BIReport.CHAPTER_OPT_TYPE.BOX_OPEN } self:report(EVENT_NAME_CHAPTER_OPT, args) end -- 道具获取 function BIReport:postItemGet(num, itemId, getType) -- Item 道具id -- Type 获得方式 -- MaxLevel 最大关卡 -- ItemNum 获取道具数量 -- ItemAll 获取后道具数量 -- IsNew 是否是新用户 local allNum = DataManager.BagData.ItemData:getItemNumById(itemId) local args = { item_value = num, item_id = itemId, item_all_value = allNum, type = getType, } self:report(EVENT_NAME_ITEM_GET, args) end -- 道具使用 function BIReport:postItemUse(num, itemId, getType) -- Item 道具id -- Type 消耗方式 -- MaxLevel 最大关卡 -- ItemNum 消耗道具数量 -- ItemAll 消耗后道具数量 -- IsNew 是否是新用户 local allNum = DataManager.BagData.ItemData:getItemNumById(itemId) local args = { item_value = num, item_id = itemId, item_all_value = allNum, type = getType, } self:report(EVENT_NAME_ITEM_USE, args) end -- 体力获得 function BIReport:postVitGet(num, getType, vitAll) -- Type 获得类型 获得体力时 String Ads=广告、Gold=金币 、Time=时间恢复 、Stores=商品恢复 -- IsNew 是否是新用户 Boolean 是否为当天新用户,True = 是,False = 否 -- EnergyNum 当前体力数 Int 获得体力数量 -- MaxChapter 最大章节 Int 已解锁的最大章节 local args = { type = getType, vit_num = num, vit_all = vitAll or DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_VIT), } self:report(EVENT_NAME_VIT_GET, args) end -- 体力使用 function BIReport:postVitUse(num) -- EnergyNum 当前体力数 减少体力时 Int 使用体力数量 -- IsNew 是否是新用户 Boolean 是否为当天新用户,True = 是,False = 否 -- MaxChapter 最大章节 Int 已解锁的最大章节 local args = { vit_num = num, vit_all = DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_VIT), } self:report(EVENT_NAME_VIT_USE, args) end -- 点击广告按钮 function BIReport:postAdClick(adsType) local args = { ad_type = adsType, event_type = BIReport.ADS_OPT_TYPE.CLICK, } self:report(EVENT_NAME_AD_OPT, args) end -- 广告播放视频成功 function BIReport:postAdPlaySuccess(adsType) local args = { ad_type = adsType, event_type = BIReport.ADS_OPT_TYPE.SUCCESS, } self:report(EVENT_NAME_AD_OPT, args) end -- 广告奖励发放成功 function BIReport:postAdRewardGet(adsType) local args = { ad_type = adsType, event_type = BIReport.ADS_OPT_TYPE.REWARD_GET, } self:report(EVENT_NAME_AD_OPT, args) end -- 支付sdk初始化成功 function BIReport:postPayInitSuccess() local args = { event_type = BIReport.PAY_OPT_TYPE.INIT_SUC, } self:report(EVENT_NAME_PAY_OPT, args) end -- 支付sdk初始化失败 function BIReport:postPayInitFailed(failedDesc) local args = { pay_failed_desc = failedDesc or GConst.EMPTY_STRING, event_type = BIReport.PAY_OPT_TYPE.INIT_FAILED, } self:report(EVENT_NAME_PAY_OPT, args) end -- 点击商品购买按钮 function BIReport:postPayClick(giftType, id, rechargeId) local args = { gift_type = giftType, commodity_id = id, recharge_id = rechargeId, event_type = BIReport.PAY_OPT_TYPE.CLICK, } self:report(EVENT_NAME_PAY_OPT, args) end -- 跳转购买界面 function BIReport:postPayTurn(giftType, id, rechargeId) local args = { gift_type = giftType, commodity_id = id, recharge_id = rechargeId, event_type = BIReport.PAY_OPT_TYPE.BUY, } self:report(EVENT_NAME_PAY_OPT, args) end -- 取消购买 function BIReport:postPayCancel(productId, orderId, rechargeId, giftType, id) local args = { pay_product_id = productId, pay_order_id = orderId, recharge_id = rechargeId, gift_type = giftType, commodity_id = id, event_type = BIReport.PAY_OPT_TYPE.CANCEL, } self:report(EVENT_NAME_PAY_OPT, args) end -- 购买失败 function BIReport:postPayFailed(productId, orderId, rechargeId, failedType, giftType, id) local args = { pay_product_id = productId, pay_order_id = orderId, recharge_id = rechargeId, pay_failed_type = failedType, gift_type = giftType, commodity_id = id, event_type = BIReport.PAY_OPT_TYPE.FAILED, } self:report(EVENT_NAME_PAY_OPT, args) end -- -- 获得购买物品 function BIReport:postPayGet(giftType, id, rechargeId, orderId, originOrderId, buyNum, rewards) local args = { gift_type = giftType, commodity_id = id, buy_num = buyNum, origin_order_id = tostring(originOrderId), recharge_id = rechargeId, event_type = BIReport.PAY_OPT_TYPE.REWARD, } if GFunc.isShenhe() then args.event_type = BIReport.PAY_OPT_TYPE.APPLE_REVIEW_REWARD elseif GFunc.isInWhitelist() then args.event_type = BIReport.PAY_OPT_TYPE.WHITELIST_REWARD end self:report(EVENT_NAME_PAY_OPT, args) if EDITOR_MODE then if not giftType or not id or not rechargeId then local params = { content = "BI Report postPayGet has no basic params", boxType = GConst.MESSAGE_BOX_TYPE.MB_OK, okText = I18N:getGlobalText(I18N.GlobalConst.BTN_TEXT_OK), } GFunc.showMessageBox(params) Logger.log("BI Report postPayGet has no basic params") end end end -- 登录成功 function BIReport:postAccountLoginFinish(loginType) local args = { login_type = loginType, event_type = BIReport.ACCOUNT_OPT_TYPE.LOGIN_SUCCESS, } self:report(EVENT_NAME_ACCOUNT_OPT, args) end -- 登录失败 function BIReport:postAccountLoginFailed(loginType, reason) local args = { login_type = loginType, login_failed_desc = reason, event_type = BIReport.ACCOUNT_OPT_TYPE.LOGIN_FAILED, } self:report(EVENT_NAME_ACCOUNT_OPT, args) end -- 上报ping服务器地址情况 function BIReport:postPingServer(address, time, resultType) local args = { address = address, time = time, type = resultType } self:report(EVENT_NAME_PING_SERVER, args) end -- 钻石增加 function BIReport:postGemGet(num, getType, itemId) -- CoinNum 代币数量 增加代币时 Int 获得代币数量 -- Type 获得类型 String 广告=Ads、商店宝箱=Box、关卡宝箱=LevelBox、关卡奖励=LevelReward、 -- CoinsType 代币类型 String Gold=金币、Gems=钻石 -- IsNew 是否是新用户 Boolean 是否为当天新用户,True = 是,False = 否 -- MaxChapter 最大章节 Int 已解锁的最大章节 local args = { type = getType, coin_num = num, coin_type = BIReport.COIN_TYPE[itemId], coin_all = DataManager.BagData.ItemData:getItemNumById(itemId), } self:report(EVENT_NAME_COIN_GET, args) end -- 钻石使用 function BIReport:postGemUse(num, getType, itemId) -- CoinNum 代币数量 减少代币时 Int 使用代币数量 -- Type 使用类型 String Box=开启宝箱、复活=Revive、天赋升级=Talent、Equip=装备升级 -- CoinsType 代币类型 String Gold=金币、Gems=钻石 -- IsNew 是否是新用户 Boolean 是否为当天新用户,True = 是,False = 否 -- MaxChapter 最大章节 Int 已解锁的最大章节 local args = { type = getType, coin_num = num, coin_type = BIReport.COIN_TYPE[itemId], coin_all = DataManager.BagData.ItemData:getItemNumById(itemId), } self:report(EVENT_NAME_COIN_USE, args) end function BIReport:postDailyTaskFinish(taskType, cfgId, taskId, refresh) local args = { task_type = taskType, task_id = taskId, cfg_id = cfgId, task_refresh = refresh, event_type = BIReport.TASK_OPT_TYPE.FINISH, } self:report(EVENT_NAME_DAILY_TASK, args) end -- 邮箱 function BIReport:postMailOpen(mailId) -- IsNew 是否是新用户 -- MaxLevel 最大关卡 -- Email_ID 邮件编号 local args = { mail_id = mailId, event_type = BIReport.MAIL_OPT_TYPE.OPEN, } self:report(EVENT_NAME_MAIL_OPT, args) end function BIReport:postMailClaim(mailId) -- IsNew 是否是新用户 -- MaxLevel 最大关卡 -- Email_ID 邮件编号 local args = { mail_id = mailId, event_type = BIReport.MAIL_OPT_TYPE.CLAIM, } self:report(EVENT_NAME_MAIL_OPT, args) end function BIReport:postMailClick(mailId) -- Email_ID 邮件编号 local args = { mail_id = mailId, event_type = BIReport.MAIL_OPT_TYPE.CLICK, } self:report(EVENT_NAME_MAIL_OPT, args) end function BIReport:postAccountDelete(loginType) local args = { login_type = loginType, event_type = BIReport.ACCOUNT_OPT_TYPE.DELETE, } self:report(EVENT_NAME_ACCOUNT_OPT, args) end function BIReport:postAccountBindClick(loginType) local args = { login_type = loginType, event_type = BIReport.ACCOUNT_OPT_TYPE.CLICK_BIND, } self:report(EVENT_NAME_ACCOUNT_OPT, args) end function BIReport:postAccountBindFinish(loginType, success) local args = { login_type = loginType, event_type = success and BIReport.ACCOUNT_OPT_TYPE.BIND_SUCCESS or BIReport.ACCOUNT_OPT_TYPE.BIND_FAILED, } self:report(EVENT_NAME_ACCOUNT_OPT, args) end function BIReport:postAccountChangeClick(loginType) local args = { login_type = loginType, event_type = BIReport.ACCOUNT_OPT_TYPE.CLICK_CHANGE_ACCOUNT, } self:report(EVENT_NAME_ACCOUNT_OPT, args) end function BIReport:postAccountChangeFinish(loginType, success) local args = { login_type = loginType, event_type = success and BIReport.ACCOUNT_OPT_TYPE.CHANGE_ACCOUNT_SUCCESS or BIReport.ACCOUNT_OPT_TYPE.CHANGE_ACCOUNT_FAILED, } self:report(EVENT_NAME_ACCOUNT_OPT, args) end function BIReport:postHeroOpt(heroId, optType) local heroEntity = DataManager.HeroData:getHeroById(heroId) if not heroEntity then return end local args = { hero_id = heroId, level = heroEntity:getLv(), event_type = optType } args.formation = DataManager.FormationData:getStageFormationBIStr() self:report(EVENT_NAME_HERO_OPT, args) end function BIReport:postPlayerLvUp(fromLevel, toLevel) local args = { player_level_from = fromLevel, player_level = toLevel, } self:report(EVENT_NAME_PLAYER_LV_UP, args) end -- 内购相关界面展示,包括弹出/主动打开(如果是打开商城页签,钻石礼包只上报id2,章节礼包只上报首个可购买章节id) -- giftType为BIReport.GIFT_TYPE function BIReport:postPayUIShow(giftType, giftId) local args = { gift_type = giftType, gift_id = giftId, } self:report(EVENT_NAME_PAY_UI_SHOW, args) end function BIReport:postBountyLevelUp(bountyType, level, exp, season) local args = { event_type = BIReport.BOUNTY_OPT_TYPE.BOUNTY_LEVEL_UP, season = season, level = level, exp = exp, bounty_type = bountyType, } self:report(EVENT_NAME_BOUNTY_OPT, args) end function BIReport:postBountyReward(bountyType, level, exp, season, rewardLevelId, isPro) local args = { event_type = BIReport.BOUNTY_OPT_TYPE.BOUNTY_REWARD, season = season, level = level, exp = exp, bounty_type = bountyType, bounty_level_id = rewardLevelId, is_pro = isPro, } self:report(EVENT_NAME_BOUNTY_OPT, args) end function BIReport:postArenaBountyLevelUp(bountyType, level, exp, season) local args = { event_type = BIReport.BOUNTY_OPT_TYPE.ARENA_BOUNTY_LEVEL_UP, season = season, level = level, exp = exp, bounty_type = bountyType, } self:report(EVENT_NAME_BOUNTY_OPT, args) end function BIReport:postArenaBountyReward(bountyType, level, exp, season, rewardLevelId, isPro) local args = { event_type = BIReport.BOUNTY_OPT_TYPE.ARENA_BOUNTY_REWARD, season = season, level = level, exp = exp, bounty_type = bountyType, bounty_level_id = rewardLevelId, is_pro = isPro, } self:report(EVENT_NAME_BOUNTY_OPT, args) end function BIReport:postNetWorkOpt(optType, uiName, errorCode, disconnectTime) local args = { event_type = optType, ui_name = uiName, error_code = errorCode, disconnect_time = disconnectTime } self:report(EVENT_NAME_NETWORK_OPT, args) end function BIReport:postAppLovinAdRevenue(msg) local args = json.decode(msg) or {} if args.revenue then args.revenue = tonumber(args.revenue) end self:report(EVENT_NAME_APPLOVIN_AD_REVENUE, args) if args.revenue and args.network_name and args.ad_unit_identifier and args.placement then self:postAdjustAdRevenueAppLovinMAX(args.revenue, args.network_name, args.ad_unit_identifier, args.placement) local args = { applovin_revenue = args.revenue } self:postFirebaseLog("ad_impression", args) end end -- 竞技场进入消耗上报 function BIReport:postArenaConsume(gradingId, todayConsume) local args = { event_type = BIReport.ARENA_OPT_TYPE.CONSUME, grading_id = gradingId, today_consume = todayConsume, } self:report(EVENT_NAME_ARENA_OPT, args) end -- 竞技场结算数据上报 function BIReport:postArenaSettlement(gradingId, round, winRate, win) local args = { event_type = BIReport.ARENA_OPT_TYPE.SETTLEMENT, grading_id = gradingId, round = round, win_rate = winRate, win = win, } self:report(EVENT_NAME_ARENA_OPT, args) end function BIReport:postDailyChallengeTaskState(completedCount, taskInfo) local args = { event_type = BIReport.DIALY_CHALLENGE_OPT_TYPE.TASK_STATE, task_completed_count = completedCount, task_info = json.encode(taskInfo) } self:report(EVENT_NAME_DAILY_CHALLENGE_OPT, args) end function BIReport:postNetError(pbName, code, reqData) local args = { event_type = BIReport.NETWORK_OPT_TYPE.ERROR_CODE, pb_name = pbName, ui_name = UIManager:getTopUIIndex(), error_code = code, req_data = reqData } self:report(EVENT_NAME_NETWORK_OPT, args) end function BIReport:postPbDecodefailed(pbName, reqData) local args = { event_type = BIReport.NETWORK_OPT_TYPE.PD_DECODE_FAILED, pb_name = pbName, ui_name = UIManager:getTopUIIndex(), req_data = reqData } self:report(EVENT_NAME_NETWORK_OPT, args) end function BIReport:postPbAuthfailed(pbName, lastLoginInfo, authFailToLogin) local args = { event_type = BIReport.NETWORK_OPT_TYPE.AUTH_FAILED, pb_name = pbName, ui_name = UIManager:getTopUIIndex(), lastLoginInfo = lastLoginInfo, authFailToLogin = authFailToLogin } self:report(EVENT_NAME_NETWORK_OPT, args) end function BIReport:postRateClose(rateStar) local args = { event_type = BIReport.MISCELLANEOUS_OPT_TYPE.EVALUATE_CLOSE, rate_star = rateStar, } self:report(EVENT_NAME_MISCELLANEOUS_OPT, args) end function BIReport:postRateOpen() local args = { event_type = BIReport.MISCELLANEOUS_OPT_TYPE.EVALUATE_OPEN, } self:report(EVENT_NAME_MISCELLANEOUS_OPT, args) end function BIReport:postPbAuthfailed(pbName, lastLoginInfo, authFailToLogin) local args = { event_type = BIReport.NETWORK_OPT_TYPE.AUTH_FAILED, pb_name = pbName, ui_name = UIManager:getTopUIIndex(), lastLoginInfo = lastLoginInfo, authFailToLogin = authFailToLogin } self:report(EVENT_NAME_NETWORK_OPT, args) end return BIReport