Swift(八):完成Sina授权,获取accessToken

公共文件定义 Sina 的分发的 key

//
//  Global.swift
//  swift-AFNetworking
//
//  Created by HMC on 16/8/10.
//  Copyright © 2016年 SKing. All rights reserved.
//

import Foundation

let AppKey = "2259417197"
let AppSecret = "d46412dd47e35a075a645d33618a8007"
let redirect_uri = "http://www.jianshu.com"

授权页加载,所用的网络请求已经在上一篇笔记中完成,不懂请查看.

//
//  AuthViewController.swift
//  swift-AFNetworking
//
//  Created by HMC on 16/8/10.
//  Copyright © 2016年 SKing. All rights reserved.
//

import UIKit
import SVProgressHUD

class AuthViewController: UIViewController {
    
    @IBOutlet weak var webV: UIWebView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        //设置 navigationController
        setNav()
        //加载 webview 的授权
        authorToSina(AppKey, appURL: redirect_uri)
        
    }

}
// MARK: - 控制器NavigationController的设置
extension AuthViewController {
    
    private func setNav(){
        
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "返回", style: .Plain, target: self, action: #selector(back))
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动登录", style: .Plain, target: self, action: #selector(autoLogin))
        
    }
    //返回
    func back() {
        dismissViewControllerAnimated(true, completion: nil)
    }
    //自动登录
    func autoLogin() {
        //思路:注入 js 代码到 webView
        let jsString = "document.getElementById('userId').value='15225124020';document.getElementById('passwd').value='自己账户的密码';"
        webV.stringByEvaluatingJavaScriptFromString(jsString)
        
        
    }
    
    func authorToSina(appkey:String,appURL:String) {
        
        webV.loadRequest(NSURLRequest(URL: NSURL(string: "https://api.weibo.com/oauth2/authorize?client_id=\(appkey)&redirect_uri=\(appURL)")!))
        
    }
}


//MARK:- webView 代理
extension AuthViewController: UIWebViewDelegate{
    
    func webViewDidStartLoad(webView: UIWebView) {
        SVProgressHUD.show()
    }
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
    }
    func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
        SVProgressHUD.dismiss()
    }
    //
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        guard let url = request.URL else {
            
            return true
        }
        guard url.absoluteString.containsString("code=")else {
            
            return true
        }
        
        let separateArray = url.absoluteString.componentsSeparatedByString("code=")
        //获取 code
        let code = separateArray.last
        getAccessToken(code!)
        print(code)
        return false
        
    }
    
}

// MARK: - 用sina 返回的 code 获取 accessToken
extension AuthViewController {

    private func getAccessToken(code : String) {
        
        let staticURL = "https://api.weibo.com/oauth2/access_token"
        //"grant_type":"authorization_code" 固定写法
        let parameters = ["client_id":AppKey, "client_secret":AppSecret, "grant_type":"authorization_code", "redirect_uri":redirect_uri, "code":code]
        AFNetworkingManager.shareObject.requestData(.POST, urlString: staticURL, parameters: parameters) { (result, error) in
            
            print(result)
            
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,111评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,083评论 19 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,635评论 4 61
  • 躺在他乡的街道上 心裏孤單得放不下一盏 空虛的路灯 归路 已是最大的賭注 输了 灵魂有个安放的去处⋯⋯ 願望 終於...
    平天下之文世界阅读 3,493评论 6 11
  • 目录/上一章 文/小雪七 转眼间九年的时间已经过去,物是却不人非。 古家修炼场内 一群人正围着一个娇...
    小雪七阅读 3,265评论 0 0

友情链接更多精彩内容