티스토리 뷰

"" Firebase 동적 링크는 앱 설치 여부에 관계없이 여러 플랫폼에서 원하는 대로 작동하는 링크입니다. ""

 

앱이 설치되어 있다면 앱이 실행이 되고, 앱이 설치되어 있지 않았다면 앱스토어나 특정 URL로 가는 액션을 할 수 있다. 

하지만 우리가 하고싶어 하는 것은 단순히 앱을 켜는것 그 이상의 액션들이다.

 

[공식 문서]

https://firebase.google.com/docs/dynamic-links?hl=ko 

 

링크 생성하기

링크 생성에는 크게 두가지 방법이 있다. 

1. 파이어베이스 콘솔에서 생성하기

  * Firebase 콘솔에서 링크를 생성하는건 대부분 특정 유저에게 보내거나 유동적인 데이터가 아니라 이벤트, 공지사항 같은 전체에게 보내거나 인스타그램, 페이스북 같은 곳에 광고용 링크를 만들기 위해 주로 사용된다. 

 

2. iOS 앱에서 생성하기

  * iOS 앱에서 링크를 생성하는 이유는 추천인 보상을 위해 링크 공유 시 사용자 고유 값을 함께 지정해서 보내기 위함이거나, 네이버 지도와 같이 특정 위치에 대한 정보를 공유하거나, 쇼핑몰에서 특정 상품 정보를 공유하는 등 사용자가 다른 사람에게 정보를 공유하기 위해 주로 사용된다.

 

 func createDynamicLink() {
    let link = URL(string: "https://리다이렉트URL/?category=food&productId=10")
    let referralLink = DynamicLinkComponents(link: link!, domainURIPrefix: "URL 프리픽스")
        
    // iOS 설정
    referralLink?.iOSParameters = DynamicLinkIOSParameters(bundleID: "앱 번들 ID")
    referralLink?.iOSParameters?.minimumAppVersion = "1.0.0"
    referralLink?.iOSParameters?.appStoreID = "1111111111"
    referralLink?.iOSParameters?.customScheme = "커스텀 스키마가 설정되어 있을 경우 추가"
        
    // Android 설정
    referralLink?.androidParameters = DynamicLinkAndroidParameters(packageName: "안드로이드 패키지 네임")
    referralLink?.androidParameters?.minimumVersion = 1
        
    // 단축 URL 생성
    referralLink?.shorten { (shortURL, warnings, error) in
        if let error = error {
            print(error.localizedDescription)
            return
        }
            
        print(shortURL)
        self.sendSMS(dynamicLink: shortURL)
    }
}

 

Dynamic Link에서 데이터 받아오기

생성된 링크를 클릭 했을 때 앱에서 데이터를 받아오는 액션이다!!

 

Associated Domains에 원하는 도메인 추가하기

일단 XCode의 Signing & Capablities 탭에서

 

Associated Domains 필드를 채워줘야 한다. https://는 빼고 도메인만 적어주면 된다. 

 

<key>FirebaseDynamicLinksCustomDomains</key>
<array>
  <string>URL 프리픽스</string>
</array>

 

파이어베이스 동적 링크 페이지에서 URL prefix 눌러서 볼 수 있다. 

 

 

"""만약에 사용하는 URL 프리픽스가 test.domain.com인데 리다이렉트 할 URL은 www.domain.com을 사용하는 중이라면 Associated Domains에 www.domain.com도 추가를 해주어야 데이터를 받을 수 있습니다. """

 

이런식으로 해주면 된다.

[출처] https://swieeft.github.io/2020/09/02/DynamicLinkGetQueryData.html

Info.plist에 커스텀 도메인 추가하기

Info.plist의 FirebaseDynamicLinksCustomDomains에 url 배열을 추가해준다. 

 

 

AppDelegate에 콜백 메서드 만들기

 

 

@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any]) -> Bool {
  return application(app, open: url,
                     sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,
                     annotation: "")
}

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
  if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
    // Handle the deep link. For example, show the deep-linked content or
    // apply a promotional offer to the user's account.
    // ...
    return true
  }
  return false
}

  func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    guard let weburl = URL(string: userActivity.webpageURL?.absoluteString.removingPercentEncoding ?? "") else {
      return false
    }

    let handled = DynamicLinks.dynamicLinks().handleUniversalLink(weburl) { dynamicLink, error in
      print("dynamicLink : \(dynamicLink?.url?.absoluteString ?? "")")
      if dynamicLink != nil, !(error != nil) {
        self.handleDynamicLink(dynamicLink)
      }
    }

    return handled
  }

Link에서 데이터 받기

 

콜백 메서드로 들어온 DynamicLink에서 데이터를 빼내는 메서드를 만들어준다.

@discardableResult
func handleDynamicLink(_ dynamicLink: DynamicLink?) -> Bool {
    guard let dynamicLink = dynamicLink, let deepLink = dynamicLink.url else {
        return false
    }

    let queryItems = URLComponents(url: deepLink, resolvingAgainstBaseURL: true)?.queryItems

    let category = queryItems?.filter({$0.name == "category"}).first?.value
    let productId = queryItems?.filter({$0.name == "productId"}).first?.value

    print("category : \(category ?? "")")
    print("productId : \(productId ?? "")")

    return true
}

 

카카오톡 미리보기에서 잘 보이게 만들기

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"

이거 해줘야 프리뷰에서도 잘 뜬다!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함