Firebase Console에서 이미 Dynamic Link가 생성되었다는 가정하에 iOS에서 적용하는 방법을 알아보자
Cocoa Pods를 생성한적이 없다면
터미널에서 프로젝트 위치로 가서
$ pod init
프로젝트 폴더에 생성된 Podfile 을 텍스트 편집기로 열어주고
# Pods for {프로젝트 이름}
pod 'FirebaseDynamicLinks'
FirebaseDynamicLinks를 추가해주고
$ pod install --repo-update
다시 터미널로 돌아와서 설치해주면 된다
새로 생성된 {프로젝트 이름}.xcworkspace 로 프로젝트를 Open 해주자
'Signing & Capabilities' 탭에서 Associated Domains를 추가해주고
예시로 생성된 Domain을 아래 형식처럼 수정해준다
applinks:{'https://'를 제외한 Domain 값}
// 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)
}
}
}
}
}