๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS

[iOS/Swift] Dynamic Link ์ •๋ฆฌ

by ํ‹ด๋”” 2023. 3. 8.
728x90
๋ฐ˜์‘ํ˜•
 

๋กœ๊ทธ์ธ - Google ๊ณ„์ •

์ด๋ฉ”์ผ ๋˜๋Š” ํœด๋Œ€์ „ํ™”

accounts.google.com

Firebase >  ์ฝ˜์†”๋กœ ์ด๋™ > ํ”„๋กœ์ ํŠธ ์„ ํƒ > ๋ชจ๋“  ์ œํ’ˆ > Dynamic Links

์‹œ์ž‘ํ•˜๊ธฐ ๋ฒ„ํŠผ ์„ ํƒ

 

์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๋„๋ฉ”์ธ ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ์ž…๋ ฅํ•˜๋ฉด Google์—์„œ ์ œ๊ณตํ•˜๋Š” ๋„๋ฉ”์ธ ๋ชฉ๋ก์ด ๋œธ

๊ตฌ๊ธ€์—์„œ ์ œ๊ณตํ•˜๋Š” ๋„๋ฉ”์ธ์„ ์„ ํƒํ•˜๊ณ  ๊ณ„์† ๋ฒ„ํŠผ์„ ๋ˆ„๋ฆ„

(๊ตฌ๊ธ€์—์„œ ์ œ๊ณตํ•˜๋Š” ๋„๋ฉ”์ธ์€ xxx.page.link)

 

์ด๋ฏธ ๋“ฑ๋ก๋œ ์ด๋ฆ„์€ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ

์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋„๋ฉ”์ธ์ธ ๊ฒฝ์šฐ ์™„๋ฃŒ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ

 

์ƒˆ ๋™์  ๋งํฌ ๋ฒ„ํŠผ ํด๋ฆญ

๋‹จ์ถ• URL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ๋งํฌ๋ฅผ ์ง€์ •ํ•จ

์ž„์˜๋กœ ์ง€์ •๋˜๋Š” URL์„ ์‚ฌ์šฉํ•˜๋ฉด ๋จ

url ํ”„๋ฆฌํ”ฝ์Šค + ibi์— ๋ฒˆ๋“ค ์•„์ด๋””๋ฅผ ์ ์–ด์คŒ

 

ํ‘ธ์‹œ ์„ค์ • ํ–ˆ๋‹ค๋ฉด team ID๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ์Œ

App store id๋ฅผ ์ž…๋ ฅํ•˜๋ฉด

์•ฑ์ด ์„ค์น˜ ์•ˆ๋˜์–ด ์žˆ์„ ์‹œ ์•ฑ ์Šคํ† ์–ด๋กœ ์ด๋™๋จ

๋งŒ๋“ค๊ธฐ ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ์„œ ๋“ฑ๋ก ์™„๋ฃŒ ์‹œํ‚ค๊ธฐ

apple developer ์—์„œ Identifier ๋“ค์–ด๊ฐ„ ๋’ค Capabilities์—์„œ Associated Domains ์„ค์ •

 

Associated Domains ์—์„œ

applinks:ํ”„๋ฆฌํ”ฝ์Šค

์ง€์ •ํ•ด ์คŒ ์˜ˆ๋ฅผ ๋“ค์–ด ํŒŒ์ด์–ด๋ฒ ์ด์Šค์—์„œ dittotest.page.link์˜€๋‹ค๋ฉด applinks:dittotest.page.link

 

 


import FirebaseDynamicLinks

FirebaseDynamicLinks ์ž„ํฌํŠธ

์•ฑ์ด ์‹คํ–‰ ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    if let userActivity = connectionOptions.userActivities.first {
        self.scene(scene, continue: userActivity)
    }
}

willConnectTo์—์„œ connectionOptions.userActivities.first ๋กœ dynamic link ์ ‘๊ทผ ๊ฐ€๋Šฅ

 

๋‹ค์ด๋‚˜๋ฏน ๋งํฌ ์ˆ˜์‹ 

    func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
        guard let incomingURL = userActivity.webpageURL else { return }
        
        let linkHandled = DynamicLinks.dynamicLinks().handleUniversalLink(incomingURL) { dynamicLinks, error in
            
            guard let url = dynamicLinks?.url else { return }

        }
        
    }

 

๊ณต์œ ํ•˜๊ธฐ ๋งํฌ ์ƒ์„ฑ์‹œ

let dynamicLink = "https:/{ํ”„๋ฆฌํ”ฝ์Šค}/?apn={AOS ๋ฒˆ๋“ค ์•„์ด๋””}&ibi={iOS ๋ฒˆ๋“ค ์•„์ด๋””}&isi={Apple Store ID}&link=https://{ํ”„๋ฆฌํ”ฝ์Šค}/{์•ฑ์—์„œ ์‚ฌ์šฉํ•  ๋”ฅ๋งํฌ}&ofl={์—ฐ๊ฒฐํ•  ์›นํŽ˜์ด์ง€}"

์•ฑ์ด ์„ค์น˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์•ฑ์Šคํ† ์–ด๋กœ ์ด๋™

iOS์—์„œ ํ•ด๋‹น ๋งํฌ๋ฅผ ์—ฐ ๊ฒฝ์šฐ ์•ฑ์ด ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด apple store , ์•ฑ์ด ์„ค์น˜๋˜์–ด ์žˆ์œผ๋ฉด ์•ฑ์œผ๋กœ ์ด๋™ํ•ด ๋”ฅ๋งํฌ๋ฅผ ์ „๋‹ฌ ํ•  ์ˆ˜ ์žˆ์Œ

AOS์—์„œ ํ•ด๋‹น ๋งํฌ๋ฅผ ์—ฐ ๊ฒฝ์šฐ ์•ฑ์ด ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด  Play Store, ์•ฑ์ด ์„ค์น˜๋˜์–ด ์žˆ์œผ๋ฉด ์•ฑ์œผ๋กœ ์ด๋™ํ•ด ๋”ฅ๋งํฌ ์ „๋‹ฌ

๋ฐ์Šคํฌํ†ฑ ํ™˜๊ฒฝ์—์„œ ํ•ด๋‹น ๋งํฌ ์—ฐ ๊ฒฝ์šฐ ์›นํŽ˜์ด์ง€๋กœ ์ด๋™

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€