iOS - 集成ShareSDK/友盟分享之后,导致原生微信登录不走回调的解决方法

项目涉及微信登录、微信分享、微博分享、Facebook分享、Twitter分享。

使用 ShareSDK 的微信登录方法之前,需配置微信App 的 Secret,然而登录之后 ShareSDK 返回的 token 不是后台想要的,导致调用后台的登录方法报错。(ShareSDK 的微信登录 跟 原生的微信登录方法返回的 token 不同)

所以我只能用原生的微信登录方法,但是在集成了 ShareSDK 的情况下调用微信登录之后,死活不走 WXApiDelegate(未集成 ShareSDK 之前会走 WXApiDelegate)。

由于 Twitter 分享的文档都是英文,Facebook 分享之前也没做过,我懒得一个个去搞所以就换成了友盟分享,然而在集成了友盟分享的情况下,调用原生的微信登录方法之后也是不走 WXApiDelegate。然后我看了下微信SDK源码之后换了一个方法:

After:
//调用原生的微信登录接口
let req = SendAuthReq.init()
req.scope = "snsapi_userinfo"
req.state = "123"
WXApi.sendAuthReq(req, viewController: nil, delegate: self)
Befor:
//调用原生的微信登录接口
let req = SendAuthReq.init()
req.scope = "snsapi_userinfo"
req.state = "123"
WXApi.sendReq(req)

并且在登录界面实现了微信代理方法:


// MARK: 微信代理方法
extension GMLoginView: WXApiDelegate {

    func onResp(_ resp: BaseResp!) {
        print("-->> 微信代理方法")
    }
}

这时终于走了 AppDelegate 的 WXApiDelegate。使用友盟分享SDK实现了微信分享、微博分享、Facebook分享、Twitter分享功能,使用原生的微信登录接口了实现后台登录。

只在集成友盟分享SDK的时候,同时集成微信SDK即可。

微信分享 和 微信登录的回调都在 AppDelegate 的 WXApiDelegate 中处理。

虽然不走 GMLoginView 的 WXApiDelegate ,但是这段代码却不得不写,否则就不走 AppDelegate 的 WXApiDelegate,不知道为什么会这样。

集成友盟分享SDK时的 AppDelegate.swift

class AppDelegate: UIResponder, UIApplicationDelegate {
 
    var window: UIWindow?
 
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
        self.configThirdSDK(launchOptions: launchOptions)
        return true
    }
    
    func configThirdSDK(launchOptions: [UIApplicationLaunchOptionsKey: Any]?) {
  
        //配置友盟分享
        UMSocialManager.default().openLog(true)
        UMSocialManager.default().umSocialAppkey = GMConst.kYoumengAppID
        UMSocialManager.default().setPlaform(.wechatSession, appKey: GMConst.kWechatAppID, appSecret: nil, redirectURL: nil)
        UMSocialManager.default().setPlaform(.sina, appKey: GMConst.kSinaAppID, appSecret: GMConst.kSinaSecret, redirectURL: nil)
        UMSocialManager.default().setPlaform(.twitter, appKey: GMConst.kTwitterID, appSecret: GMConst.kTwitterSecret, redirectURL: nil)
        UMSocialManager.default().setPlaform(.facebook, appKey: GMConst.kFacebookID, appSecret: nil, redirectURL: nil)
        
        //配置原生微信API
        WXApi.registerApp(GMConst.kWechatAppID, enableMTA: true)
    }
    
    // MARK: 设置系统回调
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
 
        let absoluteString = url.absoluteString
        if absoluteString.range(of: GMConst.kWechatAppID) != nil {
            return WXApi.handleOpen(url, delegate: self as WXApiDelegate)
            
        } else {
            return UMSocialManager.default().handleOpen(url, sourceApplication: sourceApplication, annotation: annotation)
        }
    }
    
    func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
         //代码同上一个方法   
    }
}

// MARK: 微信代理方法
extension AppDelegate: WXApiDelegate {
    
    func onResp(_ resp: BaseResp!) {
       
        if resp is SendMessageToWXResp { //微信分享
   
            if resp.errCode == 0 {//分享成功
                GMHudUtils.showHUD(title: "分享成功") 
            } else if resp.errCode == -2 { 
                GMHudUtils.showHUD(title: "分享失败") 
            }
            
        } else if resp is SendAuthResp{ //微信登录
    
            self.loginStatus = LoginStatus.none
            if resp.errCode == 0 {//登录成功
                //调用后台的登录接口 
            } else {
                GMHudUtils.showHUD(title: "登录失败")
            }
        }
    }
}
 

GMLoginView.swift

class GMLoginView: UIView {
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
 
    override func awakeFromNib() {        
 
    }
    
    @IBAction func loginBtnAction(_ sender: UIButton) {
        
        HUD.flash(.label("登录中..."), delay: 999) { _ in }

        //调用微信原生的登录接口
        let req = SendAuthReq.init()
        req.scope = "snsapi_userinfo"
        req.state = "123"
        WXApi.sendAuthReq(req, viewController: nil, delegate: self)
    }
}

// MARK: 微信代理方法
extension GMLoginView: WXApiDelegate {

    func onResp(_ resp: BaseResp!) {
        print("-->> 微信代理方法")
    }
}

你可能感兴趣的:(iOS - 集成ShareSDK/友盟分享之后,导致原生微信登录不走回调的解决方法)