> For the complete documentation index, see [llms.txt](https://philm.gitbook.io/philm-ios-wiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://philm.gitbook.io/philm-ios-wiki/mei-zhou-yue-du/ios-tong-yong-lian-jie.md).

# iOS通用链接

## 什么是通用链接

通用链接是iOS9出的一个特性，他能让用户通过链接直接打开你的APP。经常配合分享功能，让用户快速进入到我们的APP里面。

APP的两大引流功能 --> 分享+推送。

分享功能应当要能将对APP感兴趣的用户引入到APP，当前微信的浏览器将URL Schemes屏蔽掉了，一般做法是是只能借助系统浏览器中转。使用通用链接可以跳过微信对URL Schemes的屏蔽。

## 使用通用链接的前提条件

1.能够通过 SSL 访问域名。(即支持<https://访问>)

2.支持上传一个无后缀文件到域名解析的服务器的.well-known文件下面，并且能通过链接直接访问并且下载。

如果后台服务器是支持SSL的，直接将文件丢在根目录下面，然后配置一下iis的MIME的权限（因为iis默认不支持无后缀的文件，所以访问不到）。

如果后台服务器的域名还不支持SSL,那么先去腾讯云，阿里云去购买证书，然后到iis下面去安装这个证书。

## 实现步骤

1.开启对应的AppIDs的Associated Domains服务

登录APPDevelop,找到当前app的App ID并且将此AppId的 Associated Domains选项置为enable.

2.编辑此AppId对应的Provisioning Profiles，并且重新下载双击安装.

3.打开Xcode项目，开启项目的Associated Domains，这时候会看到左边目录下多出了一个文件。

4.编写一个无后缀的apple-app-site-association

```
{
    "applinks": {
        "apps": [],
        "details": [
                    {
                    "appID": "TeamID.com.xxxx.xxxx",
                    "paths": [ "/123/*"]
                    }
                    ]
                }
}
```

说明:

* appID里面TeamID是项目的TeamID(可以从Membership中查看),com.xxxx.xxxx是项目的BundleID
* details里面是不同的链接方式(可以是任意字符串)都能进入到APP里面，开发者可以通过控制details里面的paths来进行不同页面不同模块的跳转。 上面最后生成的链接为<https://www.xxxx.com/123/>

生成文件后,将apple-app-site-association文件上传到服务器的.well-known文件夹下面。然后验证文件是否合格:

苹果验证网站 <https://www.xxxx.com/apple-app-site-association>

即为:域名+“apple-app-site-association”进行验证（有时候这里校验也不是很准确）

5.测试一下通用链接是否生效。 这里可以将刚才的链接 <https://www.xxxx.com/123/> 写到备忘录中,点击链接,如果出现\[在"xxxx(App名称)"中打开],即为链接生效.

到这里,通用链接生成成功,可以在分享时使用此链接,从微信也可以直接跳转到app内,而不用通过Safari中转.

## 与App交互:

在AppDelegate中,实现代理:

```
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
{
if ([userActivity.activityType isEqualToString: NSUserActivityTypeBrowsingWeb]) 
{
NSURL *url = userActivity.webpageURL;
}
return YES;
}
```

利用这个代理，能够捕捉通过通用链接进入APP的时机，以及通用链接上面附带的信息。通过这些信息可以实现跳转/其他功能。
