小程序支持用APP直接调起。
在微信开放平台将APP与对应的小程序关联,关联成功之后就可以进入开发了。
APP中调起小程序的代码,来源于微信开发者文档:
WXLaunchMiniProgramReq *launchMiniProgramReq = [WXLaunchMiniProgramReq object];
launchMiniProgramReq.userName = userName; //拉起的小程序的username
launchMiniProgramReq.path = path; 拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
launchMiniProgramReq.miniProgramType = miniProgramType; //拉起小程序的类型
//[WXApi sendReq:launchMiniProgramReq];//1.8.5以前SDK
//1.8.6及以后的SDK用以下方法
[WXApi sendReq:launchMiniProgramReq completion:^(BOOL success) {
if (success) {
}else{
}
}];
其中的userName是小程序的原始id,不是小程序的名称
如果是用的openSDK1.8.6及以后的,一定要注意在AppDelegate中加入这段代码,不然会出现调起微信之后又回到APP中,无法真正调起小程序:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}
在openSDK1.8.6版本之后需要支持Universal Links,所以也要对APP配置Universal Links。
Universal Links就是一个通用链接,iOS9以上的用户,可以通过点击这个链接无缝的重定向到一个APP应用,而不需要通过safari打开跳转。如果用户没有安装这个app,则会在safari中打开这个链接指向的网页。
Universal Links配置比较简单,在服务器的根目录上传apple-app-site-association文件,服务器必须要支持https。apple-app-site-association里面是一段json。多个app可共用一个文件,在details里面写不同的appID,appID的格式为teamID.bundle identifier。paths实际上就是配置可以唤醒app的路径,和限制哪些路径不能唤醒app(路径前面加NOT:"NOT /app1path/test/*")。
{
"applinks":{
"apps":[],
"details":[
{
"paths":["/app1path/*"],
"appID":"teamID.app1的Bundle identifier"
},
{
"appID": "teamID.app2的Bundle identifier",
"paths": ["/app2path/*"]
}
]
}
}
文件配置好之后,要在Xcode中的Capabilities中打开Associated Domains,Domains填入applinks:服务器的域名,去掉https://(例如: applinks:aaa.bbb.com)。配置好之后,也要在苹果开发者中心的APP IDs中开启Associated Domains,然后重新配置下对应的描述文件,在Xcode中重新导入描述文件就可以了。
验证Universal Links是否配置好,可以在手机的safari中,输入配置好的地址(例如:https://aaa.bbb.com/app1path/),跳转之后下拉网页,看下是否有出现你APP的logo和打开按钮,如果出现了,就说明配置的Universal Links是正确的。如下图: