Firebase动态链接:如何从生成的动态链接获取URI方案?
我的要求是从已生成的动态链接URL
中获取URI
方案。即使在firebase
示例应用程序中,它的深度链接url也会返回,而不是URI方案。Firebase动态链接:如何从生成的动态链接获取URI方案?
对于如:
- 我们的动态链接网址是这样的 - >https://my-app-code.app.goo.gl/value。
- iOS的自定义应用程序方案(从高级选项中添加):myappscheme://一些标签/一些标签的ID
- 长期动态链接网址 - >https://my-app-code.app.goo.gl/?link=my-web-url&apn=id&isi=android-google-play-id&ibi=ios-bundle-id&ius=ios-custom-app-scheme
当我点击动态从电子邮件/ 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方案。
请帮忙。
您正在尝试执行的操作目前无法在iOS上通过动态链接进行。您在使用URI 路径(myappscheme://some-tag/some-tag-id
)将方案(myappscheme://
)URI 混淆。
据我所知,iOS上的动态链接只支持该方案(通过ius
参数)。这是令人困惑的,因为Android确实支持URI路径(通过al
param)。对于iOS,您需要根据深层链接网址进行路由。
或者,您可以调查一个更强大的深层链接平台,如Branch.io(完全披露:我在分支团队中)。 Branch支持包含您希望的任何数据的自定义链接参数,包括自定义URI路径。
亚历克斯说的是正确的。这是不可能的,但有一个简单的解决方法。
我将我所需的自定义url深层链接作为查询参数附加到我提供的https链接url。
所以你的情况会是这个样子
当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;
}
也许这个答案是有点晚了你的方法,但我就在今天遇到了这个问题。 无论如何,我希望这可以帮助别人。
干杯,
阿莱西奥