关于iOS13升级微信SDK适配UniversalLink原理和步骤

一.微信官方文档说明

关于openSDK1.8.6的更新说明

由于苹果iOS 13系统版本安全升级,为此openSDK在1.8.6版本进行了适配。 1.8.6版本支持Universal Links方式跳转,对openSDK分享进行合法性校验。

*建议开发者接入新版本SDK, 覆盖测试微信7.0.7或以上版本、iOS12或13,以验证所使用的接口的功能性和可用性。

不管你是友盟还是ShareSDK等等,只要是最新版的应该都需要这个参数,即使你的APP目前跳转微信没问题也,强烈建议趁早适配此方案,因为在最新iOS系统和微信版本上可能出现无法调起微信的情况!
微信更新1.8.6的SDK后,在delegate注册时多了一个universalLink参数(如下):

+ (BOOL)registerApp:(NSString *)appid universalLink:(NSString *)universalLink;

二.什么是UniversalLink

UniversalLink顾名思义(通用链接)与URL Schemes一样,都是跳转APP的一种方式。
简单来说就是一个URL,当用户在浏览器中访问此URL时,苹果会检测对应的APP是否已安装。
已安装则跳转到APP。
未安装则访问此URL实际内容。

为什么要用它呢?

微信之前是用URL Schemes方式跳转APP,在微信7.0.7版本和微信SDK1.8.6更新后,为了安全性等原因,改用universalLink方式。更新之后就必须用这种方式,要是不填universalLink,不管是分享、支付、登录都无法调起微信。
这里有几篇苹果官方文档的解释,使用谷歌浏览器翻译一下就好了,文章都不长,强烈建议都认真看一圈。我也是反复读了很多遍后才理解这玩意的。
支持通用链接
允许应用程序和网站链接到您的内容
启用通用链接
处理通用链接

三:配置UniversalLink的步骤

总体来说步骤还是比较多的,但其实都很简单,主要是要注意很多细节的东西,大概步骤如下(顺序不分前后)

1、让后台人员准备一个https的链接,一定要https的(微信硬性要求)

2、制作apple-app-site-association文件,并放置在准备好的链接根目录下

3、App Store应用管理和Xcode开启Associated Domains,并填写对应Domains

4、用GET请求测试该链接下的文件内容,并在safari浏览器中测试

5、微信开放平台和SDK注册方法填写相同UniversalLink

6、填写微信新的LSApplicationQueriesSchemes

7、回调测试

四:步骤详解

1.为什么要准备https的链接?其实苹果是支持http和https,但是微信要求是这样,这一步交给你的服务器人员去完成。
2 制作apple-app-site-association文件,并放在准备好的链接根目录下。请先看看苹果官方的解释(如下图)


WechatIMG115.png

大致意思就是苹果会在APP第一次安装启动时(仅第一次),访问你准备的链接下面此文件。(这里苹果其实会访问两次,第一次是.well-known子目录下,第二次才是根目录)

注:该文件若改动过,建议卸载重新安装,苹果重新主动请求

一般放在根目录下即可,若你的链接有重定向,建议尝试放置在.well-known子目录下,并且保证能GET请求到此文件,且文件不需要后缀名。

例如:以https://help.wechat.com为基础链接,则该文件请求路径为
https://help.wechat.com/apple-app-site-association
https://help.wechat.com/.well-known/apple-app-site-association

那么此文件的内容是什么呢?还是来看看官方的解释

其实就是一个json,apps数组不用管,details里面填入对应得appID和paths。

appID就是用前缀(Team ID)+bundleID的方式,在App Store应用后台可以查看此前缀


开发者账号后台.png

paths则是可访问APP的对应页面路径,APP Delegate有对应方法可以获取,更多关于paths的介绍这里不做过多撰述,下面有个例子,替换APPID和BundleID即可复制直接使用。

{
    "applinks": {
        "apps": [

        ],
        "details": [{
                "paths": ["*"],
                "appID": "TeamId.bundleId"
            },
            {
                "paths": ["*"],
                "appID": "TeamId.其他环境的bundleId"
            }

        ]
    }
}

ok,到这里apple-app-site-association文件就制作好了,把它交给你的后台人员,按照之前说的放到相应目录。并且使用GET请求进行测试,确保路径能正常访问,json格式正确-_-!,如图


Pasted Graphic 2.png

Pasted Graphic 3.png

3.去App Store应用管理开启Associated Domains


WechatIMG123.png

启用Xcode-Capabilities中的Associated Domains,以applinks:+你准备的UniversalLink的形式填写对应值。例如:applinks:help.wechat.com,注意此次应是裸的域名,不要加https或者文件名


WechatIMG124.png

4.一切就绪后即可在safari浏览器中测试。
卸载一次APP,build run一下,然后你就可以先在safari浏览器中测试走一波,把链接地址输入进去如https://help.wechat.com。页面加载完往下拉一下,看是否有打开APP的提示,如果有则配置成功!

WechatIMG125.png

5.以上步骤与微信毫无关系,但证明UniversalLink已经配置成功,可进行APP跳转。
接下来是微信开放平台和SDK注册方法填写相同UniversalLink,注意此次微信的要求https开头 /结尾,列如:https://help.wechat.com/

WechatIMG126.png

同理,在微信SDK注册方法中不管是友盟还是shareSDK填写的都应该和这个一样
//微信注册
[WXApi registerApp:wxID universalLink:@"https://help.wechat.com/"];
6.也许这个时候你迫不及待想去调起微信,结果一定是失败的,因为此次更新后,还要添加一个新的Schemes。

在Xcode中,在 “info”标签栏的“LSApplicationQueriesSchemes“添加weixin 和weixinULAPI(如下图所示)。


WechatIMG127.png

7.回调测试
当APP被UniversalLink调起后,可以在delegate中使用如下方法进行对应处理,获取相关paths信息等(这里使用了微信的处理方式)注:UniversalLink调起不执行application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options:等方法,而执行如下方法。

  • (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRest
    oring>> * __nullable restorableObjects))restorationHandler {
    return [WXApi handleOpenUniversalLink:userActivity delegate:self];
    }
    五、总结

配置的过程请一定要仔细,大致可分为2个阶段。
一、优先完成safari中测试,能提示打开APP
二、再配置微信相关内容
填写注意的地方:
假设你的链接是:https://help.wechat.com
GET请求地址应为
https://help.wechat.com/apple-app-site-association
https://help.wechat.com/.well-known/apple-app-site-association
Xcode-Associated Domains中应为
help.wechat.com
safari中测试应为
https://help.wechat.com
微信开放平台填写的和注册方法时应为
https://help.wechat.com/

温馨提示:

如果没有条件自己配置apple-app-site-association文件,可以直接到shareSDK等平台后台->分享设置 去配置UniversalLink信息。

做完这些后,应该就可以成功调起微信了,如果还有什么特殊的需求,建议多仔细阅读苹果官方文档,和微信更新的文档。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容