iOS通用链接和GET参数

时间:2016-02-17 13:29:44

标签: ios ios-universal-links google-app-indexing

我们正在尝试使用Apple Universal Links在iOS上实现应用程序索引(我正在查看https://developer.apple.com/library/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2)。

在“创建和上传关联文件”部分中,我看到我可以将索引限制为特定页面,这很好。

我想将索引限制为https://www.mywebsite.com?parameter=something,我该怎么办?

我在想这样的事情:

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "MYID",
        "paths":[ "*?parameter=*" ]
      }
    ]
  }
}
你认为它能起作用吗?我无法测试它,因为获取授权在网站根目录上上传文件需要时间,这就是为什么我问你是否认为它可以工作,我想上传文件一次,如果我可以。

谢谢

3 个答案:

答案 0 :(得分:12)

,目前#{1}}不支持#(内联链接)和?(查询参数)。 Apple未提供任何格式来支持Universal Links& Inline-Links文件中的Query-Parmeter

为了对https://www.mywebsite.com?parameter=something建立索引,我正在使用以下JSON文件。

apple-app-site-association

如果您希望仅将索引限制为某个参数,例如{ "applinks": { "apps": [], "details": [ { "appID": "TEAMID.BUNDLEID", "paths":[ "*" ] } ] } } query_parmeter1,那么您需要在UIApplicationDelegate方法query_parmeter2中处理此问题

<强>目标-C:

[UIApplicationDelegate application: continueUserActivity: restorationHandler:]

<强>夫特:

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
    if ([userActivity.activityType isEqualToString: NSUserActivityTypeBrowsingWeb]) {
        NSURL *url = userActivity.webpageURL;
        if ([url.query containsString:@"query_parmeter1"]) {
           //handle code for query_parmeter1
        }else if ([url.query containsString:@"query_parmeter2"]){
           //handle code for query_parmeter2
        }

        return YES;
    }
    return NO;
} 

注意:当点击指向该网站的链接时,此技巧不会阻止该应用打开。但是,如果没有,则可以检查URL是否符合您的要求,然后您可以再次在Web浏览器中打开URL。与亚马逊应用程序类似 -

enter image description here

参考文献 - Handle query parameters in universal links

答案 1 :(得分:3)

对于附加到基本域的路径 off 的查询参数(即https://www.mywebsite.com/pathOffOfTheBaseDomain?parameter=something),请使用:

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "TEAMID.BUNDLEID",
        "paths":[ "/pathOffOfTheBaseDomain" ]
      }
    ]
  }
}

根据Apple Universal Link documentation

Note that only the path component of the URL is used for comparison. Other components, such as the query string or fragment identifier, are ignored.

完整的网址已经成熟,可以在AppDelegate的continueUserActivity方法中进行解析。

答案 2 :(得分:0)

在iOS 13中,现在可以在定义通用链接URL时指定查询和片段值。遗憾的是,Apple并没有很好地对此进行记录,但是在WWDC 2019中提到了它:https://developer.apple.com/videos/play/wwdc2019/717/

对于您想匹配https://www.mywebsite.com?parameter=something的原始示例,您的apple-app-site-association文件应如下所示:

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "MYID",
        "components": [
          {
            "/" : "",
            "?": { "parameter": "something" }
          }
        ]
      }
    ]
  }
}

请注意,如果您想继续支持iOS 12中的通用链接,则仍然需要指定paths数组,如果您指定{{ 1}}数组。