這篇文章主要講從微信或者瀏覽器點擊鏈接宣蠕,跳轉(zhuǎn)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就是回調(diào)onReq(_ req: BaseReq)的地方,而這個地方抒倚,需要把這個方法拋出去到你使用的類里褐着,而不是AppDelegate;所以delegate寫這個單例而不是寫self托呕,單例里需要寫兩個回調(diào)方法
//微信
class WXApiManager:NSObject {
static let shared = WXApiManager()
}
extension WXApiManager:WXApiDelegate{
func onReq(_ req: BaseReq) {
//onReq是微信終端向第三方程序發(fā)起請求含蓉,要求第三方程序響應污呼。根據(jù)H5給的extinfo數(shù)據(jù)做相應處理就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) {
//支付結(jié)果回調(diào)
}
}
extension WXApiManager {
//檢查用戶是否已經(jīng)安裝微信并且有支付功能
private func checkWXInstallAndSupport() -> Bool {
if !WXApi.isWXAppInstalled() {
// MBProgressHUD.showInfo("微信未安裝")
return false
}
if !WXApi.isWXAppSupport() {
// MBProgressHUD.showInfo("當前微信版本不支持支付")
return false
}
return true
}
}
注:使用delegate的時候一定要統(tǒng)一到WXApiManager里做處理十办,系統(tǒng)回調(diào)給微信的代理入口都是 WXApiManager.shared就OK
重點:微信delegate的唯一性,不要給微信的delegate到處設置“self”娘侍,這樣回調(diào)回來就找不到代理方法了着降,出現(xiàn)onReq(_ req: BaseReq)方法不走的問題2钣汀!所以要單獨創(chuàng)建一個WXApiManager單例作為代理回調(diào)鹊碍,在WXApiManager里面處理代理回調(diào)
如本文解決了您的問題厌殉,歡迎點贊、收藏喲3薰尽9薄!