iOS - 集成ShareSDK/友盟分享之后,導(dǎo)致原生微信登錄不走回調(diào)的解決方法

項目涉及微信登錄、微信分享、微博分享、Facebook分享、Twitter分享。

使用 ShareSDK 的微信登錄方法之前,需配置微信App 的 Secret,然而登錄之后 ShareSDK 返回的 token 不是后臺想要的,導(dǎo)致調(diào)用后臺的登錄方法報錯。(ShareSDK 的微信登錄 跟 原生的微信登錄方法返回的 token 不同)

所以我只能用原生的微信登錄方法,但是在集成了 ShareSDK 的情況下調(diào)用微信登錄之后,死活不走 WXApiDelegate(未集成 ShareSDK 之前會走 WXApiDelegate)。

由于 Twitter 分享的文檔都是英文,F(xiàn)acebook 分享之前也沒做過,我懶得一個個去搞所以就換成了友盟分享,然而在集成了友盟分享的情況下,調(diào)用原生的微信登錄方法之后也是不走 WXApiDelegate。然后我看了下微信SDK源碼之后換了一個方法:

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

并且在登錄界面實現(xiàn)了微信代理方法:


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

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

這時終于走了 AppDelegate 的 WXApiDelegate。使用友盟分享SDK實現(xiàn)了微信分享、微博分享、Facebook分享、Twitter分享功能,使用原生的微信登錄接口了實現(xiàn)后臺登錄。

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

微信分享 和 微信登錄的回調(diào)都在 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: 設(shè)置系統(tǒng)回調(diào)
    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 {//登錄成功
                //調(diào)用后臺的登錄接口 
            } 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 }

        //調(diào)用微信原生的登錄接口
        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("-->> 微信代理方法")
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 友盟能實現(xiàn)分享功能,友盟+申請第三方賬號的目的: 進(jìn)行分享、授權(quán)操作需要在第三方平臺創(chuàng)建應(yīng)用并提交審核,友盟...
    CoderZb閱讀 9,918評論 8 60
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,872評論 25 709
  • 在iOS開發(fā)中,當(dāng)我們需要集成多個平臺分享時,多數(shù)情況下我們會通過友盟,ShareSDK等第三方的分享平臺來加快開...
    蘋果防腐指南閱讀 9,295評論 5 19
  • 沒錯是我我又來開坑了。 這篇文看題目就知道是根據(jù)月餅大大的神視頻《鴻》寫出來的,沒有看過的請一定要去看好嗎?。。。?..
    不是絞絲兒閱讀 430評論 0 1
  • “三十不豪,四十不富” 這是我26歲時候跟劉老板提過的一個理論,轉(zhuǎn)眼我已經(jīng)不再是二十啷當(dāng)歲的人,站在30歲的這個門...
    羅布泊沒有眼淚閱讀 189評論 0 0

友情鏈接更多精彩內(nèi)容