Unified Deep Linking (UDL)

Сценарий UDL

  1. SDK запускается следующим образом:
    • Отложенный диплинкинг — посредством отдельного API.
    • Прямой диплинкинг — запускается ОС посредством Android App Link, универсальных ссылок iOS или схемы URI.
  2. The SDK triggers the OnDeepLink и передает объект с результатом диплинкинга пользователю.
  3. The OnDeepLink использует объект результата диплинка, который включает deep_link_value и другие параметры для создания персонализированного пользовательского интерфейса, что является основной целью OneLink.

Ознакомьтесь с документацией по унифицированному диплинкингу для Android и iOS.

Факторы, которые необходимо учитывать

  • Требует использовать SDK AppsFlyer для Android версии 6.1.3 или выше.
  • Не поддерживает кампании SRN.
  • For new users, the UDL method only returns parameters relevant to deferred deep linking: deep_link_value and deep_link_sub1-10. Если вы пробуете получить другие параметры (media_source, campaign, af_sub1-5 и т.д.), они возвращают null.
  • onAppOpenAttribution не вызывается. Все коды должны перейти на OnDeepLink.
  • OnDeepLink необходимо вызвать после initSDK.
  • AppsFlyer.cs необходимо прикрепить к игровому объекту.

Реализация

  1. Прикрепите скрипт AppsFlyer.cs к игровому объекту при помощи кода инициализации AppsFlyer. (AppsFlyerObject)
  2. Call initSDK with the this parameter in order for the OnDeepLinkReceived callback to be invoked:
    AppsFlyer.initSDK("devkey", "appID", this);
    
  3. Назначьте OnDeepLink to AppsFlyer.OnDeepLinkReceived в полезной нагрузке Start()
     AppsFlyer.OnDeepLinkReceived += OnDeepLink;
    
  4. После initSDK() внедрите OnDeepLink.

Пример

using AppsFlyerSDK;

public class AppsFlyerObjectScript : MonoBehaviour
{
  void Start()
  {
    AppsFlyer.initSDK("devkey", "appID", this);
    AppsFlyer.OnDeepLinkReceived += OnDeepLink;
    AppsFlyer.startSDK();
  }
  
  void OnDeepLink(object sender, EventArgs args)
  {
      var deepLinkEventArgs = args as DeepLinkEventsArgs;

      switch (deepLinkEventArgs.status)
      {
          case DeepLinkStatus.FOUND:

              if (deepLinkEventArgs.isDeferred())
              {
                  AppsFlyer.AFLog("OnDeepLink", "This is a deferred deep link");
              }
              else
              {
                  AppsFlyer.AFLog("OnDeepLink", "This is a direct deep link");
              }
              
              // deepLinkParamsDictionary contains all the deep link parameters as keys
              Dictionary<string, object> deepLinkParamsDictionary = null;
      #if UNITY_IOS && !UNITY_EDITOR
              if (deepLinkEventArgs.deepLink.ContainsKey("click_event") && deepLinkEventArgs.deepLink["click_event"] != null)
              {
                  deepLinkParamsDictionary = deepLinkEventArgs.deepLink["click_event"] as Dictionary<string, object>;
              }
      #elif UNITY_ANDROID && !UNITY_EDITOR
                  deepLinkParamsDictionary = deepLinkEventArgs.deepLink;
      #endif

              break;
          case DeepLinkStatus.NOT_FOUND:
              AppsFlyer.AFLog("OnDeepLink", "Deep link not found");
              break;
          default:
              AppsFlyer.AFLog("OnDeepLink", "Deep link error");
              break;
      }
  }
}