调用 分享、登录、打开小程序 方法唤起微信后又自动返回到 APP,详见FAQ

姐妹篇 uni-app 云打包iOS微信SDK需要配置通用链接(Universal Links)

微信 下发最后通牒,在 2022年1月1日 前若没有将 SDK 升级到 1.8.6版本 及以上并配置 Universal Links,可能导致用户在您的 APP 内发起 微信支付 交易时,受到 风控措施 限制。

尊敬的xxx(公司名):
由于iOS13 回收 App 的 bundle ID 的能力,为了保证 App 支付来源的真实性和可认知性,微信支付在已有 Bundle ID 校验能力的基础上,增加了 Universal Links 校验能力。商户 App 发起支付时,若没有正确更新 SDK,会出现无 bundle ID、无 Universal Links 的情况。微信支付无法判定此类订单的交易来源 App,可能会出现实际使用商户号的来源和商户号所属的 App 不一致,导致商户号被利用于欺诈、赌博等违法违规行为,存在交易风险。为了保证交易安全,微信支付升级了微信支付 OpenSDK 版本,请您在2022年1月1日之前完成升级,并合理引导用户升级您的App。逾期未完成的,可能导致用户在您的APP内发起微信支付交易时,受到风控措施限制。如果贵司是自行开发的 App 支付功能,请联系贵司的 App 开发人员按以下指引完成升级;如果贵司是委托服务商或其他第三方公司开发的 App 支付功能,请联系服务商或第三方公司协助完成升级。iOS 版本微信 OpenSDK 版本升级指引: https://pay.weixin.qq.com/wiki/doc/apiv3/Practices/chapter4_1_1.shtml 如有疑问,您可通过微信支付技术支持邮箱 wepayTS@tencent.com 与我们联系。

创建 apple-app-site-association 文件

创建一个名为 apple-app-site-association 的文件(不带任何后缀),并写入以下代码

{
    "applinks": {
        "apps": [],
        "details": [{
            "appID": "ABCDEFGHIJ.com.wangquanwei.GankIO",
            "paths": ["*"]
        }]
    }
}

paths:用于过滤可以跳转到 App 的链接,可以是一个也可以是多个,最简单的方式是使用 * 通配符,表示允许该域名下的所有路径。(注意: paths 是大小写敏感的)
appID:TeamID + Bundle Id 的格式(例: ABCDEFGHIJ.com.wangquanwei.GankIO)
Bundle Id: 是项目的 Bundle Identifier
TeamID: 可以在开发者后台查看(迁移过主体的 APP请见FAQ 迁移过主体的 APP Universal links 不生效)

http://www.wangquanwei.com/wp-content/uploads/2019/12/1577590924-8AA9B10D-0C60-46FF-9FAC-AAE3A4A23824.jpeg?imageView2/1/w/1024/h/478/interlace/1/q/75#

创建完 apple-app-site-association 将其交给服务端或前端同学,让他们把 apple-app-site-association 放到网站根目录

注1: 网站必须支持 https,且不支持 重定向

配置 Universal Link

登录苹果开发者中心 https://developer.apple.com 开启 Associated Domains 服务
1、点击 Certificates, Identifiers & Profiles 按钮

http://www.wangquanwei.com/wp-content/uploads/2019/10/1571102075-48D4C80B-995B-4D0D-995C-FFED7B143045.jpeg

2、在 Certificates, Identifiers & Profiles 页面选择 Identifiers 中对应的 App ID
这里 GankIO 只是演示,具体以你的项目为准

http://www.wangquanwei.com/wp-content/uploads/2019/10/1571102375-FB36103A-D7B8-40FE-9EE0-89DC0F6E9C05.jpeg

3、点击对应的 APP ID 勾选 Associated Domains 并 保存 这里 GankIO 只是演示,具体以你的项目为准

http://www.wangquanwei.com/wp-content/uploads/2019/10/1571102805-543663E7-88C2-4097-BE8A-B9B2BC585ADD.jpeg

4、出现 Modify App Capabilities 弹窗 点击 Confirm

http://www.wangquanwei.com/wp-content/uploads/2019/10/1571102938-E467EC71-3592-460C-9B9A-B99AA99E7731.jpeg

Modify App Capabilities
Adding or removing any capabilities will invalidate any provisioning profiles that include this App ID and they must be regenerated for future use.

修改应用程序功能
添加或删除任何功能都将使包含此应用程序ID的任何设置配置文件无效,并且必须重新生成这些配置文件以供将来使用。

开启 Associated DomainsProfiles 里对应的文件将会变为 Invalid
点击被标为 Invalid 的行进入- EditSave 然后将文件下载下来替换掉本地已有的(如果本地有)

http://www.wangquanwei.com/wp-content/uploads/2019/10/1579094880-C8F6341F-B703-4497-B9E3-A83604D755C2.jpeg?imageView2/1/w/1024/h/483/interlace/1/q/75#

微信开放平台配置通用链接

1、登录微信开放平台 https://open.weixin.qq.com/
2、在 管理中心 页面的 移动应用 下找到已经申请的应用(没有申请应用请点击 创建移动应用 新建应用),点击 查看 打开应用详情页面。

http://www.wangquanwei.com/wp-content/uploads/2019/10/1571104946-C5E01E59-768E-4997-B7D0-3A52D83E74B3.jpeg

3、找到 开发信息 栏,点击 修改

http://www.wangquanwei.com/wp-content/uploads/2019/10/1571105058-5613CE0A-66C3-4201-A0CA-01A67242E673.jpeg

4、在 iOS应用 下的 Universal Links 项中配置应用的 通用链接

http://www.wangquanwei.com/wp-content/uploads/2019/10/1579096051-6CCAA507-8E2C-4FEE-8016-9A3662665DD8.jpeg?imageView2/1/w/1024/h/484/interlace/1/q/75#

注:https://www.wangquanwei.com/ 为能访问到 apple-app-site-association 文件的地址,记得换成你自己的

Xcode 配置 Associated Domains(域名)Xcode12为例

1、Targets -> Signing & Capabilities -> + Capability -> Associated Domains

https://img.wangquanwei.com/wp-content/uploads/2021/09/207435AC-5F20-4B31-AF00-4FD8D404DBB7.jpeg

2、在 Associated Domains -> Domains 填入可以访问到 Universal Link 的地址

https://img.wangquanwei.com/wp-content/uploads/2021/09/B5647936A8CE3D5C957C66104E6ACCA1.jpg

必须以 applinks: 开头

// 仅做参考,记得换成你自己的
applinks:www.wangquanwei.com

特别注意: apple-app-site-association 只在 app 第一次启动时才会去下载 apple-app-site-association 文件,所以如果测试没效果请删除 app 重新安装即可

FAQ

Q: 调用 分享、登录、打开小程序 api 唤起微信后又自动返回到 APP

A: 开发者在 registerApp 传入的 Universal links 不生效。

Universal links 失效的可能原因:

1、工程配置 Associated Domain 未打开或未添加 Universal links 域名
2、未在 微信开放平台 配置 Universal links 域名
3、apple-app-site-association 未上线或未按苹果要求放在服务器指定的路径下(域名根目录)
4、apple-app-site-associationUniversal linkspath 末尾没有加通配符*
5、apple-app-site-associationappID(teamID+bundleID) 与实际不符
6、apple-app-site-association 所在站点必须支持https且不支持重定向
7、apple-app-site-association 只在 app 第一次启动时才会去下载 apple-app-site-association 文件,所以请删除 app 重新安装
8、工程配置 Associated Domain 的格式不正确,必须以 applinks: 开头

// 仅做参考,记得换成你自己的
applinks:www.wangquanwei.com

9、未重写 AppDelegateSceneDelegatecontinueUserActivity 方法。
注意:适配了 SceneDelegateApp,系统将会回调 SceneDelegatecontinueUserActivity 方法,所以需要重写 SceneDelegate 的该方法。

// AppDelegate
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
    return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}

// SceneDelegate
- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity {
    [WXApi handleOpenUniversalLink:userActivity delegate:self];
}

建议使用自检函数排查,从微信SDK1.8.7版本开始(截止发文微信SDK版本为1.9.2),WXApi 新增了自检函数 checkUniversalLinkReady:,帮助开发者排查 SDK 接入过程中遇到的问题。

以下内容来自 https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html

//在register之前打开log, 后续可以根据log排查问题
[WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString *log) {
    NSLog(@"WeChatSDK: %@", log);
}];

//务必在调用自检函数前注册
[WXApi registerApp:APP_ID universalLink:UNIVERSAL_LINK];

//调用自检函数
[WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) {
    NSLog(@"%@, %u, %@, %@", @(step), result.success, result.errorInfo, result.suggestion);
}];

注意事项:

调用自检函数之前必须要先调用 registerApp:universalLink 接口, 并确认调用成功
自检过程中会有 Log 产生,可以先调用 startLogByLevel 函数,根据 Log 排查问题
会多次回调 block
仅用于新接入 SDK 时调试使用,请勿在正式环境的调用

WXULCheckStep值说明:

step = WXULCheckStepParams: 参数检查
step = WXULCheckStepSystemVersion: 当前系统版本检查
step = WXULCheckStepWechatVersion: 微信客户端版本检查
step = WXULCheckStepSDKInnerOperation: 微信SDK内部操作检查
step = WXULCheckStepLaunchWechat: App拉起微信检查
step = WXULCheckStepBackToCurrentApp: 由微信返回当前App检查
step = WXULCheckStepFinal: 最终检查

会依次回调这7个step,当回调了 WXULCheckStepFinal,说明检测通过,SDK 接入成功。 任一 step 回调的 result.succes s为 NO, 流程终止,后续不再回调,可以根据 result.errorInfo 的查看当前步骤错误的原因,根据 result.suggestion 修复问题.

以上内容来自 https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html

Q: 迁移过主体的 APP Universal links 不生效。

A: 对于迁移过主体的 APP Team ID 需要是旧主体下的 Team ID 具体信息可以在 debug 包的 embedded.mobileprovision 文件中进行确认。

来源: https://juejin.cn/post/7011427577164202015 评论区 用户nuomi1 的评论,侵删