using System.Collections.Generic; using Amanotes.TripleSDK.Core.Configuration; using Amanotes.TripleSDK.Core; using UnityEngine; using AppsFlyerSDK; namespace Amanotes.TripleSDK.Appsflyer { [ServiceConfiguration(Name = "appsflyer", Type = typeof(AppsflyerConfiguration))] public abstract class AppsflyerService : MonoBehaviour, IAppsflyerService, IStartup, IAppsFlyerConversionData { public AppsflyerConfiguration configuration; public ServiceStatus ServiceStatus { get; protected set; } public bool IsInitialized { get; protected set; } public virtual void LogEvent(string eventName) { Dictionary param = new Dictionary(); param["af_count"] = "1"; AppsFlyer.sendEvent(eventName, param); } public virtual void LogEvent(string eventName, Dictionary param) { var param2 = new Dictionary(); foreach (var k in param.Keys) { if (param[k] != null) { param2[k] = param[k].ToString(); } } AppsFlyer.sendEvent(eventName, param2); } public virtual void Startup() { // Custom workflow - set config from code var config = AppsflyerConfiguration.customConfig; if (config != null) { Development.Log($"Use custom Appsflyer config: devKey=<{config.devKey}> appId=<{config.appId}>"); Init(config.devKey, config.appId); ServiceStatus = ServiceStatus.Available; Bootstrap.Instance.OnServiceUpdate(this); return; } // Normal workflow - using scriptable object as config this.configuration = Bootstrap.Instance.GetRequiredService() .GetConfiguration(); if(configuration != null) { Init(configuration.devKey, configuration.appId); ServiceStatus = ServiceStatus.Available; } else { ServiceStatus = ServiceStatus.Unvailable; Debug.LogError("Appsflyer initializing is failed. Configuration not found."); } Bootstrap.Instance.OnServiceUpdate(this); } public abstract void Init(string devKey, string appId); public abstract void AppsFlyerTrackerCallbacks(); virtual public ServiceStatus GetStatus() { return ServiceStatus; } public void onConversionDataSuccess(string conversionData) { AppsFlyer.AFLog("onConversionDataSuccess", conversionData); Dictionary conversionDataDictionary = AppsFlyer.CallbackStringToDictionary(conversionData); // add deferred deeplink logic here } public void onConversionDataFail(string error) { AppsFlyer.AFLog("onConversionDataFail", error); } public void onAppOpenAttribution(string conversionData) { AppsFlyer.AFLog("onConversionDataSuccess", conversionData); Dictionary conversionDataDictionary = AppsFlyer.CallbackStringToDictionary(conversionData); // add deferred deeplink logic here } public void onAppOpenAttributionFailure(string error) { AppsFlyer.AFLog("onAppOpenAttributionFailure", error); } } }