Appsflyer asyn c инициализация и сопрограммы - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь получить данные об атрибуции с помощью Appsflyer. Я последовал их рекомендации по инициализации sdk внутри метода Application onCreate().

    override fun onCreate() {
        super.onCreate()

        if (FirstLaunchChecker().isFirst(this)) {
            checkInstall()
        }
    }

Перед инициализацией sdk мне нужно собрать некоторые пользовательские данные, что занимает некоторое время. (SystemInfo.init())

object SystemInfo {
    //fields
    suspend fun init(context: Context) {
        withContext(Dispatchers.Default) {
            //do stuff
        }
    }
}

Если я сделаю это так, ни один из AppsFlyerConversionListener обратных вызовов не будет вызван. И в журнале ничего нет после

D / AppsFlyer_5.2.0: Инициализация SDK AppsFlyer: (v5.2.0.311)

    fun checkInstall() {
        GlobalScope.launch {
            SystemInfo.init(applicationContext)

            withContext(Dispatchers.Main) {
                appsFlyerManager = AppsFlyerManager()
                appsFlyerManager!!.check(applicationContext)
            }
        }
    }

Но если я это сделаю вот так все работает

    fun checkInstall() {
        GlobalScope.launch {
            SystemInfo.init(applicationContext)
        }
        Thread.sleep(3000)
        appsFlyerManager = AppsFlyerManager()
        appsFlyerManager!!.check(applicationContext)
    }

Журнал, когда все инициализируется должным образом: https://pastebin.com/DusV4MtA

AppsflyerManager.check():

    fun check(context: Context) {
        val attributionCallback = context as AttributionCallback
        val conversionListener = ConversionListener(attributionCallback)
        AppsFlyerLib.getInstance().init(AF_DEV_KEY, conversionListener, context)
        AppsFlyerLib.getInstance().startTracking(context)
    }

My Тестовое устройство занесено в белый список. Каждый раз, когда я тестирую, я удаляю приложение> нажимаю на ссылку appsflyer> debug

Как отложить инициализацию appsflyer до завершения инициализации SystemInfo? Также я действительно не хочу избавляться от сопрограмм

1 Ответ

0 голосов
/ 23 апреля 2020

Вызовите AppsFlyerLib.getInstance().init() в классе приложения и AppsFlyerLib.getInstance().startTracking(activity) в классе действия с экземпляром действия. Или оба в классе активности, чтобы убедиться, что init вызывается раньше startTracking

Кроме того, посмотрите этот проект о задержке инициализации AppsFlyer https://github.com/afdima/background-initialiaztion

...