21、iOS-Universal Link 接入与微信分享的配置

接入 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。

文章原地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值