iOS 通用链接(UniversalLinks)+ 分享功能的一
引子:
你有没有想过为你的用户减少一道操作?
什么是通用链接?
通用链接是iOS9出的一个特性,他能让用户通过链接直接打开你的APP。经常配合分享功能,让用户快速进入到我们的APP里面。
APP的两大引流功能 --> 分享+推送,个人认为应该在这上面多下功夫。分享功能至少要能将对你们APP感兴趣的用户引入到APP,但是我很失望的看到很多APP没有做到这一点,就更别提使用通用链接来跳过微信对URL Schemes的屏蔽。
分享功能市场上常见APP的做法
low:简书,爱奇艺,美食节。
点击分享到微信里面分享 ->网页->APPStore。最为关键为APP引流都没有做到。
WechatIMG5.jpeg WechatIMG6.jpeg WechatIMG7.jpegmedium:哔哩哔哩。
点击分享到微信里面分享 ->微信浏览器->浏览器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
2.开启对应的AppIDs
的Associated Domains
服务
WechatIMG14.jpeg
WechatIMG15.jpeg
3.编辑对应的Provisioning Profiles,并且重新下载双击安装
WechatIMG17.jpeg4.打开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/*
“*”
可以是任何字符串。
5.将apple-app-site-association
文件上传到服务器的.well-known文件夹下面。
6.验证文件是否合格
苹果验证网站
域名+“apple-app-site-association”进行验证(有时候这里校验也不是很准确)
https://www.icarusli.com/apple-app-site-association
7.测试一下通用链接是否生效。
WechatIMG21.jpeg如果出现下面第二项就成功了。
8.后续和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的时机,以及通用链接上面附带的信息。
通用链接实际上还是比较好实现的,看步骤都不难,如果能注意到我最开始说的两个问题就没什么好说的了,其他的就是按部就班。
既然说到了分享,下一篇文章会讲讲我们APP的分享之后的交互(进入到APP之后怎么进行页面跳转)。
主要问题是当从浏览器进入APP之后,触发APPDelegate的时候,TabbarController还没有创建,这时候推页面肯定是推不出来的。