调用 分享、登录、打开小程序 方法唤起微信后又自动返回到 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 不生效)
创建完 apple-app-site-association 将其交给服务端或前端同学,让他们把 apple-app-site-association 放到网站根目录
注1: 网站必须支持 https,且不支持 重定向
配置 Universal Link
登录苹果开发者中心 https://developer.apple.com 开启 Associated Domains 服务
1、点击 Certificates, Identifiers & Profiles 按钮
2、在 Certificates, Identifiers & Profiles 页面选择 Identifiers 中对应的 App ID
这里 GankIO 只是演示,具体以你的项目为准
3、点击对应的 APP ID 勾选 Associated Domains 并 保存 这里 GankIO 只是演示,具体以你的项目为准
4、出现 Modify App Capabilities 弹窗 点击 Confirm
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 Domains 后 Profiles 里对应的文件将会变为 Invalid
点击被标为 Invalid 的行进入- Edit – Save 然后将文件下载下来替换掉本地已有的(如果本地有)
微信开放平台配置通用链接
1、登录微信开放平台 https://open.weixin.qq.com/
2、在 管理中心 页面的 移动应用 下找到已经申请的应用(没有申请应用请点击 创建移动应用 新建应用),点击 查看 打开应用详情页面。
3、找到 开发信息 栏,点击 修改
4、在 iOS应用 下的 Universal Links 项中配置应用的 通用链接
注:https://www.wangquanwei.com/ 为能访问到 apple-app-site-association 文件的地址,记得换成你自己的
Xcode 配置 Associated Domains(域名)Xcode12为例
1、Targets -> Signing & Capabilities -> + Capability -> Associated Domains
2、在 Associated Domains -> Domains 填入可以访问到 Universal Link 的地址
必须以 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-association 的 Universal links 的 path 末尾没有加通配符*
5、apple-app-site-association 的 appID(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、未重写 AppDelegate 或 SceneDelegate 的 continueUserActivity 方法。
注意:适配了 SceneDelegate 的 App,系统将会回调 SceneDelegate 的 continueUserActivity 方法,所以需要重写 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 的评论,侵删