iOS 微信SDK升级之配置Universal Link

 

转:https://www.jianshu.com/p/470d023f47fc

 

原来公司老的App用的微信SDK为1.8.2,并不需要配置Universal Link,
然后最近有需求需要新建一个APP,发现苹果官方从2020年中起,新建的App里就不允许使用UIWebView了,否则打包上传后无法在Apple Connect中显示,邮箱会收到如下的提示:
ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability.
接下去检测项目中哪些代码或者插件使用了UIWebView,使用如下命令:

grep -r UIWebView .

 

发现微信SDK中使用了UIWebView,看来新的App已经无法使用1.8.2版本的微信SDK了,看了一下微信开放平台iOS相关文档,iOS的SDK从1.8.6.2开始移除UIWebView,也就是说,起码要升级到1.8.6.2,最新版本是1.9.1。

没办法,只能升级了,更新了项目中的SDK后发现初始化的方法变了:

// 原来
[WXApi registerApp: XXXX];

// 现在
[WXApi registerApp: XXXX universalLink: XXXX];

 

初始化需要Universal Link了,先不管他,直接设置空

[WXApi registerApp: XXXX universalLink: @""];

 

然后,App就无法拉起微信了。。

看来微信SDK现在一定要配置Universal Link了,我原来的理解是:Universal Link都是给需要从H5页面拉起App的需求用的,现在居然从我的App跳转微信App也需要配,没办法,他说要配那就只能配了。

Universal Link使用前提:

-有注册域名,并且支持https可通过 SSL 访问
-需要上传一个apple-app-site-association文件到域名根目录
-仅支持iOS 9及以上版本
-只支持真机调试

下面为Universal Link配置步骤

假设我们的域名为https://www.test.com

1、进入苹果开发者平台,登录账号,进入Identifiers,选择对应的App,进去后选中Associated Domains,然后Save。

 


 
Associated Domains

2、如果你是手动建的Profile描述文件,记得要去Profiles中更新描述文件,老的已经不能用了。如果是XCode自动生成的,需要参考下图去XCode中的Build Setting中把Code Signing Entitlements内容清空,让XCode再自动生成一份描述文件。(手动生成无需清空)
注:由于删掉该记录会导致capabilities数据移除,需要重新添加capability。

 


 
借用图片

3、在XCode工程中,添加Associated Domains,并将Universal Links域名上,这里的域名就为:applinks:www.test.com,不需要加任何前缀后缀

 

 

Domains

 

4、在info.plist中的LSApplicationQueriesSchemes里添加weixinULAPI

 


 
weixinULAPI

5、接下去配置apple-app-site-association文件,文件为json格式,但是要把.json后缀去掉。

在WWDC2019,苹果更新了apple-app-site-association文件的配置方法,推荐使用新写法,拥有更强的配置能力,参考链接
放一张参考图和一些引用的解释,途中灰色的就为老的配置方法。

 

 

参考图

 

  • apps 这个字段只有在 iOS 上有用,tvOS/macOS 这个字段可以忽略
  • details 字段结构大幅度变化
    • 以前是字典 appID 为 Key,现在是数组,并且支持 appIDs 这样的 key,可以一套配置适配多个 appID,大幅度减少工作量
    • 新增 components 字段,可以进一步约束 Universal Link 的生效条件
      • 可以通过 / 来配置支持的 path 格式条件
      • 可以通过 # 来配置支持的锚点条件
      • 可以通过 ? 来配置支持的字段条件
      • exclude 是排除字段,符合这个条件的 Universal Link 不生效

我们这边可以这样配置,配置https://www.test.com/ios/后面的任意页面都适用Universal Link

 

{
    "applinks": {
        //"apps": [],
        "details": [
            {
                //"appID": "TeamID.BundleID",
                "appIDs": [ "TeamID.BundleID1", "TeamID.BundleID2" ],
                //"paths": [ "/ios/*" ],
                "components": [
                 {
                      "/": "/ios/*",
                      // "/": "*",如果要https://www.test.com下所有的页面都适用就这样配,但是推荐还是分一下路径,毕竟一个公司下可能会有多款App
                      "comment": "Matches any URL whose path starts with /ios/"
                 }
               ]
            }
        ]
    }
}

 

TeamID如何获取
 

 

TeamID

6、配置后请后台管理人员把apple-app-site-association文件放在https://www.test.com根目录下,然后测试一下用浏览器打开https://www.test.com/apple-app-site-association,如果能显示文件内容或下载下来文件,则说明配置成功。

到这一步,真机重新运行App,然后真机打开Safari,浏览器输入https://www.test.com/ios/,页面虽然显示空白,但是往下拉一下,页面顶部已经显示了可以打开App了。

 

 

Safari

 

注:如果没效果,尝试删除一下App,重新运行。

7、去微信开发平台对应的应用中的iOS配置中配置一下Universal Link:https://apitest.mshchina.com/ios/

8、微信SDK初始化代码

[WXApi registerApp:微信AppID universalLink:@"https://apitest.mshchina.com/ios/"];

 

好了,再尝试调微信SDK,就可以在我们的App中拉起微信了。

遇到的坑

// URI scheme以及微信SDK处理iOS13以下版本的回调,走这个
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
   // 我们需要的判断跳转
   return YES;
}

// Universal Links以及微信SDK处理iOS13以上版本的回调,走这个,两个方法都要适配
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler { 
  // 我们需要的判断跳转
   return YES;
}

结束

 

 

 

 

 

转自: https://blog.csdn.net/weixin_42257984/article/details/124578470 

 

一、起始

微信iOS OpenSDK1.8.6版本开始,使用了iOS中的Universal Links。iOS 工程用pod一更新,使用到相关API的地方,全部报错,仔细一查看,API接口做了前面的改动,接口全部采用Universal Links的方式。看着工程到处报错飘红,要不还是用老版本SDK算了?心里犯嘀咕。细一想,后续很多其他第三方SDK可能都会采用这种方式使用,那干脆趁这次适配了吧。

于是根据微信开发者平台的SDK接入文档,网上找相关资料,但这个只有一端是无法完成这个对接工作的,需要配合服务器才能完整的对接成功。网上搜寻资料,要么就只有客户端资料,要么就只有服务器端的资料,需要几篇组合起来,才能知道一个完整的脉络。

非常有幸客户端和服务器端都还算熟悉,能把网络上片段式组合起来,完整的串联起来。也深深体会到,现在不再是造轮子创新的时代,而是能把片状散碎的各个点组合起来,组合串联式的贯通成完整体系。

 

二、iOS客户端配置

2.1、环境要求

iOS客户端的配置相对而言比较简单,需要把微信开发者平台文档中的环境和各个说明熟读下。简单概况下就是三点:

特别注意:我们的iOS项目以前已集成微信OpenSDK,详细的SDK集成,可以参照官网步骤,这里针对Universal Links的适配。

1、SDK版本: SDK1.8.6或以上

2、微信版本: 7.0.7或以上

3、系统版本: iOS12或以上

微信开发者平台iOS SDK接入文档:

https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html


2.2、确认微信的Universal Links正常

在手机Safari微信的Universal Links链接地址,确保openSDK与微信双向使用Universal Links通信。

https://help.wechat.com/app/

下拉查看是否有打开微信入口(如下图)。若无入口,可能是由于系统拉取微信Universal Links失败,请检查手机网络状态是否正常,或更新/重装微信。

 

成功获取微信Universal Links

2.3、在iOS项目配置我们自己的Universal Links

 

 

添加Universal Links步骤图(xcode 11.2)

详细的操作步骤:

特别注意:操作的xcode版本为 11.2,xcode版本不同,设置面板有差异,设置步骤大体相同。

1、打开iOS项目工程,左边现在工程项目;

2、右边选择项目工程的 "Targets";

3、选择 "Signing & Capablities" Tab选项卡;

4、点击 "+Capability" 添加 "Associated Domains";

5、在搜索面板中搜索 "Associated Domains",点击添加;

6、在面板中增加了"Associated Domains"设置项,点 "+",增加Universal Link域名;

7、编辑设置内容为:applinks:app.{你的域名}.com。

特别注意:这个域名与后续服务器配置的域名一一对应,且域名必须是支持SSL即https的域名。

2.4、Xcode 设置 URL scheme

如果以前集成了SDK,以前有增加 "weixin" ,新版SDK新增了 "weixinULAPI"。

详细设置步骤:

 

 

设置URL scheme

1、在xcode中,选择项目工程设置项,选中“TARGETS”一栏,在 “info”标签栏;

2、在“LSApplicationQueriesSchemes“配置中,添加 ”weixin“ 和 ”weixinULAPI“。

2.5、微信开发者平台,管理后台配置应用的Universal Links

登录微信开发者管理后台,切换到“管理中心”,选择“移动应用”,查看应用的详细信息 。

 

 

管理中心查看应用详情

在应用详情 “开发信息” 中点击 “修改”

 

 

修改应用开发信息

在应用开发信息中,修改 “Universal Links” 信息,设置完保存。这里用到的Universal Links为刚才在xcode设置的域名:https//:app.{你的域名}.com/edgefix/

!!!:特别注意:SDK Api用到的Universal Links为服务器后台配置给定的URL,且与微信开发者平台设置的Universal Links一一对应,缺一不可。

 

 

修改应用“Universal Links” 信息

2.6、修改项目工程报错的Api接口

常用的API接口被修改,在用到的地方适配把API调整过来。这里用到的Universal Links为刚才在xcode设置的域名:https//:app.{你的域名}.com/edgefix/

特别注意:SDK Api用到的Universal Links为服务器后台配置给定的URL,且与微信开发者平台设置的Universal Links一一对应,缺一不可。

!!!:链接地址后面的斜杠不能丢 “ / ” ,微信回调的时候用于拼接,在微信开发者管理后台的配置一一对应。

工程代码中配置的全局Universal Links变量

微信开发者平台配置的Universal Links

 

 

向微信终端程序注册第三方应用接口

 

 

处理微信通过Universal Link启动App时传递的数据

 

 

微信回调接口,增加了回调block

2.7、处理Universal Links方式回调

“AppDelegate” 新增加回调方式,实现代理,处理Universal Links方式回调。

 

 

处理Universal Links方式回调

回调的链接格式:

https//:app.{你的域名}.com/edgefix/{微信AppId}/{微信业务类型}?{微信回调返回的参数}

温馨提醒:如果有多个Universal Links回调,可以根据链接回调返回的参数进行更严谨的逻辑判断,以免造成不必要的逻辑Bug。

我这里可以debug,是已经完整的配置成功,先演示下返回的结果数据。

 

 

debug模式产科微信授权回调的信息

至此客户端到此配置完毕,特别关键的服务器端。很多客户端开发人员,不知道怎么和服务器交流这个事情,很难有完整串联起来的。相处比较融洽的团队还好,遇到踢皮球式的团队,联调起来真是够折腾和费劲。

三、服务器配置

步骤概要:

1、设置域名解析,这里暂不涉及CDN相关,与前面对应的域名,最好是备案好的域名;

2、申请域名SSL证书,这个非常关键,很多同学卡在这里;

3、以Nginx为例配置域名解析;

4、测试Universal Links域名有效性。

3.1、阿里云域名解析

准备域名,Universal Links要求是https格式的链接地址,这里以阿里云为例,配置相关域名。

在阿里云面板中找到域名解析,在域名解析设置中,选择 “添加记录”,填写服务器端信息,保存域名信息。

 

 

添加域名解析信息记录

 

 

添加成功后的记录显示

3.2、申请域名的SSL证书

这里以免费的SSL证书为例,阿里云的免费SSL已经有数量限制。申请证书地址:https://freessl.cn ,申请注册一个账号,就可以开始申请证书了。

在freessl中输入需要申请证书的域名,选择免费域名,选择创建免费的SSL证书。

 

 

填写域名证书信息

填写你的证书邮箱,其他选项默认即可,点击创建。

 

 

邮箱和证书信息

如果没有安装KeyManager,先安装KeyManager,再点击 “打开KeyManager”。

 

 

安装或者打开KeyManager

输入你设置的KeyManager密码,CSR生成成功后,在刚刚的freessl.cn页面点击继续。

 

 

输入你设置的KeyManager密码

 

 

CSR生成成功后,在刚刚的freessl.cn页面点击继续

把相应的DNS记录值,在阿里云添加DNS域名解析,记录类型为TXT,其他值按下图箭头指向的值,配置完域名解析,点击freessl.cn中的验证,等一会儿,证书即可生成成功。

 

 

配置DNS域名解析,验证证书

 

 

 

阿里云域名证书DNS解析记录

证书生成成功,保存到KeyManager中,把证书导出即可。

 

 

证书生成成功,保存到KeyManager中

点击导出证书,在KeyManager中导出刚刚生成域名的证书。我们这里使用Nginx,所以选择导出Nginx域名证书。

 

 

在KeyManager中导出刚刚生成域名的证书

 

 

导出Nginx域名证书

 

 

证书已成功导出

3.3、在服务器Nginx配置域名

把刚下载域名的证书上传到服务器的Nginx目录中。

 

 

上传证书到服务器

 

 

新建域名配置文件

在Nginx目录 /usr/local/nginx/html 下创建 apple-app-site-association 文件,内容为:

{
"applinks": {
"apps": [],
"details": [
{
"appID": "TeamId.BundleId",
"paths": [
"/edgefix/*"
]
}
]
}
}


特别注意:

其中AppID替换成应用的TeamId和BundleId。

appID内容为在苹果开发者平台获得 https://developer.apple.com,苹果开发者的TeamId 和 应用的BundleId。

点击Identifiers 选项 -> 选择应用的项目信息

Paths对应微信开发者管理后台对应的URI链接,一一对应。

 

 

苹果开发者后台

 

 

开发者后台获取的TeamId和BundleId

域名配置内容具体如下,下面的配置 /apple-app-site-association 对应上面的配置文件

server {
listen 80;
server_name app.${你的域名}.com;

rewrite ^(.*)$ https://$host$1 permanent;
}

server {
listen 443 ssl;
server_name app.${你的域名}.com;
ssl_certificate ssl/${你的证书}.crt;
ssl_certificate_key ssl/${你的证书}.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;

charset utf-8;
access_log logs/app_com_access.log main;
include proxy.conf;

location /apple-app-site-association {
alias /usr/local/nginx/html/apple-app-site-association;
}

location ~ ^/(WEB-INF)/ {
deny all;
}

location ~ \.(php|asp|aspx) {
deny all;
}
}

 

把域名配置添加到 Nginx主配置文件中 nginx.conf

http {
include mime.types;
default_type application/octet-stream;

......

include servers/app.${你的配置文件}.conf;
}

 


配置好以后,在Nginx的 sbin目录下,重新reload下配置文件,生效刚刚的配置。

nginx -s reload

 

3.4、请求校验是否配置成功

请求访问链接 https://app.你的域名.com/apple-app-site-association 如果有如下内容返回,或者可以下载该文件,说明Nginx配置成功。

 

 

配置文件可以访问和下载

在iOS手机安装刚才配置的应用,用自带的浏览器Safari中访问https//:app.{你的域名}.com/edgefix/,下拉显示了打开我们应用的入口,说明我们应用端配置成功。

 

 

Safari浏览器打开,打开App入口
————————————————
版权声明:本文为CSDN博主「飞鸽FlyGo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42257984/article/details/124578470

 

 

 

以下的参考中,apple-app-site-association都是旧的写法,流程一样

Universal Links踩坑之旅 https://www.jianshu.com/p/2a1445a49db4

通用链接(UniversalLink)配置详细流程 https://www.jianshu.com/p/4c96b54ef8d1

Universal Link的apple-app-site-association填写appID最正确的方法 https://blog.csdn.net/jifaliwo123/article/details/120868104

Universal Link配置 https://www.jianshu.com/p/91a722dfb084

 

Universal Link通用链接(多个app)+配置微信 https://www.jianshu.com/p/2b9eb1fcffb3

iOS universal links同一个域名配置多个app解决方案 https://www.jianshu.com/p/dfd771e4d9f6

 

App Search API Validation Tool 链接:appsearch-validation-tool

重要的
Apple 的内容交付网络会apple-app-site-association在 24 小时内为您的域请求文件。设备在应用安装后大约每周检查一次更新。

 

xcode Associated Domains 中配置的链接是否要带斜杠 /,如https://www.test.com/, 还是在微信的配置中才加的斜杠?

xcode中应该是不用加的,不然苹果请求apple-app-site-association访问的链接https://www.test.com//apple-app-site-association 的,这是后台看到的请求链接,要注意。

 

 

 转:https://www.jianshu.com/p/858eacf703c6

iOS 微信 解决两次跳转

 

其他一些参考:

微信分享二次跳转 https://www.jianshu.com/p/b7eb10b2d3cf

 https://www.jianshu.com/p/a6197e0d2f1f

https://www.jianshu.com/p/bebca03dc62b

 https://www.jianshu.com/p/533b159feab4

https://blog.csdn.net/weixin_33725270/article/details/93696791

 

AppLinks使用详解 Android App Links   https://www.jianshu.com/p/49d9b2c54c64

 

 

在苹果开发者中心开启Associated Domains权限步骤 https://www.jianshu.com/p/604ae8baea0b

 

posted @ 2022-06-15 10:25  LiuZX_贤  阅读(1717)  评论(0编辑  收藏  举报