인앱 라우팅

Overview

When a Branch link is opened, either your app launches or users are taken to the App/Play store to download it. Deep links improve this process by routing users directly to specific content after your app launches. With Branch, this works even if users have to stop and download the app first (a.k.a., "deferred deep links"). Deep links are an incredibly important part of delivering a high-quality user experience.

아래에서 3가지 설정 옵션을 확인하십시오.

  • 옵션 1 : 라우팅 콜백 내에서 커스텀 라우팅 구현하기 - 앱이 실행되면 즉시 라우팅
  • 옵션 2: Branch에서 기존 딥링크(Deep Link) 라우팅을 사용하도록 설정
  • 옵션 3 : Branch의 간편한 설정을 사용하여 딥링크(Deep Link) 라우팅 - 자동 라우팅

🚧

iOS Deferred Deep Linking

With the introduction of iOS 15 and iCloud+ Private Relay, Branch released support for deferred deep linking using NativeLink™

To implement iOS NativeLink™, follow the instructions in our developer documentation.

옵션 1: 라우팅 콜백 내에서 커스텀 라우팅 구현하기

앱이 오픈되면 즉시 라우팅

initSession에 등록한 딥링크(Deep Link) 핸들러 콜백 내에서 전달된 파라미터 사전을 검사하여 유저가 Branch 링크 클릭을 통해 실행했는지 확인할 수 있습니다. 아래는 각 링크마다 서로 다른 사진에 해당된다고 가정한 예시입니다.아래는 pictureId 키를 사용하여 해당사진화면에 라우팅하는 것에 대한 iOS 및 Android 코드 예시입니다.

iOS

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

      // initialize the session, setup a deep link handler
      [[Branch getInstance] initSessionWithLaunchOptions:launchOptions
                              andRegisterDeepLinkHandler:^(NSDictionary *params, NSError *error) {

        // start setting up the view controller hierarchy
        UINavigationController *navC = (UINavigationController *)self.window.rootViewController;
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        UIViewController *nextVC;

        // If the key 'pictureId' is present in the deep link dictionary
        // then load the picture screen with the appropriate picture
        NSString *pictureId = [params objectForKey:@"pictureId"];
        if (pictureId) {
          nextVC = [storyboard instantiateViewControllerWithIdentifier:@"PicVC"];
          [nextVC setNextPictureId:pictureId];
        } else {
          nextVC = [storyboard instantiateViewControllerWithIdentifier:@"MainVC"];
        }

        // navigate!
        [navC setViewControllers:@[nextVC] animated:YES];
      }];

      return YES;
    }

Android

@Override
        public void onStart() {
            super.onStart();

            Branch.sessionBuilder(this).withCallback(new BranchReferralInitListener(){
                @Override
                public void onInitFinished(JSONObject referringParams, Branch.BranchError error) {
                    if (error == null) {
                        // params are the deep linked params associated with the link that the user clicked before showing up
                        // params will be empty if no data found
                        String pictureID = referringParams.optString(""picture_id"", """");
                        if (pictureID.equals("""")) {
                            startActivity(new Intent(this, HomeActivity.class));
                        }
                        else {
                            Intent i = new Intent(this, ViewerActivity.class);
                            i.putExtra(""picture_id"", pictureID);
                            startActivity(i);
                        }
                    } else {
                        Log.e(""MyApp"", error.getMessage());
                    }
                }
            }).withData(this.getIntent().getData()).init();
        }

Branch로 추가된 파라미터

링크 데이터 딕셔너리에 추가된 커스텀 키/값 쌍 외에, Branch에서 매번 세션이 초기화될 때마다 추가로 반환하는 유용한 파라미터도 있습니다. 이러한 파라미터는 유저가 Branch 링크를 클릭하지 않았더라도 세션이 초기화 될 때마다 반환됩니다. 다음은 목록과 각 항목에 대한 설명입니다.

  • ~ 분석을 나타냄
  • + Branch에서 추가한 정보를 나타냅니다.
  • 이 데이터는 Facebook 또는 기타 셀프 어트리뷰팅 네트워크(SAN)을 통한 딥링크에 사용할 수 없습니다.
  • 참고로 $로 시작하는 파라미터는 Branch 서비스의 작동 방식을 제어하는 데 사용되는 제어 파라미터입니다. 제어 파라미터에 대한 자세한 내용은 Configuring Links 페이지를 참조하십시오.

파라미터

의미

+is_first_session

이것이 첫번째 세션 (설치)인지 또는 다른 세션 (재설치, 오픈)인지 표시합니다.

+clicked_branch_link

유저가 이 세션을 시작하는 Branch 링크를 클릭했는지 여부를 표시합니다.

+match_guaranteed

100% 정확도로 매치가 이루어졌는지에 대한 참 또는 거짓입니다.

+referrer

링크를 클릭한 경우 링크 클릭에 대한 리퍼러(Referrer)

+click_timestamp

클릭이 발생한 시점의 타임스탬프 시점

+url

설치/오픈을 유도한 링크의 전체 URL (예: yourapp.app.link/abcde12345)

~channel

링크 생성 시 지정된, 링크가 공유된 채널

~feature

Branch Link 에 설정한 feature 값(예.invite,share)이고 링크 생성 때 지정됩니다.

~tags

링크 생성시 지정한 모든 태그

~campaign

링크 생성 시간에 지정된, 링크와 연관된 캠페인

~creation_source

링크 생성 장소 ( 'API', 'Dashboard', 'SDK', 'iOS SDK', 'Android SDK' 또는 'Web SDK')

~id

설치/열기를 유도한 Branch 링크에 대해 자동으로 생성된 18자리 ID 번호 (동적 및 3P 링크의 경우 0)

나중에 딥링크(Deep Link) 파라미터에 액세스

아래 방법 중 하나를 호출하여 Branch 싱글톤에서 언제든지 딥링크 (Deep Link) 데이터를 검색할 수 있습니다. 이는 유저가 로그인하도록 프롬프트를 표시한 후 유저를 딥링크 (Deep Link)하려는 경우 사용할 경로입니다. 여기에서 다른 플랫폼의 코드 스니펫을 볼 수 있습니다.

가장 최근 세션의 리퍼링(Referring) 파라미터를 가져오기

이는 클릭한 최신 링크의 최신 딥링크(Deep Link) 데이터 세트를 리턴합니다. 앱을 최소화하고 다시 오픈하면 세션과 이 데이터가 지워집니다.

iOS

NSDictionary *params = [[Branch getInstance] getLatestReferringParams];

Android

JSONObject sessionParams = Branch.getInstance().getLatestReferringParams();

첫 세션의 리퍼링(Referring) 파라미터 가져오기

이는 유저를 리퍼드한 첫 번째 딥링크(Deep Link) 데이터 세트를 리턴합니다. 지정된 유저에 대해 설정되면 다시 업데이트할 수 없습니다. 이것은 리퍼럴 프로그램에 유용합니다.

iOS

NSDictionary *params = [[Branch getInstance] getFirstReferringParams];

Android

JSONObject installParams = Branch.getInstance().getFirstReferringParams();

옵션 2: Branch에서 기존 딥링크(Deep Link) 라우팅을 사용하도록 설정

앱이 이미 URI 경로를 사용하여 딥링킹(Deep Linking)을 서포트하는 경우, 앱 내에 표시될 컨텐츠의 URI 경로로 $deeplink_path, $ios_deeplink_path 또는 $android_deeplink_path 링크 파라미터를 채울 수 있습니다. Branch SDK가 이 파라미터 중 하나를 포함하는 링크를 수신하면 지정된 URI 경로를 자동으로 로드합니다.

🚧

iOS에서 불완전한 서포트

Universal Links and Spotlight do not support deep linking via URI paths. If you use $deeplink_path or $ios_deeplink_path, you will need to implement some custom logic. Click here for more information.

Branch 링크에 커스텀 딥링크(Deep Link) 경로를 삽입하는 방법

아래의 모든 예는 앱 실행 후 Branch를 통해 myapp://content/1234를 보여주는 링크를 생성하는 것입니다. $deeplink_path 파라미터 설정 때 URI Scheme을 추가하지 마십시오. 대시보드 Configuration 페이지에 지정된 URI Scheme은 Branch에서 자동으로 추가됩니다.

다이나믹하게 링크를 생성할 경우
쿼리 파라미터를 추가하여 링크를 생성하는 경우 제어 파라미터를 URL에 추가하기만 하면 됩니다. 모든 값을 URL 인코딩하시기 바랍니다.

"https://[branchsubdomain]?%24deeplink_path=content%2F1234"

모바일 SDK를 사용하여 링크를 생성하는 경우

iOS

BranchLinkProperties *linkProperties = [[BranchLinkProperties alloc] init];
linkProperties.feature = @"sharing";
linkProperties.channel = @"facebook";
[linkProperties addControlParam:@"$deeplink_path" withValue:@"content/1234"];

Android

LinkProperties linkProperties = new LinkProperties()
.setChannel("facebook")
.setFeature("sharing")
.addControlParameter("$deeplink_path", "content/1234");

📘

Branch 대시보드에서 Quick Links를 생성할 때

Deep Link Data (고급) 섹션에 해당 키와 값을 삽입하여 개별 Quick Link에 대한 제어 파라미터를 지정할 수 있습니다.

유니버설 링크(Universal Links) 또는 앱 링크(App Links)로 URI 경로를 처리하는 방법

Branch 유니버설 링크(Universal Links), Spotlight 및 Android 앱 링크는 딥링크(Deep Link) 라우팅에 URI Scheme을 사용하지 않습니다. URI 경로로 $deeplink_path, $ios_deeplink_path 또는 $android_deeplink_path를 채울 경우, Branch 링크가 기존 기대에 따라 라우팅되도록 하려면 약간의 추가 작업이 필요합니다.

  1. Branch SDK 세션을 앱 설정 단계에 설명된 것처럼 초기화합니다.
  2. 콜백 함수에서 일부 커스텀 코드를 추가하여 params에서 적절한 $deeplink_path 파라미터를 읽습니다.
  3. 이 값을 사용하여 기존 라우팅 로직을 호출하여 유저를 앱에서 올바른 위치로 라우팅합니다.

옵션 3: Branch의 간편 설정 딥링크(Deep Link) 라우팅 사용

iOS의 자동 라우팅

딥링크(Deep Link)를 받아들이도록 View Controller 설치

유저가 링크를 클릭했을 때 보여줄 View Controller를 오픈합니다. 예를 들어, 이는 제품을 표시하는 view일 수 있습니다. 먼저 Branch Framework를 불러옵니다.

#import "Branch.h"

BranchDeepLinkingController 델리게이트를 위한 View Controller를 등록합니다.

@interface ExampleDeepLinkingController : UIViewController <BranchDeepLinkingController>

링크 클릭을 통해 View Controller가 로딩될 때 호출될 델리게이트 메소드를 받습니다:

@synthesize deepLinkingCompletionDelegate;
    - (void)configureControlWithData:(NSDictionary *)data {
        NSString *pictureUrl = data[@"product_picture"];

        // show the picture
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:pictureUrl]];
            UIImage *image = [UIImage imageWithData:imageData];
            dispatch_async(dispatch_get_main_queue(), ^{
                self.productImageView.image = image;
            });
        });
    }

링크 데이터 키란 무엇입니까?
예시에 나오는 product_picture Key는 클릭된 Branch Link의 data dictionary에 포함된 파라미터이고 링크 생성단계에 설정됩니다.

- (IBAction)closePressed {
    [self.deepLinkingCompletionDelegate deepLinkingControllerCompleted];
}

딥링크(Deep Link) 라우팅을 위한 View Controller 등록

마지막으로, 방금 설정한 view controller와 링크의 데이터 사전에서 사용하고 있는 키를 Branch에 알려야 합니다.

[branch initSessionWithLaunchOptions:launchOptions andRegisterDeepLinkHandler:^(NSDictionary *params, NSError *error) {
        if (!error && params) {
            // params are the deep linked params associated with the link that the user clicked -> was re-directed to this app
            // params will be empty if no data found
            // ... insert custom logic here ...
            print(@"params: %@", params.description);
        }
    }];

이를 제거하고 동일한 위치에 이 스니펫을 삽입하십시오:

ExampleDeepLinkingController *controller = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"DeepLinkingController"];

    [branch registerDeepLinkController:controller forKey:@"product_picture" withPresentation:BNCViewControllerOptionShow];
    [branch initSessionWithLaunchOptions:launchOptions automaticallyDisplayDeepLinkController:YES

이제 데이터 딕셔너리에 product_picture 키가 설정된 Branch Link를 통해 앱을 실행할 때마다 ExampleDeepLinkingController 뷰가 보여집니다.

Option

의미

BNCViewControllerOptionShow

이 옵션은 showViewController와 비슷한 방식으로 View Controller를 navigation stack에 푸시합니다

BNCViewControllerOptionPush

이 옵션은 pushViewController와 비슷한 방식으로 View Controller를 navigation stack에 푸시합니다

BNCViewControllerOptionPresent

이 옵션은 presentViewController와 비슷한 방식으로 윈도우의 root View Controller 에 View Controller 를 보여줍니다

📘

View Controller

BNCViewControllerOptionShow 또는 BNCViewControllerOptionPush 옵션은 윈도우의 root View Controller가 UINavigationViewController 유형인 경우에만 View Controller를 푸시 합니다. 그 외의 경우에는 View Controller가 디폴트로 표시됩니다.

안드로이드의 자동 라우팅

딥링크 (Deep Link)를 받아들이도록 Activity를 설정

유저가 Branch 링크를 클릭했을 때 보여줄 Activity를 오픈합니다. 예를 들어, 제품을 보여주는 Activity일 수 있습니다. Branch 링크 클릭을 통해 Activity가 로드될 때 컨텐츠를 표시하려면 다음 코드 스니펫을 삽입합니다:

@Override
protected void onResume() {
    super.onResume();
    if (Branch.isAutoDeepLinkLaunch(this)) {
        try {
            String autoDeeplinkedValue = Branch.getInstance().getLatestReferringParams().getString("product_picture");
            launch_mode_txt.setText("Launched by Branch on auto deep linking!"
                    + "\n\n" + autoDeeplinkedValue);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    } else {
        launch_mode_txt.setText("Launched by normal application flow");
    }
}

📘

링크 데이터 키란 무엇입니까?

예시에 나오는 product_picture Key는 클릭된 Branch Link의 data dictionary에 포함된 파라미터이고 링크 생성단계에 설정됩니다.

딥링크(Deep Link) 라우팅을 위한 Activity 등록

마지막으로, 방금 설정한 Activity 및 링크의 데이터 사전에서 사용 중인 키를 Branch에 알려야 합니다. Manifest 파일에서 위 Activity에 대한 정의를 찾고 이 메타 데이터 태그를 추가합니다:

<meta-data android:name="io.branch.sdk.auto_link_keys" android:value="product_picture" />

이제 데이터 사전에 product_picture 키 세트가 있는 Branch 링크에서 앱을 실행할 때마다 이 Activity가 표시됩니다!


이 페이지가 도움이 되었습니까?