【问题标题】:How to get a universal link to open the app instead of safari?如何获得打开应用程序而不是 Safari 的通用链接?
【发布时间】:2017-10-06 04:29:42
【问题描述】:

我一直在尝试让 iOS10 的通用链接能够正常工作,但直到现在都无法正常工作。

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

【问题讨论】:

  • 您必须在 safari 中按下 OPEN 按钮一次。后续调用应该会打开您的应用而不是 safari。
  • 感谢您的回复,但我确定有办法解决,谢谢
  • 请注意...如果您更改 apple-app-site-association,您应该删除并重新安装应用程序......iOS 缓存应用程序关联并在一段时间后刷新安装它总是...

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


【解决方案1】:

在花了一些时间尝试配置 U​​niversal Links 之后,这是我目前所学到的:

1 - 通用链接请勿与重定向一起使用,或者当您在 Safari 地址栏中键入链接并按 Enter 时使用。

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

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

4 - 当您在 Safari 中单击“打开”时,后续调用将不会直接打开应用程序,原因在第 1 点中提到。

希望这会有所帮助:)

【讨论】:

  • 更新 - 它适用于重定向(在 iOS 11 和 iOS 12 上测试)
  • 假设我有一个笔记应用程序,并且我有一个链接,点击它应该重定向到相同的笔记应用程序,但它只在 safari 中打开链接。
  • @krishankumar 您找到解决问题的方法了吗?
  • @Manoj,我找不到任何原生方式,但我们所做的是,我们在调用 'openUrl' 方法之前处理 URL,过程意味着我们检查 url 的有效性,如果那是有效的,我们自己处理。
【解决方案2】:

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

【讨论】:

  • 这是正确答案。网页顶部有一个 Open 横幅这一事实证明其他所有内容均已正确配置。
【解决方案3】:

在 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;
}

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

即方案:://resource。所以我们继续输入 com.myApp://

对我来说它的后台应用程序://

现在在 Safari 上使用此链接

backofficeapp:// // 这个只会将你重定向到一个登陆页面。

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

在哪里

参数 = “任务”

secondparameter = “taskID” // #iOS Mobile 2020 = 157536

此参数用于登陆特定屏幕。

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

【讨论】:

    猜你喜欢
    • 2021-07-08
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 2014-04-23
    • 2017-09-27
    • 1970-01-01
    相关资源
    最近更新 更多