Wrapper

ЦСль

Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ€Π°ΠΏΠΏΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹ осущСствлял доставку ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Π² прилоТСния с Ρ€Π΅ΠΊΠ»Π°ΠΌΠΎΠΉ, ΠΈ Π±Ρ‹Π» Π±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ Π² большом количСствС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ².

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ

  • ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ copy/paste ΠΈΠ· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. ΠœΡ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π² Π½Π΅Π³ΠΎ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния, ΠΏΠΎΠΌΠΈΠΌΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π²Ρ‹Π·ΠΎΠ²Π° Π±Π΅ΠΊΠ΅Π½Π΄Π° ΠΈΠ»ΠΈ порядок Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².
  • Ρ€Π°Π·ΠΌΠ΅Ρ€, для нас Π²Π°ΠΆΠ΅Π½ малСнький Ρ€Π°Π·ΠΌΠ΅Ρ€ прилоТСния. Π§Π΅ΠΌ ΠΎΠ½ мСньшС, Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅.

Flows

User stories

New user, organic, pass check

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠœΠ°Ρ€ΠΊΠ΅Ρ‚Π΅ минуя Ρ€Π΅ΠΊΠ»Π°ΠΌΠ½ΡƒΡŽ ссылку, устанавливаСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’Π½ΡƒΡ‚Ρ€ΠΈ прилоТСния ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ статус organic. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° IP Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π· Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹, Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π²ΠΈΠ΄ΠΈΡ‚ Ρ€Π΅ΠΊΠ»Π°ΠΌΡƒ.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠœΠ°Ρ€ΠΊΠ΅Ρ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅ΠΊΠ»Π°ΠΌΠ½ΡƒΡŽ ссылку, устанавливаСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π•Π³ΠΎ ip матчится с Π±Π°Π·ΠΎΠΉ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ½Ρ‹Ρ… ссылок. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° IP Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π· Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹, Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π²ΠΈΠ΄ΠΈΡ‚ Ρ€Π΅ΠΊΠ»Π°ΠΌΡƒ согласно Π΄Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ Ρ‚Ρ€Π΅ΠΊΠ° Ρ€Π΅ΠΊΠ»Π°ΠΌΠ½ΠΎΠΉ ссылки.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠœΠ°Ρ€ΠΊΠ΅Ρ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅ΠΊΠ»Π°ΠΌΠ½ΡƒΡŽ ссылку, устанавливаСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π•Π³ΠΎ ip НЕ матчится с Π±Π°Π·ΠΎΠΉ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ². ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° IP Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π· Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹. ΠœΡ‹ ΠΆΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ события β€” ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ± Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ Π»ΠΈΠ±ΠΎ 5 сСкунд. Π”Π΅Π»Π°Π΅ΠΌ запрос Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΊΠ»ΠΌΠ°Π½ΠΎΠΉ ссылки ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Ρ€Π΅ΠΊΠ»Π°ΠΌΡƒ (согласно Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Ρ„ΠΎΠ»Π±Π΅ΠΊ)

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠœΠ°Ρ€ΠΊΠ΅Ρ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅ΠΊΠ»Π°ΠΌΠ½ΡƒΡŽ ссылку, устанавливаСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π•Π³ΠΎ ip матчится с Π±Π°Π·ΠΎΠΉ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ½Ρ‹Ρ… ссылок. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° IP НЕ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π· Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹, Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π²ΠΈΠ΄ΠΈΡ‚ ΠΈΠ³Ρ€Ρƒ.

New user, organic, not pass check

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠœΠ°Ρ€ΠΊΠ΅Ρ‚Π΅ минуя Ρ€Π΅ΠΊΠ»Π°ΠΌΠ½ΡƒΡŽ ссылку, устанавливаСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’Π½ΡƒΡ‚Ρ€ΠΈ прилоТСния ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ статус organic. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° IP НЕ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π· Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹, Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π²ΠΈΠ΄ΠΈΡ‚ ΠΈΠ³Ρ€Ρƒ.

Если Ρƒ нас ΡƒΠΆΠ΅ Ρ€Π°Π½Π΅Π΅ Π±Ρ‹Π» ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΡƒΡ€Π», Ρ‚ΠΎ нСзависимо ΠΎΡ‚ ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра ΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ сохранСнный ΡƒΡ€Π», ΠΈ ΡƒΠΆΠ΅ послС ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡŽ Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄.

Если Ρƒ нас Ρ€Π°Π½Π΅Π΅ Π½Π΅ Π±Ρ‹Π» ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΡƒΡ€Π» Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹, Ρ‚ΠΎ ΠΌΡ‹ выполняСм запрос Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ, ΠΈ Ссли запрос Π½Π΅ ΡƒΡΠΏΠ΅ΡˆΠ΅Π½ Ρ‚ΠΎ ΠΏΠΎ ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΈΠ³Ρ€Ρƒ.

Если Ρƒ нас Ρ€Π°Π½Π΅Π΅ Π½Π΅ Π±Ρ‹Π» ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΡƒΡ€Π» Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹, Ρ‚ΠΎ ΠΌΡ‹ выполняСм запрос Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ, ΠΈ Ссли запрос ΡƒΡΠΏΠ΅ΡˆΠ΅Π½ Ρ‚ΠΎ ΠΏΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ ссылку с Ρ€Π΅ΠΊΠ»Π°ΠΌΠΎΠΉ.

SDK ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ

НСобходимо ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ

ΠŸΡ€ΠΈ этом appsflyer Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ deeplinks (ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ΠΈ permission для Π°Π½Π΄Ρ€ΠΎΠΈΠ΄Π°)

ΠΠ°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ appsflyer ΠΈ FCM (Ρ‚Ρ€Π΅ΠΊΠΊΠΈΠ½Π³ удалСния прилоТСния) Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Π’Π°ΠΆΠ½ΠΎ: всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ получСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ (ΠΈ старыС ΠΈ Π½ΠΎΠ²Ρ‹Π΅) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹

Запрос permissions Π½Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ ΠΏΡƒΡˆΠ΅ΠΉ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ сразу ΠΏΡ€ΠΈ стартС прилоТСния. ΠžΡ‚ΠΊΠ°Π· ΠΎΡ‚ Π²Ρ‹Π΄Π°Ρ‡ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запуск прилоТСния.

Π’Π°ΠΆΠ½ΠΎ: ΠΌΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ части Firebase ΠΊΡ€ΠΎΠΌΠ΅ CloudMessaging (экономим мСсто)

Запрос Π½Π° IDFA Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ сразу ΠΏΡ€ΠΈ стартС прилоТСния.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° запуск Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹

Π£ нас Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ шага ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° запуск Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠΎ ip ΠΏΡ€ΠΈ запускС

ΠœΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ запрос Π½Π° /sendAttribution со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° {"action": "launch"}. Если Π² ΠΎΡ‚Π²Π΅Ρ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π΅ΠΊΠ»Π°ΠΌΡƒ, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ. Если ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ {"action":"none"}, Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅. Π’ ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ timeout, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт сколько ΠΆΠ΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Π° для получСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ.

Если это ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ запуск прилоТСния ΠΌΡ‹ добавляСм ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€: launchNo: 1. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ Π½Π° 1 ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запускС прилоТСния.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ

ΠœΡ‹ выполняСм ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ· Π΄Π²ΡƒΡ… условий: Π»ΠΈΠ±ΠΎ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎ Π΄Π²Π° события ΠΎΠ± Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ ΠΎΡ‚ appsflyer, Π»ΠΈΠ±ΠΎ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ с ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ этапа.

Если ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π» timeout, ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ запрос Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹ с {"action": "timeout"}

Если Ρ€Π°Π½Π΅Π΅ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ, ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ запрос Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹ с {"action": "attribution"}

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ запоздавшСй Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ

Если атрибуция ΠΏΡ€ΠΈΡˆΠ»Π° послС события timeout, Ρ‚ΠΎ ΠΌΡ‹ отправляСм Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ запрос, с action: "late_attribution". ΠŸΡ€ΠΈ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π’Π°ΠΆΠ½ΠΎ: url api ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ вынСсСн Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³.

POST /sendAttribution

{
  "data": {
	installConversionData: {...}, // appsflyer
	appOpenAttribution: {...}, // appsflyer
	deepLinking: {...} // appsflyer
	},
  "appsflyerid": "1690...", // ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ appsflyer id
  "appsflyer_app_id": "com.bigfishbonansa.app", // appsflyer app id
  "imei": "IMEI not available due to new Android/iOS policies", // imei, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любая строка
  "idfa": "354AFFB6-5943-409D-8033-45FEF24C51AD", // "not iOS 14+", // idfa
  "idfv": "343ea5f8-ee87-525d-cbe3-2b7bcbe45b88", //
  "att": -1,
  "customer_user_id": "uuid", // Ρƒ нас Π½Π΅Ρ‚ ΠΈΠ΄ устройств, поэтоу это наш ΠΈΠ΄ инсталяции, просто uuid сохранСнный Π² appdata, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π½Π΅ мСнялся ΠΏΡ€ΠΈ пСрСзапускС
  "app_version_name": "1.0.1", // вСрсия нашСго Π±ΠΈΠ»Π΄Π°
  "app_store": "com.apple", // источник установки
  "bundleIdentifier": "com.bigfishbonansa.app",, // id прилоТСния Π² сторС для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ прилоТСния
  "aie": false,
  "network_connection_type": "wifi", // mobile5G|mobile4G|mobile3G|otherMobile
  "battery_level": "58%",
  "device": {
    "device_dpr": 3,
    "device_width": 1170,
    "device_height": 2532,
    "model": "iPhone",
    "os_name": "iOS",
    "version": "17.5.1",
    "manufacture": "apple",
    "device_uuid": "2CEE1E8C-F463-459E-BD9F-A7D665E0C72D"
  },
  "fcmid": "dwreerd", // token to send firebase notifications
  "apple_id": "not iOS",
  "apple_id_prefix": "not iOS",
  "ads_url": "https://offer.com", // last url from attribution api
  "current_locale": "en_US",
  "action": "launch", // "launch"|"timeout"|"attribution"|"late_attribution",
  "last_url": "https://offer.com/deposit", // last visited url
  "launchNo": 1, // it is 1 for first launch, and more in next ones
}

Π’ ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ†Π΅Π»Π΅Π²ΠΎΠΌ дСйствии:

{"action": "none", "timeout": 5000}

Π’ этом случаСм ΠΌΡ‹ запускаСм ΠΈΠ³Ρ€Ρƒ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ запрос с ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ максимум Ρ‡Π΅Ρ€Π΅Π· 5 сСкунд. ПолС "timeout" Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, Ссли ΠΎΠ½ΠΎ отсутствуСт β€” ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 5000. Π»ΠΈΠ±ΠΎ:

{
  "action": "redirect",
  "payload": "https://offer.com", // ΠΊΡƒΠ΄Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
  "preservSettings": true, // ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΡƒΡ€Π»
  "resetSettings": true, // ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ настройки
  "timeout": 5000 // этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ‚ΡƒΡ‚ Π½Π΅ обязатСлСн, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ
}

Π’ этом случаС: ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π° Ρ€Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ webview Π½Π° вСсь экран с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ ΡƒΡ€Π». ΠžΠΏΡ†ΠΈΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ webview Π½Π΅ прСдусмотрСнно.

  • preservSettings: Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сохраняСм послСдний ΡƒΡ€Π» Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ прилоТСния.
  • resetSettings: сбрасываСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡƒΡ€Π» Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ payload

Π’Π°ΠΆΠ½ΠΎ: Ссли ΠΊΡ€Π°Ρ‚ΠΊΠΎ, Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ payload, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, Ссли Π½Π΅ ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΎΡ‚Π²Π΅Ρ‚ resetSettings. ΠŸΡ€ΠΈ этом ΠΌΡ‹ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ старый ΠΎΡ„Ρ„Π΅Ρ€.

Π’Π°ΠΆΠ½ΠΎ: Ссли Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Ρ€Π΅ΠΊΠ»Π°ΠΌΠ½Ρ‹ΠΉ ΡƒΡ€Π», ΠΈ послС этого ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΎΡ‚Π²Π΅Ρ‚ {"action":"none"}, Ρ‚ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹ Π½Π΅ происходит, ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π½Π΅Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ настройки

Π’Π°ΠΆΠ½ΠΎ: Ссли Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» {"action":"none"}, Π° послС этого ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Ρ€Π΅ΠΊΠ»ΠΌΠ°Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ρ‚ΠΎ ΠΎΠ½Π° пСрСопрСдСляСт Ρ€Π°Π½Π΅Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ none

preservSettings and preservUrl

Π Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ сохраняСм Π½Π° ΠΊΠ°ΠΊΠΎΠΉ страницС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ» взаимодСйствиС. Π­Ρ‚ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ preservUrl настройку ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· прилоТСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΡ€ΠΈ стартС прилоТСния Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ Π½Π΅ "ads_url" ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π½Π΅Π΅, Π° last_url, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ» взаимодСйствиС.

resetSettings

ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ значСния true ΡΠ±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΈ настройки preservSettings ΠΈ всС сохранСнныС Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡƒΡ€Π» (ads_url, last_url)

launchNo

Π’ этом ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ€ запуска прилоТСния. Π‘Ρ‡Π΅Ρ‚ начинаСтся с 1. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ запуск ΠΎΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ….

flow

Cases

first launch

  • "ads_url": "",
  • "action": "launch",
  • "last_url": ""
  • "launchNo": 1

first launch, attribution

  • "ads_url": "", // will hav url, if we got ads on first launch
  • "action": "attribution",
  • "last_url": ""
  • "launchNo": 1

second launch, not activated

  • "ads_url": "",
  • "action": "launch",
  • "last_url": ""
  • "launchNo": 3

second launch, attribution, not activated

  • "ads_url": "",
  • "action": "attribution",
  • "last_url": ""
  • "launchNo": 4

second launch, activated

second launch, attribution, activated