有项目使用到了IOS移动应用跳转微信小程序支付的 因为对接合作的银行费率低没有移动应用SDK于H5支付SDK 无奈只能使用此方式 官网文档写的很简洁明了
第一步登录苹果开发者中心配置
1.登录苹果开发者中心 打开 Associated Domains
2.在ios项目里面配置 applinks,applinks:你的域名,比如 applinks:baidu.com ,baidu.com就是域前面是固定格式(不要https://,不要加路径path)
第二步 服务器配置《必须配置》
1)创建一个json文件,名称必须为 apple-app-site-association,⚠️该文件不可带 .json 的后缀名
apple-app-site-association 文件必须放在https服务器的根目录下,例:https://baidu.com 这个路径下 ⚠️一定是根目录,也就是说该文件必须是一级目录,供下载使用
- apple-app-site-association 文件格式:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "teamID.bundleId",
"paths": ["*"]
}
]
}
}
appID 格式为 teamID.bundleId形式,比如说我的teamID是12324,<查看tameID如图>bundleId是com.test.app
那么我的appID就是:12324.com.test.app。
paths:使用*配置,则整个网站都可以使用
他是用来告诉safari(APP)那些是Universal Links。例如:https://www.baidu.com 是你的域名,path配置为["/test/*"],那么你在手机里safari打开https://www.baidu.com/test/xxx就会有app打开提示 试验图就不弄了 自行验证
验证apple-app-site-association文件 https://search.developer.apple.com/appsearch-validation-tool/ 显示如图4 则成功了有问题自行查看苹果官方文档App Search Programming Guide: Support Universal Links
第三步 集成微信sdk
集成前先简单的介绍下
Universal Links
要对接最新的微信sdk,你必须要了解一下Universal Links是什么,因为最新sdk根据Universal Links来判断来源app是否可信。
IOS主流跳转方案有两种:
1:Scheme
2:Universal Links
Scheme的协议是由开发者完全自定义,同时访问失败没有任何内容可以展现,所以IOS9就引入Universal Links。Universal Links 是通过域名下apple-app-site-association来确定app,因为域名又必须是https又不会重复,还能当作地址来访问网页,解决了上述两个问题。
1.官方sdk下载集成文档介绍https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Launching_a_Mini_Program/iOS_Development_example.html
2.以上步骤操作集成完过后下面我们开始接入sdk 导入头文件 WXApi.h
- 调用微信api注册我们的appid 与universalLink
universalLink 你的域名比如百度 如下
[WXApi registerApp:@"微信appid 不是小程序id" universalLink:@"https://baidu.com/"];
在AppDelegate实现实现以下方法 <如果项目里面有集成聚合sdk,比如友盟分享,可以用聚合的不用实现以下 个别方法了>
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
options:(NSDictionary<NSString *,id> *)options {
return [WXApi handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [WXApi handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [WXApi handleOpenURL:url delegate:self];
}
//对应我们配置的 Universal Links
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler
{
return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}
接下来开始测试
下面遇到一个坑,小程序是前段开发的就问他小程序的userName是多少,前段妹子直接报了小程序的名字,我再三确认他说小程序的userName就是小程序的名字。好吧就开始测试了。微信登录分享都正常未读小程序跳转不过去。
最好查阅资料才发现小程序的userName就是小程序的初始id 登录小程序开放中心找到点击设置
查看方法如图
WXLaunchMiniProgramReq *launchMiniProgramReq = [WXLaunchMiniProgramReq object];
launchMiniProgramReq.userName = @"小程序的初始id";
launchMiniProgramReq.miniProgramType = WXMiniProgramTypeRelease;
return [WXApi sendReq:launchMiniProgramReq completion:nil];
当遇到报错weixinULAPI://" -error:"This app is not allowed to query for scheme weixinulapi...时漏写白名单了噢
如需配置微信sdk相关
其中links地址要带上https://(看微信提示文字即可)
-
配置Url Type
填入微信开放平台对应的appid即可
如果遇到集成后每次跳转小程序都跳转两次 自检不通过 可能是apple-app-site-association服务器上没配置对 官方要求在服务器跟目录建.ewll-know目录但是这个目录是Linux的隐藏文件夹访问不到,最终需要的都是配置APPID的json串 所以解决方案可以为配置Nginx代理 将配置好的json传代理为HTTPS通用链接
// 123.baidu.wqeq.qweq 为需要修改的APPid path可以为当前的*
location /apple-app-site-association {
charset UTF-8;
default_type text/html;
return 200 '{\"applinks\": {\"apps\": [],\"details\": [{\"appID\": \"123.baidu.wqeq.qweq\",\"paths\": [\"*\"]}]}}';
}
location /apple-app-site-association {
charset UTF-8;
default_type text/html;
alias E:/XXX/XXX/apple-app-site-association;
}
如果遇到集成后跳转小程序后在回跳APP流程中止 说明没有实现全部微信的方法请查看官方文档
其余的自行验证