如何获得通用链接打开应用程序而不是safari?

时间:2017-05-08 08:32:26

标签: ios xcode ios-universal-links mobile-development

我已经尝试了一段时间才能获得 iOS10 的通用链接,但它到目前为止还没有工作。

我配置了一个apple-app-site-association。 尝试在同一台服务器或其他服务器上使用根域,使用子文件夹。在所有情况下,我都被重定向到safari网页,下拉打开我的应用程序作为选项  enter image description here 我错过了什么?

3 个答案:

答案 0 :(得分:6)

在这里花了一些时间尝试配置Universal Links是我到目前为止所学到的:

1 - 通用链接不要使用重定向或在Safari地址栏中键入链接并按Enter键。

2 - 在Notes中键入您的地址并单击它,如果您的应用程序直接打开,则表示您已正确设置所有内容。

3 - 当用户在您的网站上执行操作时,通用链接会起作用,尝试在您的网站/博客上添加一个按钮,并将其链接到用于打开您的应用的通用链接。现在在Safari中打开您的网站/博客,然后点击按钮,它将直接打开您的应用程序。

4 - 当您点击'打开'在Safari中,由于第1点中提到的原因,后续呼叫不会直接打开应用程序。

希望这会有所帮助:)

答案 1 :(得分:5)

您在使用应用程序时可能已点击设备状态栏上的一个小按钮,这会将您带回网站。一旦你这样做,系统就会记住这一点,并且在点击你的应用程序的通用链接时总会启动Safari。要撤消该操作,请长按该链接,然后在弹出的菜单中选择“使用[您的应用]打开”

答案 2 :(得分:-1)

在AppDelegate.m中将此称为:

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options;{
    NSLog(@"url recieved: %@", url);
    NSLog(@"query string: %@", [url query]);
    NSLog(@"host: %@", [url host]);
    NSLog(@"url path: %@", [url path]);
    NSDictionary *dict = [self parseQueryString:[url query]];
    NSLog(@"query dict: %@", dict);
    if ([[url host] isEqualToString:@"login"]) {
        [self setupHomeScreen:NO type:@"" entityId:@""];
        [self _endSession];
        return YES;
    } else if ([[url host] isEqualToString:@"smartoffice"]) {

        NSMutableDictionary *result = [[NSMutableDictionary alloc] init];
        NSRange needle = [url.absoluteString rangeOfString:@"?" options:NSCaseInsensitiveSearch];
        NSString *data = nil;

        if(needle.location != NSNotFound) {
            NSUInteger start = needle.location + 1;
            NSUInteger end = [url.absoluteString length] - start;
            data = [url.absoluteString substringWithRange:NSMakeRange(start, end)];
        }

        for (NSString *param in [data componentsSeparatedByString:@"&"]) {
            NSArray *keyvalue = [param componentsSeparatedByString:@"="];
            if([keyvalue count] == 2){
                [result setObject:[keyvalue objectAtIndex:1] forKey:[keyvalue objectAtIndex:0]];
            }
        }
        NSString *entityID = ([result objectForKey:@"secondparameter"]);
        NSString *type = [result objectForKey:@"parameter"];
        [self setupHomeScreen:YES type:type entityId:entityID];
        //[self setupHomeScreen:YES type:@"TASK" entityId:@"160315"];
        return result;
    } else {
        NSLog(@"myApp is not installed");
        [self setupHomeScreen:NO type:@"0" entityId:@"0"];
    }
    return NO;
}

URL Type in Xcode Info

打开Xcode,转到“项目设置”->“信息”,然后在“ URL类型”部分中添加新的URL方案。

这是方案:// resource。因此,我们继续输入com.myApp://

请给我我的backofficeapp://

现在在Safari上使用此链接

backofficeapp:// //这只会将您重定向到登录页面。

OR

backofficeapp://smartoffice/1?parameter=TASK&secondparameter=157536

哪里

参数=“任务”

secondparameter =“任务ID” // #iOS Mobile 2020 = 157536

此参数用于在特定屏幕上着陆。

请记住,如果未安装该应用程序,则该URL将不起作用。