专栏名称: 程序员技术
最有影响力的程序员自媒体,关注程序员相关话题:程序人生、IT技术、IT职场、学习资源等。
目录
相关文章推荐
OSC开源社区  ·  Rust重写万物之——彻底重写SQLite ·  昨天  
OSC开源社区  ·  2024年CSS持续活跃,年终大盘点! ·  4 天前  
程序员的那些事  ·  谷歌“狙击”OpenAI,发布新一代大模型! ... ·  4 天前  
程序员的那些事  ·  趣图:在我机器上好好的(Ծ‸Ծ) ·  5 天前  
程序猿  ·  红帽RHEL将成为微软官方WSL发行版 ·  6 天前  
51好读  ›  专栏  ›  程序员技术

iOS 通用链接(UniversalLinks)+ 分享功能的一些看法

程序员技术  · 公众号  · 程序员  · 2017-10-08 19:01

正文

点击上方“程序员共读”,选择“置顶公众号”

关键时刻,第一时间送达!

引子:


你有没有想过为你的用户减少一道操作?


什么是通用链接?


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


APP的两大引流功能 --> 分享+推送,个人认为应该在这上面多下功夫。分享功能至少要能将对你们APP感兴趣的用户引入到APP,但是我很失望的看到很多APP没有做到这一点,就更别提使用通用链接来跳过微信对URL Schemes的屏蔽。


分享功能市场上常见APP的做法


low:简书,爱奇艺,美食节。


点击分享到微信里面分享 ->网页->APPStore。最为关键为APP引流都没有做到。


WechatIMG5.jpeg


WechatIMG6.jpeg


WechatIMG7.jpeg


medium:哔哩哔哩。


点击分享到微信里面分享 ->微信浏览器->浏览器safari->APP。虽然这个做到了,但是并没有引导用户打开浏览器,然后进入APP。这里要说明的就是微信的浏览器将URL Schemes屏蔽掉了,所以这里只能借助浏览器中转一下。这种是比较常见的做法,我之前的应用就是这种做法。


high: 知乎,即刻。


点击分享到微信里面分享 ->微信浏览器->APP。直接跳转,非常方便。这就是我今天要讲的通用链接。


WechatIMG11.jpeg


WechatIMG12.jpeg


开工实现


前提条件:通用链接其实很容易实现,坑全部在下面这两个条件上了。


q1:能够通过 SSL 访问域名。(即支持https://访问,用谷歌浏览器打开网页就能测试出来,下面就是支持https的。



WechatIMG13.jpeg


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


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


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


上面两项我坑了好久,因为服务器经验不是很足,这里也只能给你们指出关键坑。如果上面两个准备好了,其他的就很轻松了。


1.登录APPDevelop


https://developer.apple.com/


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


WechatIMG14.jpeg


WechatIMG15.jpeg


3.编辑对应的Provisioning Profiles,并且重新下载双击安装


WechatIMG17.jpeg


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


WechatIMG18.jpeg


5. 编写一个无后缀的apple-app-site-association(我已经放在demo的文件下面,你们可以自行参考)


{

    "applinks": {

        "apps": [],

        "details": [

            {

                "appID": "47P6T6SYNE.com.zzyg.travelnotes",

                "paths": [ "/botaochen/*"]

            }

        ]

    }

}


appID里面47P6T6SYNE是项目的TeamID,com.zzyg.travelnotes是项目的BundleID


WechatIMG19.jpeg


说明一下这里的details里面是不同的链接方式都能进入到APP里面,这样开发者可以通过控制details里面的paths来进行不同页面不同模块的跳转。


比如我可以通过:https://www.icarusli.com/botaochen/123访问APP,https://www.icarusli.com是域名 botaochen/*  “*”可以是任何字符串。


给一个其他成熟公司的通用链接文件是怎么写的,可以参考一下


6.将apple-app-site-association文件上传到服务器的.well-known文件夹下面。


7.验证文件是否合格


苹果验证网站

域名+“apple-app-site-association”进行验证(有时候这里校验也不是很准确)

https://www.icarusli.com/apple-app-site-association


8.测试一下通用链接是否生效。


WechatIMG21.jpeg


如果出现下面第二项就成功了。


9.后续和APP的交互


-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{

    if ([userActivity.activityType isEqualToString: NSUserActivityTypeBrowsingWeb]) {

        NSURL *url = userActivity.webpageURL;

    }

    return YES;

}


利用这个代理,能够捕捉通过通用链接进入APP的时机,以及通用链接上面附带的信息。


通用链接实际上还是比较好实现的,看步骤都不难,如果能注意到我最开始说的两个问题就没什么好说的了,其他的就是按部就班。


文章demo

(https://github.com/knightSaber/CBTUniversalLinksDemo)

  • 本文链接:http://www.jianshu.com/p/2e6fb93fd97d

  • 程序员共读整理发布,转载请联系作者获得授权

【点击成为安卓大神】