这篇文章主要讲从微信或者浏览器点击链接,跳转APP以后的操作及遇到的问题,至于APP分享到微信,大家可以按照文档一步一步集成就好了https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html,有疑问可以留言
我们先来看一下效果
1.微信返回拉起我们的应用是在AppDelegate里面的这个方法
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
if (url.absoluteString).contains("wechat") {
let handleUrlStr = url.absoluteString
if let handleUrl = URL(string: handleUrlStr) {
return WXApi.handleOpen(handleUrl, delegate: WXApiManager.shared)
}
}
return false
}self
这个方法需要传一个delegate,这个delegate就是回调onReq(_ req: BaseReq)的地方,而这个地方,需要把这个方法抛出去到你使用的类里,而不是AppDelegate;所以delegate写这个单例而不是写self,单例里需要写两个回调方法
//微信
class WXApiManager:NSObject {
static let shared = WXApiManager()
}
extension WXApiManager:WXApiDelegate{
func onReq(_ req: BaseReq) {
//onReq是微信终端向第三方程序发起请求,要求第三方程序响应。根据H5给的extinfo数据做相应处理就ok了
let launchReq = req as? LaunchFromWXReq
let msg = launchReq?.message
guard let extinfo = msg?.messageExt else { return }
if if_isLogin() {
let currentVC = if_getTopViewController()
currentVC?.if_openWebVC(extinfo)
}
}
func onResp(_ resp: BaseResp) {
//支付结果回调
}
}
extension WXApiManager {
//检查用户是否已经安装微信并且有支付功能
private func checkWXInstallAndSupport() -> Bool {
if !WXApi.isWXAppInstalled() {
// MBProgressHUD.showInfo("微信未安装")
return false
}
if !WXApi.isWXAppSupport() {
// MBProgressHUD.showInfo("当前微信版本不支持支付")
return false
}
return true
}
}
注:使用delegate的时候一定要统一到WXApiManager里做处理,系统回调给微信的代理入口都是 WXApiManager.shared就OK
重点:微信delegate的唯一性,不要给微信的delegate到处设置“self”,这样回调回来就找不到代理方法了,出现onReq(_ req: BaseReq)方法不走的问题!!所以要单独创建一个WXApiManager单例作为代理回调,在WXApiManager里面处理代理回调
如本文解决了您的问题,欢迎点赞、收藏哟!!!