본문 바로가기
iOS/iOS

Firebase DynamicLinks

by 패쓰킴 2022. 4. 1.
728x90

웹페이지에서 앱으로 전환 할 때

단순히 앱을 실행시키거나

앱 내의 특정 화면으로 바로 이동할 수 있게해주는 기능인

유니버셜 링크(안드로이드에서는 딥링크)의 기능을 좀 더 확장하여 사용 할 수 있게 해주는

FIrebase의 DynamicLink 사용법에 대해,

그 중에서도 링크 수신에 대해 알아본다.

cocoapods 설치

pod 'Firebase/DynamicLinks'

동적 링크 설정

firebase 문서에 잘 나와있어요~

동적 링크 열기

1. 도메인 추가

프로젝트 targets - Signing&Capabilities에서

'+Capability' 클릭 - Associated Domains를 추가합니다.

Domains에 'applinks:동적링크 도메인'을 입력해줍니다.(https:// 제외)

2. 동적 링크 수신을 위한 info.plist에 추가

Information Property List에 'FirebaseDynamicLinksCustomDomains' 추가

Type을 Array로 하여 아이템을 추가해줍니다.

아이템의 Type은 String Value는 동적링크 그대로 넣어줍니다.

 

동적 링크 처리 작업

1. AppDelegate파일에 firebase import

@import Firebase;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  [FIRApp configure];
}

 

2. 유니버셜 링크를 구현한다면

'- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options

'를 사용했겠지만,

외부에서 사용자의 활동을 감지해야 하므로

'- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler

'이 함수를 이용합니다.

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
    // 사용자가 접속하려는 페이지 url을 받아옴
    NSURL * url = [NSURL URLWithString:userActivity.webpageURL.absoluteString.stringByRemovingPercentEncoding];
    // 받아온 url 핸들러
    BOOL handle = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL completion:^(FIRDynamicLink * _Nullable dynamicLink, NSError * _Nullable error) {
        // url을 파싱
        [self parsingDynamicLink:dynamicLink.url];
    }];
    return handle;
}
- (void)parsingDynamicLink:(NSURL *)url {
    NSMutableDictionary *queryItemDic = [[NSMutableDictionary alloc] init];
    // url을 파싱하여 url components을 가져옴
    NSURLComponents * urlComponents = [[NSURLComponents alloc] initWithURL:url resolvingAgainstBaseURL:YES];
    // url에서 query string으로 구분되어 받는 'query item 배열'을 얻어옴
    NSArray * queryItems = [urlComponents queryItems];
    // 쿼리아이템에서 키값을 딕셔너리에 저장
    for (NSURLQueryItem * keyValue in queryItems) {
        [queryItemDic setObject:keyValue.value forKey:keyValue.name];
    }
}

 

QueryItems를 활용하여 작업 하면 끄읕

 

 

참고:

https://firebase.google.com/docs/dynamic-links/ios/receive

https://swieeft.github.io/2020/09/02/DynamicLinkGetQueryData.html

https://medium.com/hcleedev/ios-%EC%95%B1%EC%97%90%EC%84%9C-firebase-dynamic-link-%EC%83%9D%EC%84%B1%ED%95%98%EA%B3%A0-%EC%88%98%EC%8B%A0%ED%95%98%EA%B8%B0-e357e95343c9

https://stackoverflow.com/questions/8756683/best-way-to-parse-url-string-to-get-values-for-keys

https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application?language=objc 

https://developer.apple.com/documentation/foundation/nsurlcomponents/1416476-initwithurl?language=objc 

https://developer.apple.com/documentation/foundation/urlcomponents/1779966-queryitems

728x90

'iOS > iOS' 카테고리의 다른 글

PDFView  (0) 2022.04.11
image scrolling(paging) & zoom  (0) 2022.04.04
Delegate 사용  (0) 2022.03.28
뷰 계층 관리  (0) 2022.03.25
UILable cornerRadius  (0) 2022.03.16

댓글