通常我们在跳转到其他app时使用的是scheme url
的方式,但是现在在申请微信登录或者qq登录时,都开始要求设置Universal Links
。
这个功能是iOS9.0就推出的通过访问http链接去启动app的方式,相信你在刷知乎或者百度的时候,浏览器顶部一直会飘着用app打开
这个,这个东西就是上面说的通用链接。
比如我的需求是访问https://www.lazypig.net/app/lazypigquick/
时,顶部飘窗,访问https://www.lazypig.net
时不显示app打开飘窗
一、准备条件
拥有一个网站域名,且这个网站域名支持https
。
如果你没有这个东西,后面这个教程就不用看了,直接去使用mob
推出的moblink吧,可以使用他默认的域名和配置,按他的接入教程就可以了。
二、xcode项目配置
1、打开工程配置中的Associated Domains
如果用的是xcode11
,可以在Signing&Capabilities
中添加Associated Domains
,如果用的xcode10
,那就在Capabilities
中打开Associated Domains
2、添加网站域名
网站域名以applinks:
开头,那这里填写的就是applinks:www.lazypig.net
3、配置文件
如果你的项目时自动生成签名和配置文件,那么这步可以省略,如果项目不是自动生成的,就需要去苹果开发后台,将对应的appid
的Associated Domains
配置打开,然后重新生成一次打包的配置文件
三、网站配置
1、创建配置文件
新建一个名字为apple-app-site-association
的纯文本文件,不要有任何后缀,文件内容为
{
"applinks": {
"apps": [],
"details": [
{
"appID": "团队ID.软件BundleID",
"paths": [ "限制的域名"]
}
]
}
}
比如你团队ID是t123
,app的bundle id
是com.hudongdong.blog
,只在
访问https://www.lazypig.net/app/lazypigquick/
链接时才显示顶部的用app打开,其他网站层次不显示,那么这个文件的内容就是
{
"applinks": {
"apps": [],
"details": [
{
"appID": "t123.com.hudongdong.blog",
"paths": [ "/app/lazypigquick/*"]
}
]
}
}
如果填了限制的paths,在其他网站例如微信后台,填写Universal Links
就是填写https://www.lazypig.net/app/lazypigquick/
,前端初始化填写的时候也是这个网址。如果没有限制paths,填写的是*,那么前端和后台填写的地址就是https://www.lazypig.net/
如果全站的头部都显示用app打开
,那么paths
修改为"paths": [ "*"]
即可。
这个paths
路径的更多限制规则可以参考下面
- 使用*指定整个网站
- 包含特定的网址(例如/wwdc/news/)以指定特定的链接
- 附加*到特定的网址(例如/videos/wwdc/2015/*)以指定网站的一部分
- 除了用于*匹配任何子字符串之外,您还可以?用于匹配任何单个字符。您可以将两个通配符合并在一个路径中,例如/foo/*/bar/201?/mypage。
- 路径字符串的开头添加
NOT
指定不应作为通用链接处理的区域,例如"paths": [ "/videos/wwdc/201?/*" , "NOT /videos/wwdc/2010/*"]
apps
这个字段保持为空数组即可
details
是指定哪个页面用哪个app打开的数组,如果你有多个路径指定不同的app,按照上面的paths
规则添加对应的appID
和paths
即可。
然后将这个文件上传到网站根目录,或者在根目录新建一个名字为.well-known
的子目录,然后把这个文件上传到这个子目录中。
2、网站验证
上传之后,可以访问https://search.developer.apple.com/appsearch-validation-tool/,苹果专门提供的验证工具,然后将域名网址填进去,例如https://www.lazypig.net/
,然后点击测试。
下面如果显示的是Passed,那就证明符合规则,如果有不合规则的可以参考下面的修正
3、网站不合规则的修正方法
3.1 Title不符合规则
在首页的header
标签中增加<title>
标签,
例如
<head>
<title>胡东东博客</title>
……
</head>
3.2 Description不符合规则
在首页的header
标签中增加description
标签,
例如
<head>
<meta name="description" content="胡东东博客,分享手游和app开发的日常点滴" />
……
</head>
3.3 Image不符合规则
在首页的header
标签中增加og:image
标签,
例如
<head>
<meta property="og:image" content="https://www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6da1ec.png?where=super" />
……
</head>
3.4 Touch Icon不符合规则
在首页的header
标签中增加apple-touch-icon
标签,
例如
<head>
<link rel="apple-touch-icon" href="/static/quick0012.png">
……
</head>
3.5 Link to Application Action required
这个基本是因为app还没有上架,上架审核通过之后发布即可
4、显示验证
可以打一个测试包安装到手机,然后用safari
浏览器打开指定的网页即可看到飘窗,例如打开https://www.lazypig.net/app/lazypigquick/,就会看到懒猪时间盒
的打开飘窗
四、网站向app传值
在AppDelegate
中,可以通过回调函数获取网站向app传的链接,通过链接做不同的逻辑处理
Swift
//从通用链接进来
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
if let url = userActivity.webpageURL {
print("从通用链接进入app",url.absoluteString)
}
}
return true;
}
OC
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURL *url = userActivity.webpageURL;
if (url是我们希望处理的)
{
//进行我们的处理
}
}
return YES;
}
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/1013.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!