2016-10-07 71 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; 
} 

也许这个答案是有点晚了你的方法,但我就在今天遇到了这个问题。 无论如何,我希望这可以帮助别人。

干杯,

阿莱西奥