JavaScriptプログラマがSwift iOSアプリを2週間で作って公開してみた〜その4 Login with Twitter Fabric〜


JavaScriptプログラマー(JSer)がSwiftデビューして、ただ作りたいアプリを作ってみたシリーズ第4回目です。

前回はTwitter FabricというタイトルでTwitter Fabricの導入について紹介しました。Fabricで認証する処理をどのように実現するかの紹介です。

プロジェクトの確認

Fabricにログインしてみましょう。
Twitterのタブを選択するとxcodeのプロジェクトをビルドしてfabricをインストールされたアプリの情報が表示されます。

スクリーンショット 2015-01-30 8.48.10

このページ内で、認証時の画面に表示される文字列の変更や、Consumer Key (API Key)やConsumer Secret (API Secret)の確認ができます。

前回のご紹介した導入方法で、ビルドするだけで簡単にfabric frameworkをインストールすることができるのですが、新規プロジェクトで試すごとに新規アプリケーションがこのページに追加されていきます。

もし消す必要がある場合は、左側の設定のタブでFabric Appを削除することができます。
スクリーンショット 2015-01-30 8.44.02

APPSを選択すると、リストが表示されます。

スクリーンショット 2015-01-30 8.46.04

対象のアプリを選択して右上のDelete Appボタンで消すことができます。

スクリーンショット 2015-01-30 8.43.38

認証ボタンの設置

では認証ボタンを出して、ユーザーにTwitterへログインさせてみましょう。
OAuthの処理なんて一切気にする必要なく、めちゃくちゃ簡単に実装できます。

前回の記事でのセットアップが終わっていて、Fabricの中で対象のAppを選択します。そうすると機能を選べるので、Sign in with Twitterを選びます。

スクリーンショット 2015-01-31 10.54.25

以下のようにコードのガイドが表示されるので、それ通りにやれば動きます。

スクリーンショット 2015-01-31 10.54.36

AppDelegate.swiftで以下のようにframeworkをimportしてframeworkをロードして、画面遷移を実装します。(今回作ったアプリのコードを例として紹介しますので、fabricの紹介しているコードに少しだけ手を入れています。)

AppDelegate.swift

import Fabric
import TwitterKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // load Twitter framework
        Fabric.with([Twitter()])
        // Override point for customization after application launch.
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        // check if session already exists
        if let user = Twitter.sharedInstance().session()?.userName? {
            self.window?.rootViewController = MainTabViewController()
        }else{
            self.window?.rootViewController = LoginViewController()
        }
        self.window?.makeKeyAndVisible()
        return true
    }
}

まずはFabric.with([Twitter()])でframeworkをロードします。

その次にあるTwitter.sharedInstance().session()?.userName?の部分は、もしアプリ起動時に既にtwitterのセッションがある場合はmainのviewに遷移します。sessionがない場合はLoginViewControllerによるlogin pageに飛ばします。

LoginViewControllerは以下のようにします。

LoginViewController.swift

import Foundation
import UIKit
import TwitterKit

class LoginViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let logInButton = TWTRLogInButton(logInCompletion: {
            (session: TWTRSession!, error: NSError!) in
            if session != nil {
                UIApplication.sharedApplication().keyWindow?.rootViewController = MainTabViewController()
            }
        })
        logInButton.center = self.view.center
        self.view.addSubview(logInButton)
    }
}

上記のコードでログインボタンを設置して、callbackにMainTabViewControllerをrootViewControllerにセットしています。つまり、ボタンを押して認証が成功した後にMainTabViewControllerに遷移します。

⌘+Rで実行して、以下のように認証画面が出ればOK!

スクリーンショット 2015-01-30 9.23.13

クリックするとおなじみのログイン画面が表示されます。
スクリーンショット 2015-01-30 9.24.30

実際にログインしてみましょう。まだ何もないMainTabViewControllerに遷移すれば認証周りは完了です。

簡単!

次回は遷移先の画面であるUITabBarController & UINavigationControllerあたりの実装をしていきます。

TwitStockerのダウンロードはこちらから。
https://itunes.apple.com/en/app/twitstocker/id958798898?l=ja&ls=1&mt=8