콘솔로 이동

iOS에서 동적 링크 만들기

Firebase Dynamic Links Builder API를 사용하여 짧거나 긴 동적 링크를 만들 수 있습니다. 이 API는 긴 동적 링크 또는 동적 링크 매개변수가 들어 있는 객체를 취하며 다음 예와 같은 URL을 반환합니다.

https://example.com/link/WXYZ
https://example.page.link/WXYZ

기본 요건

Firebase 동적 링크를 사용하려면 iOS 8 이상이 필요합니다. 앱에서 iOS 7을 타겟팅해도 되지만 Firebase 동적 링크 SDK 호출은 iOS 8 이상을 실행하는 앱에서만 작동합니다.

Firebase 및 동적 링크 SDK 설정

  1. iOS 프로젝트에 Firebase를 추가합니다. Podfile에 다음 pod를 포함합니다.
    pod 'Firebase/Analytics'
    pod 'Firebase/DynamicLinks'    
  2. pod install을 실행하고 생성된 .xcworkspace 파일을 엽니다.
  3. Firebase Console에서 동적 링크 섹션을 엽니다.
  4. 아직 서비스 약관에 동의하지 않았고 동적 링크의 URI 프리픽스도 설정하지 않았다면 관련 메시지가 표시될 때 동의하고 설정합니다.

    동적 링크 URI 프리픽스가 이미 있다면 기록해 둡니다. 프로그래매틱 방식으로 동적 링크를 만들 때 이 프리픽스를 입력해야 합니다.

  5. 권장: 딥 링크 및 대체 링크에 허용되는 URL 패턴을 지정합니다. 이렇게 하면 승인되지 않은 사용자가 내 도메인에서 내가 제어하지 않는 사이트로 리디렉션되는 동적 링크를 만드는 것을 막을 수 있습니다. URL 패턴 허용을 참조하세요.
  6. 앱 설정에서 앱의 App Store ID 및 앱 ID 프리픽스를 지정합니다. 앱 설정을 확인하고 수정하려면 Firebase 프로젝트의 설정 페이지로 이동하고 iOS 앱을 선택합니다.

    동적 링크 도메인에서 호스팅되는 apple-app-site-association 파일을 열어 iOS 앱에서 동적 링크를 사용할 수 있도록 Firebase 프로젝트가 올바르게 구성되었는지 확인합니다. 예를 들면 다음과 같습니다.

    https://example.com/apple-app-site-association

    앱이 연결되면 apple-app-site-association 파일에 앱의 App Store ID 및 번들 ID에 대한 참조가 포함됩니다. 예를 들면 다음과 같습니다.

    {"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["/*"]}]}}

    details 속성이 비어 있는 경우 앱 ID 프리픽스를 지정했는지 확인해 보세요. 앱 ID 프리픽스와 팀 ID가 같지 않을 수도 있습니다.

앱에 Firebase 추가

  1. UIApplicationDelegate에서 Firebase 모듈을 가져옵니다.

    Swift

    import Firebase

    Objective-C

    @import Firebase;
  2. 일반적으로 앱의 application:didFinishLaunchingWithOptions: 메소드에서 FirebaseApp 공유 인스턴스를 구성합니다.

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];

Firebase Console 사용

테스트를 하거나 마케팅팀에서 소셜 미디어 게시물 등에 사용할 수 있는 링크를 쉽게 만들 수 있도록 동적 링크 1개를 생성하려고 할 때 가장 간단한 방법은 Firebase 콘솔로 이동하여 단계별 양식에 따라 직접 만드는 것입니다.

iOS Builder API 사용

iOS Builder API를 사용하여 매개변수에서 동적 링크를 빌드하거나 긴 동적 링크를 축약할 수 있습니다.

매개변수로 동적 링크 만들기

동적 링크를 만들려면 새 DynamicLinkComponents 객체를 만들고 객체의 해당 속성을 설정하여 동적 링크 매개변수를 지정합니다. 그런 다음 객체의 url 속성에서 긴 링크를 가져오거나 shorten()을 호출하여 짧은 링크를 가져옵니다.

다음은 iOS의 경우 iOS 앱, Android의 경우 com.example.android 앱에서 열리는 https://www.example.com/my-page의 긴 동적 링크를 만드는 간단한 예제입니다.

Swift

guard let link = URL(string: "https://www.example.com/my-page") else { return }
let dynamicLinksDomainURIPrefix = "https://example.com/link"
let linkBuilder = DynamicLinkComponents(link: link, domainURIPrefix: dynamicLinksDomainURIPRefix)
linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.example.ios")
linkBuilder.androidParameters = DynamicLinkAndroidParameters(packageName: "com.example.android")

guard let longDynamicLink = linkBuilder.url else { return }
print("The long URL is: \(longDynamicLink)")

Objective-C

NSURL *link = [[NSURL alloc] initWithString:@"https://www.example.com/my-page"];
NSString *dynamicLinksDomainURIPrefix = @"https://example.com/link";
FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc]
                                         initWithLink:link
                                               domainURIPrefix:dynamicLinksDomainURIPrefix];
linkBuilder.iOSParameters = [[FIRDynamicLinkIOSParameters alloc]
                             initWithBundleID:@"com.example.ios"];
linkBuilder.androidParameters = [[FIRDynamicLinkAndroidParameters alloc]
                                 initWithPackageName:@"com.example.android"];

NSLog(@"The long URL is: %@", linkBuilder.url);

짧은 동적 링크를 만들려면 같은 방법으로 DynamicLinkComponents를 빌드한 후 shorten()을 호출합니다.

짧은 링크를 작성하려면 네트워크 호출이 필요하므로 shorten()은 링크를 직접 반환하는 대신 요청이 완료될 때 호출되는 완료 핸들러를 취합니다. 예를 들면 다음과 같습니다.

Swift

linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

Objective-C

[linkBuilder shortenWithCompletion:^(NSURL * _Nullable shortURL,
                                     NSArray<NSString *> * _Nullable warnings,
                                     NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];
      

기본적으로 짧은 동적 링크는 17자 링크 접미사와 함께 생성되어 누군가가 유효한 동적 링크를 추측하는 것이 거의 불가능합니다. 누군가가 짧은 링크를 추측해도 괜찮다면 고유성을 위해 꼭 필요한 만큼의 길이로 접미사를 만드는 것이 좋을 수 있으며, dynamicLinkComponentsOptions 속성을 설정하면 됩니다.

Swift

linkBuilder.dynamicLinkComponentsOptions = DynamicLinkComponentsOptions()
linkBuilder.dynamicLinkComponentsOptions.pathLength = .short
linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

Objective-C

linkBuilder.dynamicLinkComponentsOptions = [[FIRDynamicLinkComponentsOptions alloc] init];
linkBuilder.dynamicLinkComponentsOptions.pathLength = FIRShortDynamicLinkPathLengthShort;
[linkBuilder shortenWithCompletion:^(NSURL * _Nullable shortURL,
                                     NSArray<NSString *> * _Nullable warnings,
                                     NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];
      

동적 링크 매개변수

Dynamic Link Builder API를 사용하여 지원되는 매개변수와 함께 동적 링크를 만들 수 있습니다. 자세한 내용은 API 참조를 확인하세요.

다음 예에서는 일반적인 몇 가지 매개변수를 설정하여 동적 링크를 만듭니다.

Swift

guard let link = URL(string: "https://www.example.com/my-page") else { return }
let dynamicLinksDomainURIPrefix = "https://example.com/link"
let linkBuilder = DynamicLinkComponents(link: link, domainURIPRefix: dynamicLinksDomainURIPrefix)

linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.example.ios")
linkBuilder.iOSParameters.appStoreID = "123456789"
linkBuilder.iOSParameters.minimumAppVersion = "1.2.3"

linkBuilder.androidParameters = DynamicLinkAndroidParameters(packageName: "com.example.android")
linkBuilder.androidParameters.minimumVersion = 123

linkBuilder.analyticsParameters = DynamicLinkGoogleAnalyticsParameters(source: "orkut",
                                                                       medium: "social",
                                                                       campaign: "example-promo")

linkBuilder.iTunesConnectParameters = DynamicLinkItunesConnectAnalyticsParameters()
linkBuilder.iTunesConnectParameters.providerToken = "123456"
linkBuilder.iTunesConnectParameters.campaignToken = "example-promo"

linkBuilder.socialMetaTagParameters = DynamicLinkSocialMetaTagParameters()
linkBuilder.socialMetaTagParameters.title = "Example of a Dynamic Link"
linkBuilder.socialMetaTagParameters.descriptionText = "This link works whether the app is installed or not!"
linkBuilder.socialMetaTagParameters.imageURL = "https://www.example.com/my-image.jpg"

guard let longDynamicLink = linkBuilder.url else { return }
print("The long URL is: \(longDynamicLink)")

Objective-C

NSURL *link = [[NSURL alloc] initWithString:@"https://www.example.com/my-page"];
NSString *dynamicLinksDomainURIPrefix = @"https://example.com/link";
FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc]
                                         initWithLink:link
                                         domainURIPrefix:dynamicLinksDomainURIPrefix];

linkBuilder.iOSParameters = [[FIRDynamicLinkIOSParameters alloc]
                             initWithBundleID:@"com.example.ios"];
linkBuilder.iOSParameters.appStoreID = @"123456789";
linkBuilder.iOSParameters.minimumAppVersion = @"1.2.3";

linkBuilder.androidParameters = [[FIRDynamicLinkAndroidParameters alloc]
                                 initWithPackageName:@"com.example.android"];
linkBuilder.androidParameters.minimumVersion = 123;

linkBuilder.analyticsParameters = [[FIRDynamicLinkGoogleAnalyticsParameters alloc]
                                   initWithSource:@"orkut"
                                           medium:@"social"
                                         campaign:@"example-promo"];

linkBuilder.iTunesConnectParameters = [[FIRDynamicLinkItunesConnectAnalyticsParameters alloc] init];
linkBuilder.iTunesConnectParameters.providerToken = @"123456";
linkBuilder.iTunesConnectParameters.campaignToken = @"example-promo";

linkBuilder.socialMetaTagParameters = [[FIRDynamicLinkSocialMetaTagParameters alloc] init];
linkBuilder.socialMetaTagParameters.title = @"Example of a Dynamic Link";
linkBuilder.socialMetaTagParameters.descriptionText = @"This link works whether the app is installed or not!";
linkBuilder.socialMetaTagParameters.imageURL = @"https://www.example.com/my-image.jpg";

NSLog(@"The long URL is: %@", linkBuilder.url);

다음과 같은 객체 및 속성으로 동적 링크 매개변수를 설정할 수 있습니다.

DynamicLinkComponents
link

앱에서 열리는 링크입니다. 앱이 처리할 수 있는 URL(일반적으로 앱의 콘텐츠 또는 페이로드)을 지정할 수 있으며, 이를 통해 사용자에게 쿠폰을 지급하거나 시작 화면을 표시하는 등 앱의 특정 로직을 시작할 수 있습니다. 이 링크는 올바른 형식의 URL이어야 하며, 적절한 URL 인코딩을 적용해야 합니다. HTTP 또는 HTTPS를 사용해야 하며 다른 동적 링크가 아니어야 합니다.

domainURIPrefix 동적 링크 URL 프리픽스로서 Firebase 콘솔에서 확인할 수 있습니다. 동적 링크 도메인 형식은 다음 예와 같습니다.

https://example.com/link
https://example.page.link
DynamicLinkAndroidParameters
fallbackURL 앱이 설치되지 않았을 때 열리는 링크입니다. 앱이 설치되지 않았을 때 Play 스토어에서 앱을 설치하는 것 이외에 콘텐츠의 모바일 웹 버전 열기, 앱 홍보 페이지 표시 등의 다른 작업을 수행하려면 이 매개변수를 지정합니다.
minimumVersion 링크를 열 수 있는 앱 최소 버전의 versionCode입니다. 설치된 앱이 오래된 버전이라면 앱을 업그레이드하기 위해 Play 스토어로 이동합니다.
DynamicLinkIOSParameters
appStoreID 앱이 설치되지 않은 경우 사용자를 App Store로 보내는 데 사용되는 앱의 App Store ID입니다.
fallbackURL 앱이 설치되지 않았을 때 열리는 링크입니다. 앱이 설치되지 않았을 때 App Store에서 앱을 설치하는 것 이외에 콘텐츠의 모바일 웹 버전 열기, 앱 홍보 페이지 표시 등의 다른 작업을 수행하려는 경우 이 매개변수를 지정합니다.
customScheme 앱의 번들 ID와 다른 값으로 정의하면 앱의 맞춤 URL 스키마로 사용됩니다.
iPadFallbackURL 앱이 설치되지 않은 경우 iPad에서 열리는 링크입니다. 앱이 설치되지 않았을 때 App Store에서 앱을 설치하는 것 이외에 콘텐츠의 웹 버전 열기, 앱 홍보 페이지 표시 등의 다른 작업을 수행하려면 이 매개변수를 지정합니다.
iPadBundleID iPad에서 링크를 여는 데 사용할 iOS 앱의 번들 ID입니다. Firebase 콘솔의 개요 페이지에서 앱을 프로젝트에 연결해야 합니다.
minimumAppVersion 링크를 열 수 있는 앱 최소 버전의 버전 번호입니다. 이 플래그는 앱이 열렸을 때 앱에 전달되며 앱에서 수행할 작업을 결정해야 합니다.
DynamicLinkNavigationInfoParameters
forcedRedirectEnabled '1'로 설정하는 경우, 동적 링크가 열리면 앱 미리보기 페이지를 건너뛰고 앱 또는 스토어로 리디렉션합니다. 기본적으로 사용 설정되는 앱 미리보기 페이지는 앱에서 동적 링크를 연 사용자를 가장 적절한 목적지로 더 안정적으로 안내할 수 있지만, 이 페이지 없이 동적 링크를 안정적으로 열 수 있는 앱에서만 동적 링크가 열리게 설정하고 싶다면 이 매개변수를 사용하여 리디렉션을 중지할 수 있습니다. 참고: 앱 미리보기 페이지는 현재 iOS에만 표시되지만 이후에 Android에도 표시될 수 있습니다. 이 매개변수는 양쪽 플랫폼에서 동적 링크의 동작에 영향을 미칩니다.
DynamicLinkSocialMetaTagParameters
title 소셜 게시물에서 동적 링크를 공유할 때 사용되는 제목입니다.
descriptionText 소셜 게시물에서 동적 링크를 공유할 때 사용되는 설명입니다.
imageURL 이 링크와 관련된 이미지의 URL입니다. 이미지는 300x200픽셀 이상, 300KB 미만이어야 합니다.
DynamicLinkGoogleAnalyticsParameters
source
medium
campaign
term
content
Google Play 애널리틱스 매개변수입니다. 이러한 매개변수 (utm_source, utm_medium, utm_campaign, utm_term, utm_content)는 Play 스토어에 전달될 뿐 아니라 링크 페이로드에도 추가됩니다.
DynamicLinkItunesConnectAnalyticsParameters
providerToken
affiliateToken
campaignToken
iTunes Connect 애널리틱스 매개변수입니다. 이러한 매개변수(pt, at, ct)는 App Store로 전달됩니다.

긴 동적 링크 축약

긴 동적 링크를 단축할 때 짧은 접미사가 있는 링크를 만들려면 긴 동적 링크를 DynamicLinkComponentsOptions 객체와 함께 shortenURL(url:options:)로 전달합니다.

Swift

DynamicLinkComponents.shortenURL(url: longLinkUrl, options: nil) { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

Objective-C

[FIRDynamicLinkComponents shortenURL:longLinkUrl
                             options:nil
                          completion:^(NSURL * _Nullable shortURL,
                                       NSArray<NSString *> * _Nullable warnings,
                                       NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];

동적 링크에 대한 맞춤 URL 스키마 지정

기본적으로 동적 링크는 앱의 번들 식별자를 애플리케이션을 여는 데 필요한 URL 스키마로 사용합니다. 구현이 간단해지도록 이 기본값을 그대로 두는 것이 좋습니다.

하지만 이미 다른 목적으로 맞춤 URL 스키마를 사용하는 개발자는 동적 링크에도 동일한 맞춤 URL 스키마를 사용할 수 있습니다. 이러한 경우에 해당한다면 다음 단계에 따라 Firebase 동적 링크에 다른 URL 스키마를 지정할 수 있습니다.

  1. 앱을 설정할 때 FirebaseApp 공유 인스턴스를 구성하기 전에 애플리케이션에서 사용할 기본 URL 스키마를 지정해야 합니다.

    Swift

    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
      // Set deepLinkURLScheme to the custom URL scheme you defined in your
      // Xcode project.
      FirebaseOptions.defaultOptions()?.deepLinkURLScheme = self.customURLScheme
      FirebaseApp.configure()
    
      return true
    }

    Objective-C

    - (BOOL)application:(UIApplication *)application
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Set deepLinkURLScheme to the custom URL scheme you defined in your
      // Xcode project.
      [FIROptions defaultOptions].deepLinkURLScheme = CUSTOM_URL_SCHEME;
      [FIRApp configure];
    
      return YES;
    }
  2. 동적 링크를 만들 때마다 앱에서 사용하는 맞춤 URL 스키마를 지정해야 합니다. Builder API에 customScheme을 설정하거나, URL에 ius 매개변수를 지정하거나, REST API에 iosCustomScheme 매개변수를 전송하여 Firebase 콘솔을 통해 지정할 수 있습니다.

다음 단계

이제 동적 링크를 만들었으므로 앱에서 동적 링크를 수신하고 링크를 연 사용자를 앱의 적절한 위치로 안내하도록 설정해야 합니다.

앱에서 동적 링크를 수신하는 방법은 iOS, Android, C++, Unity 관련 문서를 참조하세요.