Firebase Console에서 이미 Dynamic Link가 생성되었다는 가정하에 iOS에서 적용하는 방법을 알아보자


1. Pod Install

Cocoa Pods를 생성한적이 없다면

터미널에서 프로젝트 위치로 가서

$ pod init

프로젝트 폴더에 생성된 Podfile 을 텍스트 편집기로 열어주고

# Pods for {프로젝트 이름}
	pod 'FirebaseDynamicLinks'

FirebaseDynamicLinks를 추가해주고

$ pod install --repo-update

다시 터미널로 돌아와서 설치해주면 된다

새로 생성된 {프로젝트 이름}.xcworkspace 로 프로젝트를 Open 해주자


2. Xcode 설정

'Signing & Capabilities' 탭에서 Associated Domains를 추가해주고

예시로 생성된 Domain을 아래 형식처럼 수정해준다

applinks:{'https://'를 제외한 Domain 값}

3. AppDelegate / SceneDelegate

// AppDelegate.swift

import FirebaseDynamicLinks

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    .
    .
    .
    
    // DynamicLink 수신
    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        let handled = DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { dynamiclink, error in
            if let urlString = dynamiclink?.url?.absoluteString {
                print(urlString)
            }
        }
        return handled
    }
    
    // 앱이 Running 상태가 아닐 때 수신
    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
            if let urlString = dynamicLink.url?.absoluteString {
                print(urlString)
                return true
            }
        }
        
        .
        .
        .
    }
}
// SceneDelegate.swift

import FirebaseDynamicLinks

@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    .
    .
    .
    
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    
        .
        .
        .
        
        // 앱이 Running 상태가 아닐 때 수신
        if let userActivity = connectionOptions.userActivities.first {
            self.scene(scene, continue: userActivity)
        }
    }
    
    // DynamicLink 수신
    func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
        if let incomingURL = userActivity.webpageURL {
            DynamicLinks.dynamicLinks().handleUniversalLink(incomingURL) { dynamiclink, error in
                if let urlString = dynamiclink?.url?.absoluteString {
                    print(urlString)
                }
            }
        }
    }
}
profile
iOS Study Note

0개의 댓글