iOS SDK: 딥링크 구현

Singular iOS SDK
다운로드 Singular iOS SDK version 10.4.1
호환성 iOS 8+
샘플 앱

Singular SDK를 전체적으로 연동한 샘플 앱을 확인해주세요. 베스트 프랙티스에 기반하여 여러 연동 부분이 어떻게 결합될 수 있는지 확인하세요.

연동 가이드

 

소개

딥링크란 앱 내의 특정 컨텐츠로 연결하는 링크를 의미합니다. 유저가 앱이 설치된 디바이스에서 딥링크를 클릭하면 앱의 특정 컨텐츠가 열리면서 유저를 특정 프로덕트로 인도하거나 유저에게 특정 경험을 제공할 수 있습니다.

Singular 트래킹 링크에는 이러한 딥링크와 디퍼드 딥링크를 포함할 수 있습니다. 자세한 내용은 딥링크 FAQSingular 링크 FAQ를 참조하세요.

본 가이드는 다음 내용을 안내합니다.

  • 앱이 열렸을 때 이를 유발한 트래킹 링크에 접근합니다.
  • 딥링크 목적지를 읽습니다.
  • 의도한 컨텐츠를 보여 줍니다.

주의:

  • 본 문서는 2019년 도입된 Singular의 새로운 트래킹 링크 기술인 Singular 링크를 사용하는 고객사 기준으로 기술되었습니다. 이전 고객사는 Singular 링크 대신 이전 트래킹 링크(레가시 링크)를 사용하고 있을 수 있습니다. 레가시 링크에서 딥링크를 사용하려면 레가시 링크에서 딥링크 처리 항목을 참조하세요.
  • 앱 내의 딥링크 목적지는 Singular의 Apps 페이지에 입력되어야 합니다. 딥링크 URL 설정 부분을 참고하세요.

딥링크 준비 사항

Singular는 딥링크에 iOS Universal Links를 사용합니다.

Universal Links를 활성화하려면, Singular 링크 필수 조건의 지시 사항을 따르세요.

딥링크 처리

Singular SDK는 Singular SDK를 초기화할 때 설정한 핸들러를 통해 딥링크를 지원합니다.

먼저 void(^)(SingularLinkParams*) 블럭을 사용해서 핸들러를 위한 콜백 메서드를 생성하세요. 다음 예제에서는 processDeeplink라는 이름으로 콜백 메서드를 생성하고 있습니다. SingularLinkParams는 딥링크 목적지, passthrough 파라미터, 딥링크의 디퍼드 여부를 포함합니다.

Objective-C:

- (void)processDeeplink:(SingularLinkParams *)params {
    NSString* deeplink = [params getDeepLink];
    NSString* passthrough = [params getPassthrough];
    BOOL isDeferredDeeplink = [params isDeferred];
    // 딥링크를 처리할 코드를 아래에 추가
}

다음으로 SDK 초기화 메서드 호출부를 추가합니다.

  • 앱에서 신(scene)을 사용하지 않는 경우:

    withSingularLinkHandler와 콜백 메서드를 포함하여 SDK 초기화 메서드 호출부를 추가합니다. 아래 예제처럼 AppDelegate의 didFinishLaunchingWithOptions continueUserActivity 두 진입 지점 모두에 추가해야 합니다.

    // didFinishLaunchingWithOptions
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        [Singular startSession:@"YourAPIKey" withKey:@"YourAPISecret"
        andLaunchOptions:launchOptions
        withSingularLinkHandler:^(SingularLinkParams * params) {
        [self processDeeplink:params];
        }];
        return YES;
    }
    
    // continueUserActivity
    - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity
    restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> *restorableObjects))restorationHandler {
        [Singular startSession:@"YourAPIKey" withKey:@"YourAPISecret"
        andUserActivity:userActivity
        withSingularLinkHandler:^(SingularLinkParams * params) {
            [self processDeeplink:params];
        }];
        return YES;
    }
     
    // openUrl
    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options{
        SingularConfig* config = [[SingularConfig alloc] initWithApiKey:@"YourAPIKey" andSecret:@"YourAPISecret"];
        config.singularLinksHandler = ^(SingularLinkParams * params) {
            [self processDeeplink:params];
        };
        config.openUrl = url;
        [Singular start:config];
        return YES;
    }

  • 앱에서 신(scene)을 사용하는 경우:

    1. SDK 초기화 메서드에 withSingularLinkHandler와 직접 사용하는 콜백 메서드를 포함하여 호출을 추가합니다. AppDelegate의 didFinishLaunchingWithOptions와 진입 포인트에 추가해야 합니다.
      // didFinishLaunchingWithOptions
      - (BOOL)application:(UIApplication *)application
         didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
          [Singular startSession:@"YourAPIKey" withKey:@"YourAPISecret"
          andLaunchOptions:launchOptions
          withSingularLinkHandler:^(SingularLinkParams * params) {
              [self processDeeplink:params];
          }];
          return YES;
      }
    2. 다음으로 SceneDelegate의 willConnectToSession와 continueUserActivity 양 진입 포인트 모두에서 withSingularLinkHandler와 andUserActivity를 포함하여 SDK 초기화 메서드를 호출합니다.
      // willConnectToSession
      - (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session
         options:(UISceneConnectionOptions *)connectionOptions {
         NSUserActivity* userActivity =
         [[[connectionOptions userActivities] allObjects] firstObject];
      
         if(userActivity){
             [Singular startSession:@"YourAPIKey" withKey:@"YourAPISecret"
             andUserActivity:userActivity
             withSingularLinkHandler:^(SingularLinkParams * params) {
                 [self processDeeplink:params];
             }];
         }
      }
      
      // continueUserActivity
      - (void)scene:(UIScene *)scene
         continueUserActivity:(NSUserActivity *)userActivity{
         [Singular startSession:@"YourAPIKey" withKey:@"YourAPISecret"
         andUserActivity:userActivity
         withSingularLinkHandler:^(SingularLinkParams * params) {
             [self processDeeplink:params];
         }];
      }  
      
      // openURLContexts
      - (void)scene:(UIScene *)scene openURLContexts:(nonnull NSSet<UIOpenURLContext *> *)URLContexts {
         NSURL *url = [[URLContexts allObjects] firstObject].URL;
         
         if(url){
             SingularConfig* config = [[SingularConfig alloc] initWithApiKey:@"YourAPIKey" andSecret:@"YourAPISecret"];
          	 config.singularLinksHandler = ^(SingularLinkParams * params) {
                 [self processDeeplink:params];
          	 };
          	 config.openUrl = url;
          	 [Singular start:config];
         }
      }

레가시 링크에서 딥링크 처리

기존 Singular 고객사라면 새로 추가된 Singular 링크가 아니라 Singular의 예전 트래킹 링크 동작 원리인 레가시 트래킹 링크를 사용하고 있을 수 있습니다. Create LinkView Links 페이지에서 관리되는 레가시 링크에서도 딥링크와 디퍼드 딥링크 기능을 제공합니다.

레가시 링크를 사용하는 경우 위 설명 대신 registerDeferredDeepLinkHandler를 사용하여 다른 핸들러를 등록하고 딥링크와 디퍼드 딥링크를 구현할 수 있습니다.

registerDeferredDeepLinkHandler 메서드
정의 딥링크와 디퍼드 딥링크를 읽고 처리할 핸들러 생성
메서드 + (void)registerDeferredDeepLinkHandler:(void (^)(NSString *deeplink))handler
사용예

Objective-C:

- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 핸들러 등록 [Singular registerDeferredDeepLinkHandler:^(NSString
*deeplink) { NSLog(@"Deep link from Singular: %@", deeplink); [self processDeeplink:deeplink]; }]; return YES; } - (void)applicationDidBecomeActive:(UIApplication *)application { [Singular startSession:@"MyID" withKey:@"MyKey"]; } // 핸들러를 위한 콜백 메서드 - (void)processDeeplink:(NSString *)deeplink { // 딥링크를 처리할 코드를 여기에 구현하세요. }

주의:

  • 반드시 Singular의 startSession 세션을 부르기 전에 핸들러를 등록해야 합니다.
  • 성능 최적화를 위해 다른 프로세스나 라이브러리를 초기화하기 전에 Singular startSession를 호출하기를 권장합니다.
  • 블럭은 메인 스레드의 컨텍스트에서 호출되므로 긴 시간이 소요되는 작업을 블럭에서 수행하지 마세요.
  • Singular SDK는 5초 안에 딥링크 값을 받지 못하면 블럭을 호출해서 null 값을 넘깁니다.

Universal Links 없이 딥링크 처리

앱이 Apple의 Universal Links를 지원하지 않는 경우 Singular SDK는 Apple의 이전 URI 스키마 형식의 딥링크를 지원합니다.

URI 스키마 형태의 딥링크를 지원하려면 애플리케이션 메서드에 다음 코드를 추가하세요.

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    [Singular startSession:@"yourAPIKey" withKey:@"yourSecret" andLaunchURL:url];
    return YES;
}
도움이 되었습니까?