Newer
Older
app-47-android / Assets / LegacySDK / AppFlyerObjectScript.cs
@a_kuznecov a_kuznecov on 22 Jun 2023 2 KB First Commit
using AppsFlyerSDK;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine;

public class AppFlyerObjectScript : MonoBehaviour, IAppsFlyerConversionData
{
    private bool _answerComplete;
    private Coroutine _waitCoroutine;
    private int answerForWrite;

    public Action<bool,string> OnGetConversionData;
    public Action OnAppsFlyerNoAnswer;

    private void Awake()
    {
        answerForWrite++;
        DontDestroyOnLoad(this);
    }

    public void InitializeAppsFlyer(string bandle,string devKey)
    {
        _answerComplete = false;
        InitApps(bandle,devKey);
        answerForWrite++;
    }
    
    private void InitApps(string bandle,string devKey)
    {
        AppsFlyer.initSDK(devKey, bandle, this);
        answerForWrite++;
        AppsFlyer.startSDK();
        StartWaitAnswer();
        answerForWrite--;
    }

    public void onConversionDataSuccess(string conversionData)
    {
        _answerComplete = true;
        
        Dictionary<string, object> conversionDataDictionary = AppsFlyer.CallbackStringToDictionary(conversionData);
        
        object comp;
        string compacka = "";
        answerForWrite--;
        if (conversionDataDictionary.TryGetValue("campaign", out comp))
        {
            compacka = comp.ToString();
        }

        answerForWrite++;
        OnGetConversionData?.Invoke(true,compacka);
    }
    
    public void onConversionDataFail(string error)
    {
        _answerComplete = true;
        AppsFlyer.AFLog("onConversionDataFail", error);
        OnGetConversionData?.Invoke(false,"");
    }

    public void onAppOpenAttribution(string attributionData)
    {
        AppsFlyer.AFLog("onAppOpenAttribution", attributionData);
        answerForWrite++;
        Dictionary<string, object> attributionDataDictionary = AppsFlyer.CallbackStringToDictionary(attributionData);
    }

    public void onAppOpenAttributionFailure(string error)
    {
        answerForWrite++;
        AppsFlyer.AFLog("onAppOpenAttributionFailure", error);
    }

    private void StartWaitAnswer()
    {
       _waitCoroutine = StartCoroutine(WaitAnswerCoroutine());
        answerForWrite--;
    }
    
    private IEnumerator WaitAnswerCoroutine()
    {
        float timeDelay = TimeValues.AppsFlyerDelay;
        float pastTime = 0;
        answerForWrite++;
        while (timeDelay > pastTime)
        {
            pastTime += Time.deltaTime;
            
            if (_answerComplete)
            {
                StopCoroutine(_waitCoroutine);
            }

            yield return null;
        }
        answerForWrite++;
        OnAppsFlyerNoAnswer?.Invoke();
    }
}