Fabricをつかって
ユーザのツイート一覧を表示させてみました。
Fabricとは?
Twitter社が運営するモバイルアプリ開発向けのサービスで
大きく分けて
- twitter
- Twitterへのサインイン, Twitter APIの呼び出し, Viewの提供, SMS認証
- Crashlytics
- クラッシュ統計, リアルタイム分析, テスト配信
- MoPub
- 広告配信による収益化
の3つのモジュールで構成されています。
http://dev.classmethod.jp/smartphone/ios-fabric-sign-in-with-twitter/
より
今回はこのTwitterというモジュールを利用します。
インストール
- 「Get Started with Fabric」から登録
- 手順に従ってSDKをダウンロード
Fabricの設定
SDKを起動
SDKをアプリケーションホルダに入れて起動
登録したメールアドレスとパスワードを入力
Xcodeのプロジェクト作成
今回は「FabricTweetSample」って名前で作成
SDKに戻ってプロジェクトを選択
さっきつくった「FabricTweetSample」を選択
インストールするkitを選択
Twitterを選択
よければチェックをして「Agree」
指示に従ってXcodeにインストール
で、「⌘ + B」でビルドすると
SDKが以下のようになるからドラッグアンドドロップで
プロジェクトに追加
AppDelegateの設定
手順にあるようにXcodeのAppDelegate.swift
に
import Fabric
import TwitterKit
と
Fabric.with([Twitter.self])
を追加
import UIKit
import Fabric // 追加
import TwitterKit // 追加
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
Fabric.with([Twitter.self]) // 追加
return true
}
・
・
・
}
実行
「⌘ + R」で実行するとSDKのくるくるが止まって設定完了
ログインボタンを作成
ViewController.swift
にボタンを表示させるコードを追加する
import UIKit
import Fabric // 追加
import TwitterKit // 追加
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// ここから追加
let logInButton = TWTRLogInButton(logInCompletion: { session, error in
if (session != nil) {
print("signed in as \(session!.userName)")
} else {
print("error: \(error!.localizedDescription)")
}
})
logInButton.center = self.view.center
self.view.addSubview(logInButton)
// ここまで追加
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
こんな感じ
ボタンを押すと端末にログインされている場合はログにIDガ出てくる
ログインされてない場合はログイン画面がでてくる。
ユーザのタイムラインを表示
File -> New -> File -> swiftを選択して
「UserTimelineViewController」って名前のファイルを作成
ユーザのタイムラインを表示させるコントローラ
import UIKit
import TwitterKit
class UserTimelineViewController: TWTRTimelineViewController {
override func viewDidLoad() {
super.viewDidLoad()
let client = TWTRAPIClient()
Twitter.sharedInstance().logInWithCompletion { session, error in
if (session != nil) {
// ユーザ名からタイムラインを取得
self.dataSource = TWTRUserTimelineDataSource(screenName: session!.userName, APIClient: client)
} else {
print("error: \(error!.localizedDescription)")
}
}
}
}
遷移処理をViewController.swift
に追加
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let logInButton = TWTRLogInButton(logInCompletion: { session, error in
if (session != nil) {
print("signed in as \(session!.userName)")
let timelineVC = UserTimelineViewController() // 追加
UIApplication.sharedApplication().keyWindow?.rootViewController = timelineVC // 追加
} else {
print("error: \(error!.localizedDescription)")
}
})
logInButton.center = self.view.center
self.view.addSubview(logInButton)
}
するとログインボタンを押すとタイムラインが表示されました!
画面を整える
大枠をつくるメインのコントローラを作成
File -> New -> File -> swiftを選択して
「MainTabViewController」って名前のファイルを作成
import UIKit
class MainTabViewController: UITabBarController {
var userTimelineView: UserTimelineViewController!
override func viewDidLoad() {
super.viewDidLoad()
userTimelineView = UserTimelineViewController()
userTimelineView.tabBarItem = UITabBarItem(title: "ゆーざ", image: UIImage(named: "twtr-icn-logo"), selectedImage: UIImage(named: "twtr-icn-logo"))
var userTimelineNavigationController = UINavigationController(rootViewController: userTimelineView)
self.setViewControllers([userTimelineNavigationController], animated: false)
}
}
タブバーのアイコン画像を選択
今回はkitに入っているtwtr-icn-logo
を利用
- Assets.xcassetsを選択
- Media Libraryから
twtr-icn-logo.png
を選択 - Assets.xcassetsに
twtr-icn-logo.png
をドラッグアンドドロップ
タイトルを追加
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.title = "ユーザのツイート" // 追加
let client = TWTRAPIClient()
Twitter.sharedInstance().logInWithCompletion { session, error in
if (session != nil) {
// ユーザ名からタイムラインを取得
self.dataSource = TWTRUserTimelineDataSource(screenName: session!.userName, APIClient: client)
} else {
print("error: \(error!.localizedDescription)")
}
}
}
遷移先を変更
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let logInButton = TWTRLogInButton(logInCompletion: { session, error in
if (session != nil) {
print("signed in as \(session!.userName)")
let timelineVC = MainTabViewController() // 変更
UIApplication.sharedApplication().keyWindow?.rootViewController = timelineVC
} else {
print("error: \(error!.localizedDescription)")
}
})
logInButton.center = self.view.center
self.view.addSubview(logInButton)
}
こんな感じ
今はUserTimelineViewController.swift
しかないけれど
複数のコントローラを持つイメージなのかな?
ツイートができるようにしてみる
import UIKit
import TwitterKit
class UserTimelineViewController: TWTRTimelineViewController {
var rightBarButton: UIBarButtonItem!
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.title = "ユーザのツイート"
rightBarButton = UIBarButtonItem(title: "ついーと", style: .Plain, target: self, action: "tappedRightBarButton") // 追加
self.navigationItem.rightBarButtonItem = rightBarButton // 追加
let client = TWTRAPIClient()
Twitter.sharedInstance().logInWithCompletion { session, error in
if (session != nil) {
self.dataSource = TWTRUserTimelineDataSource(screenName: session!.userName, APIClient: client)
}
}
}
// 追加[ここから]
func tappedRightBarButton() {
let composer = TWTRComposer()
// Called from a UIViewController
composer.showFromViewController(self) { result in
if (result == TWTRComposerResult.Cancelled) {
print("Tweet composition cancelled")
}
else {
print("Sending tweet!")
}
}
}
// 追加[ここまで]
}
そしたらこんな感じ
ツイートできるよ
やったね!
参考
ブログ:
http://qiita.com/mokumoku/items/bf0460f420acac3c04fc