iOS9 Universal Links 的运用

先来说说它有哪些好处:

1、可以直接通过https链接在浏览器或wkwebview中打开app

2、浏览器不会弹出安全提示框

3、如果手机上没有安装app,浏览器则会直接打开对应的网页,如果有安装app,则会直接打开app

4、通用链的定义只能使用自己服务器定义的路径,别人无法篡改

再来说说如何使用:

1、创建一个名字叫apple-app-site-association的json文件(注意:扩展名不需要),内容如下:

{
      "applinks": {
          "apps": [],
          "details": [
              {
                  "appID": "9JA89QQLNQ.com.apple.wwdc",
                  "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*" ]
              },
              {
                  "appID": "TeamID.BundleID2",
                  "paths": [ "*" ]
              }
          ]
      }
  }

paths 用于设置可以打开app的页面路径, 如果是*,表示任何页面路径都可以用来打开app

注意:paths 路径是大小写敏感的

2、将apple-app-site-association文件上传到服务器

上传到服务器的根目录(或者在根目录下的.well-known文件夹下,注意:well-known前面加"点",表示隐藏文件夹)

校验apple-app-site-association是否有效,可以通过苹果提供的工具验证:点击这里进入验证

3、xcode中配置Associated Domains

打开xcode,选择添加Capabilities,添加用于打开app的通用链接域名

iOS9 Universal Links 的运用

这里配置的作用是,app首次启动时会向这里配置的域名服务器的根目录或根目录的.well-known下下载apple-app-site-association文件

4、配置支持通用链接的交互(这里可以省略,如果你不需要任何交互)

在 AppDelegate 里实现如下方法

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        guard userActivity.activityType == NSUserActivityTypeBrowsingWeb else {
            return false
        }
        if userActivity.webpageURL?.host == "www.domain.com" {
            // 根据自己的逻辑打开app对应的页面
            
            return true
        } else {
            // 不被允许的域名,不做处理
            return false
        }
    }

到此,通用链接配置就完成了。

当然在wkwebview中也是可以屏蔽通用链接打开app的,那微信为例,微信是不允许随便一个链接就能跳出微信打开app的,那么它是如何做到的呢 ?其实是在wkwebview的代理方法中做了手脚,代码如下:

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    decisionHandler(WKNavigationActionPolicy(rawValue: WKNavigationActionPolicy.allow.rawValue + 2)!)
}
就是这里WKNavigationActionPolicy.allow.rawValue + 2,加2的结果。

 

iOS9 Universal Links 的运用

上一篇:Android: NDK中的Android.mk和Application.mk


下一篇:批处理学习(-)之文件夹和文件的移动