using AppsFlyerSDK; using DidabuCloud.Unity.Core; using System; using System.Threading.Tasks; using Mogafa.Unity.AppsFlyers; using System.Collections.Generic; using Newtonsoft.Json; using Mogafa.Common; using Mogafa.App.LogEvents; namespace DidabuCloud.Unity.AppsFlyers { public static class AppsFlyerDidabuExtensions { private static Didabu didabu; private static bool isInited = false; private static AppsFlyerConversionData callback; private static Action> onConversionDataSuccess; private static Action onConversionDataFail; private static Action onAppOpenAttribution; private static Action onAppOpenAttributionFailure; private static string reporterName = ""; private static bool appsFlyerLogEventAdded = false; public static Dictionary mediaSourceAdCreativeKeyNameMap = new Dictionary(); public static Task InitAppsFlyer(this Didabu didabu, string devKey, string bundleId, Dictionary mediaSourceAdCreativeKeyNameMap) { return InitAppsFlyer(didabu, devKey, bundleId, null, null, null, null, mediaSourceAdCreativeKeyNameMap); } public static Task InitAppsFlyer(this Didabu didabu, string devKey, string bundleId = null, Action> onConversionDataSuccess = null, Action onConversionDataFail = null, Action onAppOpenAttribution = null, Action onAppOpenAttributionFailure = null, Dictionary mediaSourceAdCreativeKeyNameMap = null) { if (isInited) { return Task.CompletedTask; } AppsFlyerDidabuExtensions.didabu = didabu; AppsFlyerDidabuExtensions.mediaSourceAdCreativeKeyNameMap = mediaSourceAdCreativeKeyNameMap; if(AppsFlyerDidabuExtensions.mediaSourceAdCreativeKeyNameMap == null) { AppsFlyerDidabuExtensions.mediaSourceAdCreativeKeyNameMap= new Dictionary(); } callback = didabu.AddComponent(); callback.OnConversionDataSuccess += OnConversionDataSuccessInternal; callback.OnConversionDataFail += OnConversionDataFailInternal; callback.OnAppOpenAttribution += OnAppOpenAttributionInternal; callback.OnAppOpenAttributionFailure += OnAppOpenAttributionFailureInternal; if (onConversionDataSuccess != null) { AppsFlyerDidabuExtensions.onConversionDataSuccess = onConversionDataSuccess; } if (onConversionDataFail != null) { AppsFlyerDidabuExtensions.onConversionDataFail = onConversionDataFail; } if (onAppOpenAttribution != null) { AppsFlyerDidabuExtensions.onAppOpenAttribution = onAppOpenAttribution; } if (onAppOpenAttributionFailure != null) { AppsFlyerDidabuExtensions.onAppOpenAttributionFailure = onAppOpenAttributionFailure; } if (!string.IsNullOrEmpty(didabu.User.DidabuId)) { AppsFlyer.setCustomerUserId(didabu.User.DidabuId); } else { didabu.OnInitialSuccessed += OnDidabuInitialSuccessed; if (!string.IsNullOrEmpty(didabu.User.DidabuId)) { AppsFlyer.setCustomerUserId(didabu.User.DidabuId); } } didabu.BeginGetAttribution(); if(string.IsNullOrEmpty(bundleId)) { bundleId = UnityEngine.Application.identifier; } AppsFlyer.initSDK(devKey, bundleId, callback); AppsFlyer.startSDK(); isInited = true; didabu.AddCommonEventParameter("appsFlyerId", AppsFlyer.getAppsFlyerId()); return Task.CompletedTask; } private static void OnAppOpenAttributionFailureInternal(string error) { onAppOpenAttributionFailure?.Invoke(error); } private static void OnAppOpenAttributionInternal(string attributionData) { onAppOpenAttribution?.Invoke(attributionData); } private static void OnConversionDataFailInternal(string error) { onConversionDataFail?.Invoke(error); } private static void OnDidabuInitialSuccessed(string didabuId) { AppsFlyer.setCustomerUserId(didabuId); } private static async void OnConversionDataSuccessInternal(Dictionary conversionData) { var status = ""; var mediaSource = ""; if (conversionData.ContainsKey("af_status")) { status = conversionData["af_status"] as string; } var isOrganic = false; if (!string.IsNullOrEmpty(status) && status.ToLower() == "non-organic") { isOrganic = false; } else { isOrganic = true; } if (conversionData.ContainsKey("media_source")) { if (conversionData["media_source"] != null) { mediaSource = conversionData["media_source"].ToString(); } } var adSet = GetAdSet(conversionData, mediaSource); var adCampaign = ""; if (conversionData.ContainsKey("campaign")) { if (conversionData["campaign"] != null) { adCampaign = conversionData["campaign"].ToString(); } } var adCampaignId = ""; if (conversionData.ContainsKey("campaign_id")) { if (conversionData["campaign_id"] != null) { adCampaignId = conversionData["campaign_id"].ToString(); } } var adSiteId = ""; if (conversionData.ContainsKey("af_siteid")) { if (conversionData["af_siteid"] != null) { adSiteId = conversionData["af_siteid"].ToString(); } } var cpi = "0"; if (conversionData.ContainsKey("cost_cents_USD")) { if (conversionData["cost_cents_USD"] != null) { cpi = conversionData["cost_cents_USD"].ToString(); } } didabu.SetAttribution(isOrganic, mediaSource, adCampaign, adSet,adSiteId, adCampaignId,cpi); await didabu.ThirdPartyBind("AppsFlyer", UnityEngine.Application.identifier, AppsFlyer.getAppsFlyerId(), JsonConvert.SerializeObject(conversionData)); onConversionDataSuccess?.Invoke(conversionData); } private static string GetAdSet(Dictionary conversionData, string mediaSource) { var adSet = ""; var adCreativeKeyName = "af_ad"; if (mediaSourceAdCreativeKeyNameMap.ContainsKey(mediaSource)) { adCreativeKeyName = mediaSourceAdCreativeKeyNameMap[mediaSource]; } if (conversionData.ContainsKey(adCreativeKeyName)) { adSet = conversionData[adCreativeKeyName].ToString(); } return adSet; } public static void UseAppsFlyerLogEvent(this Didabu didabu, List enabledEventNames = null, Dictionary eventNameMap = null, Dictionary eventParameterNameMap = null) { if (!appsFlyerLogEventAdded) { var reporter = new AppsFlyerLogEventReporter(); reporterName = reporter.Name; didabu.OnGetConfigurationSuccessed += OnGetConfigurationSuccessed; if (enabledEventNames == null && didabu.Config != null) { enabledEventNames = didabu.Config.GetEnabledEvents(reporterName); } if (eventNameMap == null) { eventNameMap = new Dictionary { { "ddb_purchase_", "af_purchase" } }; } if (eventParameterNameMap == null) { eventParameterNameMap = new Dictionary { { "ddbRevenue", "af_revenue" } }; } LogEventReporter.AddEventReporter(reporter, enabledEventNames, eventNameMap, eventParameterNameMap); appsFlyerLogEventAdded = true; return; } if (enabledEventNames == null && didabu.Config != null) { enabledEventNames = didabu.Config.GetEnabledEvents(reporterName); } if (enabledEventNames != null) { LogEventReporter.ChangeEnabledEventNames(reporterName, enabledEventNames.ToArray()); } LogEventReporter.ChangeEventNameMap(reporterName, eventNameMap); LogEventReporter.ChangeEventParameterNameMap(reporterName, eventParameterNameMap); } private static void OnGetConfigurationSuccessed(DidabuCoreConfig config) { var enabledEventNames = config.GetEnabledEvents(reporterName); if (enabledEventNames == null) { enabledEventNames = new List(); } //LogEventReporter.ChangeEnabledEventNames(reporterName, enabledEventNames.ToArray()); } } } /* { "redirect_response_data":null, "adgroup_id":null, "engmnt_source":null, "af_ad_type":"INTER", "retargeting_conversion_type":"none", "is_incentivized":"false", "orig_cost":"0.0", "cost_cents_USD":"0", "af_ip":"157.38.88.167", "is_first_launch":true, "af_click_lookback":"7d", "af_cpi":null, "iscache":true, "click_time":"2022-02-16 04:29:24.330", "is_branded_link":null, "match_type":"gp_referrer", "adset":null, "af_channel":"reward", "campaign_id":"3441788d7b8bead3efdc63515f95d6eb", "install_time":"2022-02-16 04:39:32.846", "af_c_id":"3441788d7b8bead3efdc63515f95d6eb", "media_source":"applovin_int", "agency":null, "advertising_id":"322bee24-a595-49a8-9628-6abba00d1c90", "clickid":"1081206504f9081c98", "af_ref":"applovin_2a9845eeff11d4e6ef9cdbe6aaaeca38d5e28f2b", "af_siteid":"577c2320ba6c74d1203db917d0321d34", "af_status":"Non-organic", "af_sub1":null, "af_ad_id":"13272656", "af_sub5":null, "af_adset":"_DEFAULT", "af_sub4":null, "af_sub3":null, "af_sub2":null, "adset_id":null, "esp_name":null, "campaign":"SlotsKing_AND_US_2_20211101_CCW", "http_referrer":null, "af_ad":"Portrai_178_IN_C_SlotsKing_20211228_SYM", "is_universal_link":null, "is_retargeting":"false", "adgroup":null, "Original":"{\"redirect_response_data\":null,\"adgroup_id\":null,\"engmnt_source\":null,\"af_ad_type\":\"INTER\",\"retargeting_conversion_type\":\"none\",\"is_incentivized\":\"false\",\"orig_cost\":\"0.0\",\"af_ip\":\"157.38.88.167\",\"is_first_launch\":true,\"af_click_lookback\":\"7d\",\"af_cpi\":null,\"iscache\":true,\"click_time\":\"2022-02-16 04:29:24.330\",\"is_branded_link\":null,\"match_type\":\"gp_referrer\",\"adset\":null,\"af_channel\":\"reward\",\"campaign_id\":\"3441788d7b8bead3efdc63515f95d6eb\",\"install_time\":\"2022-02-16 04:39:32.846\",\"af_c_id\":\"3441788d7b8bead3efdc63515f95d6eb\",\"media_source\":\"applovin_int\",\"agency\":null,\"advertising_id\":\"322bee24-a595-49a8-9628-6abba00d1c90\",\"clickid\":\"1081206504f9081c98\",\"af_ref\":\"applovin_2a9845eeff11d4e6ef9cdbe6aaaeca38d5e28f2b\",\"af_siteid\":\"577c2320ba6c74d1203db917d0321d34\",\"af_status\":\"Non-organic\",\"af_sub1\":null,\"cost_cents_USD\":\"0\",\"af_ad_id\":\"13272656\",\"af_sub5\":null,\"af_adset\":\"_DEFAULT\",\"af_sub4\":null,\"af_sub3\":null,\"af_sub2\":null,\"adset_id\":null,\"esp_name\":null,\"campaign\":\"SlotsKing_AND_US_2_20211101_CCW\",\"http_referrer\":null,\"af_ad\":\"Portrai_178_IN_C_SlotsKing_20211228_SYM\",\"is_universal_link\":null,\"is_retargeting\":\"false\",\"adgroup\":null}" } { "engmnt_source":null, "is_incentivized":"false", "orig_cost":"1.3", "cost_cents_USD":"130", "af_ip":"71.95.39.131", "is_first_launch":false, "af_click_lookback":"7d", "click_time":"2021-10-25 02:51:41.032", "is_branded_link":null, "campaign_id":"61721592e7575f591185ed06", "install_time":"2021-10-26 05:40:51.455", "media_source":"unityads_int", "idfa":"9210624b-bd5e-4c08-8bd0-b0a84dfb274a", "advertising_id":"9210624b-bd5e-4c08-8bd0-b0a84dfb274a", "af_siteid":"1w1NWCPVe660", "af_status":"Non-organic", "af_ad_orientation":"portrait", "af_ad_id":"617216ffcb01b771426bdb94", "adset_id":null, "campaign":"SlotsKing_AND_US_1.3_20211022_CCW", "http_referrer":null, "af_cost_model":"cpi", "is_universal_link":null, "is_retargeting":"false", "redirect_response_data":null, "adgroup_id":null, "retargeting_conversion_type":"none", "af_cost_currency":"USD", "af_cpi":null, "iscache":true, "match_type":"id_matching", "adset":null, "af_channel":"unity", "game_id":"500103464", "redirect":"false", "gamer_id":"350ec5deecd4ff8b4a01674cc6425a0c629c87f6aa0ff1473e768538aa10b4e4c9ca4d06a9058761e78b7800e52d049fc7871252a0d17d71712b5c60affe4f2474ecb34b5460b361c97da1157dc63aa1e757b49c23960fd114ec1e42", "af_ua":"Mozilla/5.0 (Linux; Android 11; SM-T510 Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/95.0.4638.50 Mobile Safari/537.36", "af_c_id":"61721592e7575f591185ed06", "agency":null, "af_sub1":null, "af_sub5":null, "af_adset":"095_C_SlotsKing_20211015_SYM", "af_sub4":null, "af_sub3":null, "af_sub2":null, "esp_name":null, "af_cost_value":"1.300", "af_ad":"095_C_SlotsKing_20211015_SYM", "adgroup":null, "Original":"{\"engmnt_source\":null,\"is_incentivized\":\"false\",\"orig_cost\":\"1.3\",\"af_ip\":\"71.95.39.131\",\"is_first_launch\":false,\"af_click_lookback\":\"7d\",\"click_time\":\"2021-10-25 02:51:41.032\",\"is_branded_link\":null,\"campaign_id\":\"61721592e7575f591185ed06\",\"install_time\":\"2021-10-26 05:40:51.455\",\"media_source\":\"unityads_int\",\"idfa\":\"9210624b-bd5e-4c08-8bd0-b0a84dfb274a\",\"advertising_id\":\"9210624b-bd5e-4c08-8bd0-b0a84dfb274a\",\"af_siteid\":\"1w1NWCPVe660\",\"af_status\":\"Non-organic\",\"af_ad_orientation\":\"portrait\",\"af_ad_id\":\"617216ffcb01b771426bdb94\",\"adset_id\":null,\"campaign\":\"SlotsKing_AND_US_1.3_20211022_CCW\",\"http_referrer\":null,\"af_cost_model\":\"cpi\",\"is_universal_link\":null,\"is_retargeting\":\"false\",\"redirect_response_data\":null,\"adgroup_id\":null,\"retargeting_conversion_type\":\"none\",\"af_cost_currency\":\"USD\",\"af_cpi\":null,\"iscache\":true,\"match_type\":\"id_matching\",\"adset\":null,\"af_channel\":\"unity\",\"game_id\":\"500103464\",\"redirect\":\"false\",\"gamer_id\":\"350ec5deecd4ff8b4a01674cc6425a0c629c87f6aa0ff1473e768538aa10b4e4c9ca4d06a9058761e78b7800e52d049fc7871252a0d17d71712b5c60affe4f2474ecb34b5460b361c97da1157dc63aa1e757b49c23960fd114ec1e42\",\"af_ua\":\"Mozilla\\/5.0 (Linux; Android 11; SM-T510 Build\\/RP1A.200720.012; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/95.0.4638.50 Mobile Safari\\/537.36\",\"af_c_id\":\"61721592e7575f591185ed06\",\"agency\":null,\"af_sub1\":null,\"cost_cents_USD\":\"130\",\"af_sub5\":null,\"af_adset\":\"095_C_SlotsKing_20211015_SYM\",\"af_sub4\":null,\"af_sub3\":null,\"af_sub2\":null,\"esp_name\":null,\"af_cost_value\":\"1.300\",\"af_ad\":\"095_C_SlotsKing_20211015_SYM\",\"adgroup\":null}" } { "redirect_response_data":null, "adgroup_id":null, "engmnt_source":null, "af_adset_id":"1802204318", "retargeting_conversion_type":"none", "is_incentivized":"false", "orig_cost":"0.17", "af_cost_currency":"USD", "is_first_launch":true, "af_click_lookback":"7d", "af_cpi":null, "iscache":true, "click_time":"2022-02-17 16:10:17.170", "is_branded_link":null, "match_type":"id_matching", "adset":null, "campaign_id":"ss_Mowgrass_AND_BR_20220215_CCW", "install_time":"2022-02-24 08:56:48.264", "af_c_id":"ss_Mowgrass_AND_BR_20220215_CCW", "md5_advertising_id":"005bf01cb700afef52ef3fc55d078739", "media_source":"mintegral_int", "af_enc_data":"ImzU+ZWL4yIhYIzU5MtJHCLFE/RSfzBxXdG3REmMIRH3qP9UihbU8W1XGIyMjr4uLi8XK67V1nOvqz7iQxPykg==", "agency":null, "ip":"177.129.43.138", "advertising_id":"4d1dc27d-a630-4405-92ba-1a16c2605d72", "clickid":"mtg620e7368c6da650f7242d34y", "af_siteid":"mtg1240475928", "af_status":"Non-organic", "af_sub1":null, "cost_cents_USD":"17", "af_ad_id":"1802204318", "af_sub5":null, "af_adset":"169_Skin_C_Mowgrass_P_20220121_SYM.mp4", "af_sub4":null, "af_sub3":null, "af_sub2":null, "adset_id":null, "esp_name":null, "af_cost_value":"0.17", "campaign":"Mowgrass_AND_BR_20220215_CCW", "http_referrer":null, "af_cost_model":"cpi", "af_ad":"169_Skin_C_Mowgrass_P_20220121_SYM.mp4", "is_universal_link":null, "is_retargeting":"false", "adgroup":null, "Original":"{\"redirect_response_data\":null,\"adgroup_id\":null,\"engmnt_source\":null,\"af_adset_id\":\"1802204318\",\"retargeting_conversion_type\":\"none\",\"is_incentivized\":\"false\",\"orig_cost\":\"0.17\",\"af_cost_currency\":\"USD\",\"is_first_launch\":true,\"af_click_lookback\":\"7d\",\"af_cpi\":null,\"iscache\":true,\"click_time\":\"2022-02-17 16:10:17.170\",\"is_branded_link\":null,\"match_type\":\"id_matching\",\"adset\":null,\"campaign_id\":\"ss_Mowgrass_AND_BR_20220215_CCW\",\"install_time\":\"2022-02-24 08:56:48.264\",\"af_c_id\":\"ss_Mowgrass_AND_BR_20220215_CCW\",\"md5_advertising_id\":\"005bf01cb700afef52ef3fc55d078739\",\"media_source\":\"mintegral_int\",\"af_enc_data\":\"ImzU+ZWL4yIhYIzU5MtJHCLFE\\/RSfzBxXdG3REmMIRH3qP9UihbU8W1XGIyMjr4uLi8XK67V1nOvqz7iQxPykg==\",\"agency\":null,\"ip\":\"177.129.43.138\",\"advertising_id\":\"4d1dc27d-a630-4405-92ba-1a16c2605d72\",\"clickid\":\"mtg620e7368c6da650f7242d34y\",\"af_siteid\":\"mtg1240475928\",\"af_status\":\"Non-organic\",\"af_sub1\":null,\"cost_cents_USD\":\"17\",\"af_ad_id\":\"1802204318\",\"af_sub5\":null,\"af_adset\":\"169_Skin_C_Mowgrass_P_20220121_SYM.mp4\",\"af_sub4\":null,\"af_sub3\":null,\"af_sub2\":null,\"adset_id\":null,\"esp_name\":null,\"af_cost_value\":\"0.17\",\"campaign\":\"Mowgrass_AND_BR_20220215_CCW\",\"http_referrer\":null,\"af_cost_model\":\"cpi\",\"af_ad\":\"169_Skin_C_Mowgrass_P_20220121_SYM.mp4\",\"is_universal_link\":null,\"is_retargeting\":\"false\",\"adgroup\":null}" } */