17

我们正在尝试使用 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=*" ]
      }
    ]
  }
}

你认为它可以工作吗?我还不能测试它,因为它需要时间来获得在网站根目录上上传文件的授权,这就是为什么我问你是否认为它可以工作,如果我想只上传一次文件能够。

谢谢

4

3 回答 3

20

,目前不支持 #(inline-links) 和 ?(query-parmeter) Universal Links。Apple 没有提供任何格式来支持Inline-Links& Query-Parmeterin apple-app-site-associationfile。

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

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

例如,如果您只想将索引限制为某个参数query_parmeter1query_parmeter2那么您需要在 UIApplicationDelegate 方法中处理这个问题,[UIApplicationDelegate application: continueUserActivity: restorationHandler:]如下所示

目标-C:

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

迅速:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
        let url = userActivity.webpageURL!
        let query = url.query ?? ""

        if query.contains("query_parmeter1") {
            // handle code for query_parmeter1
        } else if query.contains("query_parmeter2") {
            // handle code for query_parmeter2
        }

        return true
    }

    return false
}

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

在此处输入图像描述

参考 -处理通用链接中的查询参数

于 2016-03-05T10:06:12.760 回答
13

在 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" }
          }
        ]
      }
    ]
  }
}

paths请注意,如果您想在 iOS 12 中继续支持通用链接,您仍然需要指定一个数组,如果您指定一个数组,iOS 13 设备将忽略该paths数组components

于 2019-12-18T18:31:48.157 回答
3

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

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

根据Apple Universal Link 文档

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.

完整的 URL 将成熟并准备好在 AppDelegate 的continueUserActivity方法中解析。

于 2017-03-03T21:37:34.983 回答