2016-10-07 74 views
0

我的要求是從已生成的動態鏈接URL中獲取URI方案。即使在firebase示例應用程序中,它的深度鏈接url也會返回,而不是URI方案。Firebase動態鏈接:如何從生成的動態鏈接獲取URI方案?

對於如:

當我點擊動態從電子郵件/ Notes鏈接URL(https://my-app-code.app.goo.gl/value),回調將是continueuseractivity功能,我用下面的塊 -

BOOL handled = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:incomingUrl completion:^(FIRDynamicLink * _Nullable dynamicLink, NSError * _Nullable error) 

,以便獲得url(dynamicLink.url)。在這個塊中,我得到了這個深度鏈接url,它是這個
- > my-web-url(這是我在上面提到的長動態鏈接中的鏈接參數的一部分)。

我的實際需求是獲取與該URL關聯的URI方案myappscheme:// some-tag/some-tag-id。我如何得到這個?

我甚至嘗試以下 -

FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url]; 

在這兩種情況下,我沒有得到的URI方案。

請幫忙。

回答

1

您正在嘗試執行的操作目前無法在iOS上通過動態鏈接進行。您在使用URI 路徑myappscheme://some-tag/some-tag-id)將方案(myappscheme://)URI 混淆。

據我所知,iOS上的動態鏈接只支持該方案(通過ius參數)。這是令人困惑的,因爲Android確實支持URI路徑(通過al param)。對於iOS,您需要根據深層鏈接網址進行路由。

或者,您可以調查一個更強大的深層鏈接平臺,如Branch.io(完全披露:我在分支團隊中)。 Branch支持包含您希望的任何數據的自定義鏈接參數,包括自定義URI路徑。

0

亞歷克斯說的是正確的。這是不可能的,但有一個簡單的解決方法。

我將我所需的自定義url深層鏈接作爲查詢參數附加到我提供的https鏈接url。

所以你的情況會是這個樣子

https://my-app-code.app.goo.gl/?link=https://my-web-url.com/?myCustomSchemeUri%3Dmy-custom-scheme://my-custom-scheme-url&apn=id&isi=android-google-play-id&ibi=ios-bundle-id&ius=ios-custom-app-scheme

當continueuseractivity回調獲取到您的應用程序,你可以從查詢字符串檢索myCustomSchemeUri參數,並把它作爲你請。

事情是這樣的:

- (BOOL)application:(UIApplication *)application 
continueUserActivity:(NSUserActivity *)userActivity 
restorationHandler:(void (^)(NSArray *))restorationHandler { 

BOOL handled = [[FIRDynamicLinks dynamicLinks] 
       handleUniversalLink:userActivity.webpageURL 
       completion:^(FIRDynamicLink * _Nullable dynamicLink, 
          NSError * _Nullable error) { 
        // ... 
        NSURL *url = dynamicLink.url; 
        NSString *myUri = [url queryParameterValueWithName:@"customUri"]; 
        if (myUri.lenghth > 0){ 
         NSURL *myURL = [NSURL URLWithString:myUri]; 
         if (myURL != nil){ 
          //source application is your bundle id in this case 
          [self application:application openURL:myURL sourceApplication:@"com.yourbundle.id" annotation:@{}]; 
         } 
        } 
       }]; 
return handled; 
} 

這是我寫的NSURL的類別檢索參數

- (NSString *)queryParameterValueWithName:(NSString*)name{ 
NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:self 
              resolvingAgainstBaseURL:NO]; 
NSArray *queryItems = urlComponents.queryItems; 
NSString *param = [self valueForKey:name 
         fromQueryItems:queryItems]; 
return param; 
} 

- (NSString *)valueForKey:(NSString *)key 
     fromQueryItems:(NSArray *)queryItems 
{ 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name=%@", key]; 
NSURLQueryItem *queryItem = [[queryItems 
           filteredArrayUsingPredicate:predicate] 
          firstObject]; 
return queryItem.value; 
} 

也許這個答案是有點晚了你的方法,但我就在今天遇到了這個問題。 無論如何,我希望這可以幫助別人。

乾杯,

阿萊西奧