iOS通用链接和GET参数

问题描述 投票:10回答:2

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

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

谢谢

ios ios-universal-links google-app-indexing
2个回答
12
投票

不,Universal Links目前不支持#(内联链接)和?(查询参数)。 Apple没有提供任何格式来支持Inline-Links文件中的Query-Parmeterapple-app-site-association

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

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

如果你想仅将索引限制为某些参数,例如query_parmeter1query_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相似 -

enter image description here

参考文献 - Handle query parameters in universal links


3
投票

对于附加到基域之外的路径(即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方法中进行解析。

© www.soinside.com 2019 - 2024. All rights reserved.