我们正在尝试使用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=*" ]
}
]
}
}
你觉得它可行吗?我无法测试它,因为获取授权在网站根目录上上传文件需要时间,这就是为什么我问你是否认为它可以工作,我想上传文件一次,如果我能够。
谢谢
不,Universal Links
目前不支持#(内联链接)和?(查询参数)。 Apple没有提供任何格式来支持Inline-Links
文件中的Query-Parmeter
和apple-app-site-association
。
为了对https://www.mywebsite.com?parameter=something进行索引,我使用以下JSON文件。
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAMID.BUNDLEID",
"paths":[ "*" ]
}
]
}
}
如果你想仅将索引限制为某些参数,例如query_parmeter1
和query_parmeter2
,那么你需要在UIApplicationDelegate方法中处理这个问题[UIApplicationDelegate application: continueUserActivity: restorationHandler:]
这样的事情是这样的
Objective-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。与Amazon App相似 -
对于附加到基域之外的路径(即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.
完整的URL已经成熟,可以在AppDelegate的continueUserActivity
方法中进行解析。