275 lines
8.6 KiB
C#
275 lines
8.6 KiB
C#
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using System.Threading.Tasks;
|
||
using AdjustSdk;
|
||
using ThinkingData.Analytics;
|
||
using UnityEngine;
|
||
using WZ;
|
||
|
||
public class AdjustManager : D_MonoSingleton<AdjustManager>
|
||
{
|
||
private AdjustEnvironment environment = AdjustEnvironment.Production;
|
||
|
||
private long startTime = 0;
|
||
private string Adid;
|
||
private string Gdid;
|
||
private string callbackNetwork = "";
|
||
bool m_start = false;
|
||
private int callGetTimes = 0;
|
||
private string _adjustNetwork = "_adjustNetwork";
|
||
private string _adjustCampaign = "_adjustCampaign";
|
||
private string _adjustAdgroup = "_adjustAdgroup";
|
||
private string _adjustCreative = "_adjustCreative";
|
||
private string _adjustClickLabel = "_adjustClickLabel";
|
||
|
||
public void Init()
|
||
{
|
||
//开始计时
|
||
startTime = TimeUtils.GetLocalTimestamp();
|
||
Adjust.AddGlobalCallbackParameter("ta_distinct_id", TDAnalytics.GetDistinctId());
|
||
|
||
Adjust.AddGlobalCallbackParameter("rush_version", RushSDKManager.GetSDKVersion());
|
||
Adjust.AddGlobalPartnerParameter("rush_version", RushSDKManager.GetSDKVersion());
|
||
|
||
AdjustConfig config = new AdjustConfig(StaticValue.AdjustToken, environment);
|
||
|
||
// 设置归因变更回调函数
|
||
config.AttributionChangedDelegate = AttributionChangedDelegate;
|
||
|
||
// (可选)设置其他配置,如日志级别
|
||
config.LogLevel = AdjustLogLevel.Verbose;
|
||
|
||
// 初始化Adjust SDK
|
||
Adjust.InitSdk(config);
|
||
|
||
//id
|
||
LoadAdid();
|
||
LoadGaid();
|
||
|
||
ShuShuEvent.Instance.Track("adjust_init");
|
||
FireBaseAnalyticsManager.Instance.LogEvent("adjust_init");
|
||
Adjust.GetAdid((id) =>
|
||
{
|
||
ShuShuEvent.Instance.SetSuperProperties(new Dictionary<string, object>() { { "adid", id } });
|
||
ShuShuEvent.Instance.UserSet(new Dictionary<string, object>() { { "adid", id } });
|
||
});
|
||
|
||
var network = GetAdjustNetwork();
|
||
|
||
LoggerUtils.Debug("初始化adjust network:"+network);
|
||
|
||
if (!string.IsNullOrEmpty(network))
|
||
{
|
||
RushSDKManager.Instance.OnUserSourceListener?.Invoke(IsOrganic(network), network);
|
||
}
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 归因信息
|
||
/// </summary>
|
||
/// <param name="attribution"></param>
|
||
private void AttributionChangedDelegate(AdjustAttribution attribution)
|
||
{
|
||
Debug.Log("Attribution changed network: " + attribution.Network + " campaign: " + attribution.Campaign + " adgroup: " + attribution.Adgroup + " creative: " + attribution.Creative);
|
||
SetAttributionData(attribution);
|
||
if (m_start) return;
|
||
m_start = true;
|
||
callbackNetwork = attribution.Network;
|
||
if (IsOrganic(attribution.Network) == false)
|
||
{
|
||
OnReceiveCallback(attribution);
|
||
RushSDKManager.Instance.LogEvent("adjust_Get_Promote","network_name",attribution.Network);
|
||
return;
|
||
}
|
||
InvokeRepeating(nameof(CallGetAttributionAsync), 0, 1);
|
||
}
|
||
|
||
private void SetAttributionData(AdjustAttribution att)
|
||
{
|
||
var network = att.Network;
|
||
if(string.IsNullOrEmpty(network)) network = "Organic";
|
||
PlayerPrefsUtils.SavePlayerPrefsString(_adjustNetwork, network);
|
||
PlayerPrefsUtils.SavePlayerPrefsString(_adjustCampaign, att?.Campaign);
|
||
PlayerPrefsUtils.SavePlayerPrefsString(_adjustAdgroup, att?.Adgroup);
|
||
PlayerPrefsUtils.SavePlayerPrefsString(_adjustCreative, att?.Creative);
|
||
PlayerPrefsUtils.SavePlayerPrefsString(_adjustClickLabel, att?.ClickLabel);
|
||
}
|
||
|
||
private async Task CallGetAttributionAsync()
|
||
{
|
||
callGetTimes++;
|
||
|
||
AdjustAttribution attribute = await GetAttributionAsync();
|
||
LoggerUtils.Debug("[adjust] adjust CallGetAttribution callGetTimes : " + callGetTimes + " attinfo:" + attribute.Network + " clicklabel:" + attribute.ClickLabel);
|
||
if (attribute != null)
|
||
{
|
||
LoggerUtils.Debug("[adjust] adjust 重试次数 : " + callGetTimes + ", attribute : " + attribute.Network + ", callbackNetwork : " + callbackNetwork);
|
||
if (attribute.Network.Equals(callbackNetwork) == false)
|
||
{
|
||
CancelInvoke(nameof(CallGetAttributionAsync));
|
||
OnReceiveCallback(attribute);
|
||
RushSDKManager.Instance.LogEvent("adjust_Get_Promote","network_name",attribute.Network);
|
||
}
|
||
}
|
||
|
||
if (callGetTimes >= 20)
|
||
{
|
||
if (attribute != null)
|
||
{
|
||
OnReceiveCallback(attribute);
|
||
}
|
||
else
|
||
{
|
||
OnReceiveCallback(null);
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
public static Task<AdjustAttribution> GetAttributionAsync()
|
||
{
|
||
var tcs = new TaskCompletionSource<AdjustAttribution>();
|
||
|
||
Adjust.GetAttribution(attribution =>
|
||
{
|
||
try
|
||
{
|
||
tcs.TrySetResult(attribution);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
tcs.TrySetException(ex);
|
||
}
|
||
});
|
||
|
||
return tcs.Task;
|
||
}
|
||
|
||
private void OnReceiveCallback(AdjustAttribution attribution)
|
||
{
|
||
CancelInvoke(nameof(CallGetAttributionAsync));
|
||
string campaign = "";
|
||
string adgroup = "";
|
||
string creative = "";
|
||
string network = "";
|
||
|
||
if (attribution != null)
|
||
{
|
||
campaign = attribution.Campaign;
|
||
adgroup = attribution.Adgroup;
|
||
creative = attribution.Creative;
|
||
|
||
if (!string.IsNullOrEmpty(attribution.Network))
|
||
{
|
||
network = attribution.Network;
|
||
}
|
||
else
|
||
{
|
||
network = "Organic";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
network = "Organic";
|
||
}
|
||
|
||
RushSDKManager.Instance.OnUserSourceListener?.Invoke(IsOrganic(network), network);
|
||
PlayerPrefsUtils.SavePlayerPrefsString(_adjustNetwork, network);
|
||
PlayerPrefsUtils.SavePlayerPrefsString(_adjustCampaign, campaign);
|
||
PlayerPrefsUtils.SavePlayerPrefsString(_adjustAdgroup, adgroup);
|
||
PlayerPrefsUtils.SavePlayerPrefsString(_adjustCreative, creative);
|
||
PlayerPrefsUtils.SavePlayerPrefsString(_adjustClickLabel, attribution?.ClickLabel);
|
||
|
||
network = network.Length > 30 ? network.Substring(0, 30) : network;
|
||
campaign = campaign.Length > 30 ? campaign.Substring(0, 30) : campaign;
|
||
adgroup = adgroup.Length > 30 ? adgroup.Substring(0, 30) : adgroup;
|
||
creative = creative.Length > 30 ? creative.Substring(0, 30) : creative;
|
||
|
||
RushSDKManager.Instance.SetUserProperties(new Dictionary<string, object>
|
||
{
|
||
{ "user_network", network ?? "" },
|
||
{ "user_campaign", campaign ?? "" },
|
||
{ "user_adgroup", adgroup ?? "" },
|
||
{ "user_creative", creative ?? "" },
|
||
{ "store_channel", "xiaomi" },
|
||
});
|
||
|
||
RushSDKManager.Instance.SetSuperProperties(new Dictionary<string, object>
|
||
{
|
||
{ "user_network", network ?? "" },
|
||
{ "user_campaign", campaign ?? "" },
|
||
{ "user_adgroup", adgroup ?? "" },
|
||
{ "user_creative", creative ?? "" },
|
||
{ "store_channel", "xiaomi" },
|
||
});
|
||
AdjustNetwork.Instance.LogEventGetSuccess();
|
||
RushSDKManager.Instance.LogEvent("adjust_Get_Type_"+network);
|
||
}
|
||
|
||
public string GetAdjustNetwork()
|
||
{
|
||
return PlayerPrefsUtils.GetPlayerPrefsString(_adjustNetwork);
|
||
}
|
||
|
||
public string GetAdjustCampaign()
|
||
{
|
||
return PlayerPrefsUtils.GetPlayerPrefsString(_adjustCampaign);
|
||
}
|
||
|
||
public string GetAdjustAdgroup()
|
||
{
|
||
return PlayerPrefsUtils.GetPlayerPrefsString(_adjustAdgroup);
|
||
}
|
||
|
||
public string GetAdjustCreative()
|
||
{
|
||
return PlayerPrefsUtils.GetPlayerPrefsString(_adjustCreative);
|
||
}
|
||
|
||
public string GetAdjustClickLabel()
|
||
{
|
||
return PlayerPrefsUtils.GetPlayerPrefsString(_adjustClickLabel);
|
||
}
|
||
|
||
public bool IsOrganic(string _network)
|
||
{
|
||
if (string.IsNullOrEmpty(_network) || _network.Equals("Organic") || _network.Equals("Untrusted Devices"))
|
||
{
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
public long GetStartTime()
|
||
{
|
||
return startTime;
|
||
}
|
||
|
||
private void LoadGaid()
|
||
{
|
||
Adjust.GetGoogleAdId(googleAdId => {
|
||
Gdid = googleAdId;
|
||
});
|
||
}
|
||
|
||
public string GetGdid()
|
||
{
|
||
return Gdid;
|
||
}
|
||
|
||
private void LoadAdid()
|
||
{
|
||
Adjust.GetAdid(adid =>
|
||
{
|
||
Adid = adid;
|
||
});
|
||
}
|
||
|
||
public string GetAdid()
|
||
{
|
||
return Adid;
|
||
}
|
||
}
|