開発合宿で OAuth 認証の API を使う iOS サンプルアプリを作った #mokumoku_onsen
1/9(土)〜11(月)で開発合宿に参加してました。
作ったもの
Swift の勉強のため、 OAuth 認証の Web API を使う iOSアプリを作りました。
スクリーンショット
最初のページ
OAuth 認証のあと
コード
コードは GitHub に置いてあります。
抜粋
// AppDelegate.swift class AppDelegate: UIResponder, UIApplicationDelegate { func application(application: UIApplication!, openURL url: NSURL!, sourceApplication: String!, annotation: AnyObject!) -> Bool { if (url.host == "oauth-callback") { OAuthSwift.handleOpenURL(url) } return true } }
OAuthSwift の README に従って、AppDelegate にメソッドを追加する。
// ViewController.swift import OAuthSwift class ViewController: UIViewController { @IBAction func signupWithOAuth(sender: AnyObject) { let oauthswift = OAuth2Swift( consumerKey: "<Client ID>", consumerSecret: "<Client Secret>", authorizeUrl: "https://github.com/login/oauth/authorize", accessTokenUrl: "https://github.com/login/oauth/access_token", responseType: "code" ) oauthswift.authorizeWithCallbackURL( NSURL(string: "oauth-sample://oauth-callback")!, scope: "", state:"OAuthSample", success: { credential, response, parameters in print(credential.oauth_token) let defaults = NSUserDefaults.standardUserDefaults() defaults.setValue(credential.oauth_token, forKey: "oauth_token") let nextVC = self.storyboard?.instantiateViewControllerWithIdentifier("DashBoard") nextVC?.modalTransitionStyle = .CrossDissolve self.presentViewController(nextVC!, animated: true, completion: nil) }, failure: { error in print(error.localizedDescription) } ) } }
OAuth 認証を始めるためのボタンを置いて、クリックしたときの処理をこんな感じで書いた。
- access_token を userDefaults に保存
- シーンの移動
// DashBoardViewController.swift import Alamofire class DashBoardViewController: UIViewController { @IBOutlet weak var access_token: UILabel! @IBOutlet weak var apiResult: UITextView! override func viewDidLoad() { super.viewDidLoad() let defaults = NSUserDefaults.standardUserDefaults() access_token.text = defaults.stringForKey("oauth_token") // Do any additional setup after loading the view. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func clickUser(sender: AnyObject) { apiResult.text = "" Alamofire.request(.GET, "https://api.github.com/user", parameters: ["access_token": access_token.text!]) .responseJSON { response in if let json = response.result.value { self.apiResult.text = json.description } } } }
OAuth 認証後の画面でボタンを押すと、 /user
の API を実行した結果を画面に表示している。
まとめ
Swift 初心者なのでこのぐらいの機能でも結構時間がかかってしまった。もっとコードを書いて、少しずつ iOS アプリ制作に慣れたい。