iOS微信分享
- 接入 Univarsal Link
- 第一步: 在苹果开发者中心配置 Associated Domains
- 第二步: 在 xcode 中启用 Associated Domains
- 第三步: 配置 apple-app-site-association 文件
- 第四步:跳转回 APP 的处理
- 第五步:测试
- 微信分享
- Xcode配置
- 微信开放平台配置
- 第五步: 在AppDelegate里面向微信注册。
- 其他问题
- 有的手机成功了,有的手机就不行呢?
- 服务器换域名了怎么办?
- 移动端配置好,web端如何配置?
- 备忘录和safari中都可以打开app,怎么分享到其他app里面就不行了?
接入 Univarsal Link
第一步: 在苹果开发者中心配置 Associated Domains
去Apple开发官网去配置开启identifiers 在appid中找到需要配置app的appid,打开Associated Domains功能 一定配置新的证书文件。
第二步: 在 xcode 中启用 Associated Domains
进入项目中–siigning&capablillities 点击+Capability-添加Associated Domains 然后配置Domains:格式是:applinks:+域名
。 (例:applinks:www.Share.com)
一定要添加在微信配置的域名。
第三步: 配置 apple-app-site-association 文件
创建一个内容为 json 格式的文件,当我们的App在设备上第一次运行时,如果支持Associated Domains功能,那么iOS会自动去获取上述在xcode 填写的域名下的apple-app-site-association文件。
{
"applinks": {
"apps": [],
"details": [
{
"appID": "ABCD1234.com.company.myApp",
"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
},
//多个app
{
"appID": "ABCD4321.com.apple.wwdc",
"paths": [ "*" ]
}
]
}
}
- apps:是限制只能在这几个app中使用, 基本是不填写,所以是空数组
- appID:TeamID.Bundle ID(TeamID 可以从开发者中心 -> Membership 中获取)
- paths:设定你的app支持的路径列表,只有这些指定的路径的链接,才能被app所处理。星号代表了可识别域名下所有链接
- 文件名必须为 apple-app-site-association,且文件无后缀
最后,把该文件上传到在 xcode 中填写的域名的根目录或者 .well-known 目录下,上传后,自己在浏览器访问下该文件目录,如果上传成功,会直接下载该文件。
第四步:跳转回 APP 的处理
在 AppDelegate 里实现方法
extension AppDelegate {
func application(_ application: UIApplication, willContinueUserActivityWithType userActivityType: String) -> Bool {
if let activityType = userActivity?.activityType,activityType == NSUserActivityTypeBrowsingWeb {
if let url = userActivity?.webpageURL?.absoluteURL{
if(期望的url){
}else{
}
}
}
return true
}
}
第五步:测试
在手机备忘录中输入App能识别的链接,然后直接点击此链接,就会直接跳转到你的app了。或是长按,在出现的弹出菜单中第二项是在’XXX’中打开,这也代表着成功。
能识别的链接可以填写上述在xcode中填写的域名地址,也可以在此域名后面添加别的参数
到这里,基础的 Univarsal Link 的接入已经完成了。
微信分享
shareSDK 更新到1.8.6后,微信的API发生了少许变更,其中注册的API需要传一个Universal Link,如果不进行配置,微信无法进行分享,出现以下错误:
-canOpenURL: failed for URL: "weixinULAPI://" - error: "This app is not allowed to query for scheme weixinulapi"
我们要进行以下的一些配置:
Xcode配置
TARGETS–>Info–>LSApplicationQueriesSchemes 添加一个元素 weixinULAPI。
微信开放平台配置
格式要求为 https 开头,以“/”结尾,中间就是在 xcode 填写的域名。
https://域名/
第五步: 在AppDelegate里面向微信注册。
WXApi.registerApp(HMConstant.WeiXin.appid, universalLink: HMConstant.WeiXin.universalLink)
然后开始按照文档编写相关代码。
其他问题
有的手机成功了,有的手机就不行呢?
- 因为网络波动有可能会导致部分用户第一次安装时,无法下载apple-app-site-association文件,这个只能引导用户删除重装或者在迭代时修改Associated Domains配置告诉系统重新下载apple-app-site-association文件
- 另外一种可能是苹果服务器抽风导致
服务器换域名了怎么办?
当Associated Domains添加新的 Domains的之后,在app再次启动的时候抓包发现(不需要删除重装),苹果会给新添加的这个Domains发送一个请求,请求新Domain下的apple-app-site-association文件。
也就是说Associated Domains发生改变的话,系统是会知道的,这样就可以在迭代的时候删除旧的域名,添加新的域名了。
另外Domains的配置也可以使用通配符,例如
applinks:*.mywebsite.com
移动端配置好,web端如何配置?
一般从APP内分享出去的网页,可以被苹果用户和安卓用户同时查看,在这里需要由web端使用js判断当前所处的平台以及其系统。
如果是安卓用户,则显示安卓相关提示页面。
如果是苹果用户,那么分两种:
如果是9.0以上的系统,相关的 『在APP内打开』 按钮的链接配置的就是我们的Universal Link(通用链接)了,且该通用链接地址指向的是一个APP下载引导页面,那么当用户安装了APP,即可通过通用链接唤醒APP;如果用户没有安装app,那么就会跳转到通用链接指向的APP下载引导页面,达到最大化的客户导流。
如果是9.0以下的系统,则相应的『在APP内打开』 的按钮就会发一个跳转到我们APP URL Scheme的重定向,以实现在Safari中唤醒我们的APP。
当使用通用链接唤醒APP之后,手机右上角有一个小按钮,那个小按钮只有在iOS10.0以下才有,是可以引导用户跳转到Safari中,名字叫bread crumbs button(面包屑),当然也去不掉,并且当用户点过这个按钮后,再点击Universal Link(通用链接)不会直接打开对应的APP。
备忘录和safari中都可以打开app,怎么分享到其他app里面就不行了?
未跨域导致的,如:分享到微信的链接是https://www.mydomain.com/share.html,然后该网页中的『在APP内打开』 按钮配置的通用链接为https://www.mydomain.com/index.html,域名都是同一个。
跨域的意思是说,通用链接和调用通用链接的网页不要使用同一域名。即如果通用链接域名为www.mydomain.com,则调用通用链接所处的网页域名就不能是www.mydomain.com。