iOS Universal links教程

序言

通过链接跳转到应用内部,目前iOS主流的方案有两个

  • schema
  • Universal Links
一 两种方式的简介
schema

schema是iOS9之前比较主流的一种跳转方案了, 更多的是用在了两个APP相互跳转中。也可以在Safari中输入schema://跳转到App内部。 例如 taobao://home

image.png

其实这种方式很不顺滑,在每次跳转的时候都会弹框询问。如果iPhone中如果没有安装则会直接弹出错误提示

image.png

正常产品的思路是如果手机中没有安装APP的话,应跳转到App Store下载页面。

自定义 URL Schema 的过程
  • 1.在info.plist文件中添加字段,key 为 URL types,value 一般为应用名称,比如taobao。其他应用如果想调用该应用,只要打开类型taobao://xxx就可以了。

  • 2.在AppDelegate回调中实现该方法

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation  {  
    if ([sourceApplication isEqualToString: @"xxx.xxx.xxx"]) {  
        //xx  
    }  
    return YES;  
}  

此函数便是URL Call的处理函数了,每当其他应用通过URL打开此应用时,该函数都会被调用。
参数url是传进的url,sourceApplication是呼叫应用的bundle identifier,通过此参数,应用可以对呼叫的应用进行过滤。annotation是呼叫过程中可以附加的额外参数,这里没有用到。

  • 3.另一个应用想调用我的应用时,只需拼接好URL,,然后打开URL即可,十分方便:
NSURL* url = [NSURL URLWithString: @"taobao://home"];
[[UIApplication sharedApplication] openURL: url];  
二 Universal Links

强烈建议先看看苹果官方文档 Support Universal Links

Universal Links(通用链接)是iOS9.0出的新技术。如果我们的应用支持通用链接,那么就可以通过https链接来打开APP(手机中已经安装此APP),或者跳转到https链接(手机中没有安装此APP)。

通用连接的特性

  • 唯一性:不像自定义的schema链接,通用链接不会被其它的APP所使用。因为它使用标准的https链接到你自己的域名。【因为你的域名不会被其他人所使用】
  • 安全性:当用户下载APP的时候,iOS会检查你上传到web服务器的文件以确保您的网站允许您的应用程序以其名义打开网址。因为只有本人有权利创建且上传该文件到服务器,所以网站和APP的关联是安全的。
  • 灵活性:甚至在iOS设备没有安装你项目的时候通用链接也会正常工作。当设备没有安装APP的时候,点击通用链接会在Safari展示你网站的内容。
  • 灵活性:一个通用链接可以同时作用于项目和网站中。
  • 灵活性:其它APP可以在不知道你的APP是否安装的情况下与你的APP通信
使用条件

1.有一个注册的域名。
2.支持https请求,并且CA证书是有效的,这个需要与后端同事进行确认。
3.可上传一个json文件到web服务器
4.APP版本至少为iOS9及以上
5.Xcode版本为7以上

初始化步骤
  1. 首先是将 Associated Domains 打开,并填写我们的域名,前缀是applinks。etc.如果你的域名是test.com,则填上applinks:test.com。APP会在第一次启动的时候通过填写的域名来下载apple-app-site-association文件,该文件会在下面说明。
image.png

2.配置后会发现项目中多了一个APPNAME.entitlements文件

image.png

同时开发者中心的Associated Domains也会变成启用状态

image.png
  1. 创建apple-app-site-association文件
    首先创建一个apple-app-site-association文件(注意是没有后缀的),其内容是json格式,官方示例如下
{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "TEAMIDSHSAUX.com.test.bundle",
                "paths": [ "*" ]
            }
        ]
    }
}

apple-app-site-association文件保存的位置

  • 根目录下 etc.https://test.com/apple-app-site-association
  • .well-known文件夹下(推荐,苹果在iOS9.3更改了通用链接的请求文件的位置,但是仍然支持上面的路径)。在根目录新建.well-known文件夹(不要忘记前面的.)。etc.https://test.com/.well-known.apple-app-site-association

4.检查
(1)使用浏览器打开我们上传的文件路径,应该可以直接看到刚刚上传的json文件,或者是会自动下载到电脑。

https://taobao/apple-app-site-association
或者
https://taobao/.well-knowna/apple-app-site-association

image.png

苹果也提供了一个官方网页供我们开发者来验证https://test.com/apple-app-site-association是否有效。
验证地址:App Search API Validation Tool

成功的情况应该如下图

image.png

或者可以使用Charles进行抓包查看

image.png
检验结果

重新编译App后,就可以检验成果了。

  1. 在备忘录输入你的域名,点击可直接跳转到App,长按会显示(在“AppName”中打开)。
image.png
在 APP 中进行处理

用户通过链接进入我们的App中,在AppDelegate是可以获取该链接的

- (void)application:(UIApplication *)application userDidAcceptCloudKitShareWithMetadata:(CKShareMetadata *)cloudKitShareMetadata {

}

参考资料
iOS Universal Links教程
Support Universal Links

你可能感兴趣的:(iOS Universal links教程)