iOS Universal Links教程

作者: Pusswzy | 来源:发表于2018-05-25 18:39 被阅读195次

    最近有个需求, 是通过链接跳转到应用内部,现在iOS主流的方案有两个

    • schema
    • Universal Links

    现在分析下两个方案

    一、两种方式的简介

    schema

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

    通过schema方式跳转App
    其实这种方式很不顺滑,在每次跳转的时候都会弹框询问。如果iPhone中如果没有安装则会直接弹出错误提示 通过schema找不到对应的应用
    正常产品的思路是如果手机中没有安装APP的话,应跳转到App Store下载页面。我与前端小伙伴沟通后,因为schema跳转失败是没有错误码返回的。前端使用计时器计时,如果在规定时间内没有跳转到APP,则认为是失败的。这种设计确实有一些体验不好。
    而且在微信中输入schema链接,也无法跳转到APP。因为schema并没有走http/https链接,微信也无法识别。
    微信聊天中输入schema是无法跳转的

    使用Safari打开知乎首页,可直接跳转到知乎项目中,并没有弹框询问,我想是时候拥抱新技术了。

    Universal Links

    1.简介

    建议大家先看看苹果官方文档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通信
    2.使用条件

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

    二、通用链接使用说明

    首先我们先设置几个全局来方便大家理解😊
    static NSString *webLink = @"test.com" //域名
    static NSString *bundleID = @"com.test.bundle" //bundleID
    static NSString *teamID = @"TEAMIDSHSAUX" //team ID [可登录Apple Developer查看]
    1.Xcode配置
    (1)首先是将Associated Domains打开,并填写我们的域名,前缀是applinks。etc.如果你的域名是test.com,则填上applinks:test.com。APP会在第一次启动的时候通过填写的域名来下载apple-app-site-association文件,该文件会在下面说明。

    打开Associated Domains
    (2)配置后会发现项目中多了一个APPNAME.entitlements文件 APPNAME.entitlements
    同时开发者中心的Associated Domains也会变成启用状态 开发者中心

    2.创建apple-app-site-association文件
    首先创建一个apple-app-site-association文件(注意是没有后缀的),其内容是json格式,官方示例如下

    {
        "applinks": {
            "apps": [],
            "details": [
                {
                    "appID": "TEAMIDSHSAUX.com.test.bundle",
                    "paths": [ "*" ]
                }
            ]
        }
    }
    
    相关参数说明
    • appID:由TeamID.BundleID组成。TeamID可在开发者中心查看,BundleID可在Xcode中查看。
    • paths:设定一个App的路径支持列表,只有这些指定的路径链接才会被App所处理。(paths是大小写敏感,*是通配符表示任意路径,一般填写这个就可以)

    3.上传apple-app-site-association文件
    将上面生成好的apple-app-site-association上传到web server

    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文件,或者是会自动下载到电脑。


    打开链接的效果

    (2)苹果也提供了一个官方网页供我们开发者来验证https://test.com/apple-app-site-association是否有效。验证地址:https://search.developer.apple.com/appsearch-validation-tool/
    成功的情况应该如下图

    虽然有一个error,但是不影响使用

    三、检验成果

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

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

    (2).在safari中直接打开你的域名,网页下来会看见上方的提示条。


    Safari中打开

    (3).在微信中打开域名,可以直接跳转到官网,但是在微信内置的浏览器上方不会显示提示条。但是选择在Safari中打开是可以显示提示条的。

    四、在App中进行处理

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

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

    相关文章

      网友评论

      • 农夫三全:你好这个的话 本地可以测试吗?在APP里面的添加不需要设置白名单吧
        农夫三全:我能加一下您吗?这一块有点问题想问一下您
        农夫三全:@Pusswzy 您好这个域名是服务器那边提供的吗?还有测试的话 如果项目没有上线的话可不可以测试?
        Pusswzy:@农夫三全 本地测试你可以在备忘录中长按网址看效果 文章中有写到. 这个跟白名单没有任何关系, 所以也不需要
      • IT人故事会:赞,找了好久才找到!
        IT人故事会:@火华社 没要求吧
        火华社:大佬,流程走调不起app,文件有尺寸要求嘛?
        Pusswzy:@IT人故事会 谢谢,还没有写完,估计明天就可以写完了:blush:

      本文标题:iOS Universal Links教程

      本文链接:https://www.haomeiwen.com/subject/bvmujftx.html