2016年9月13日火曜日

Swifter を使って iOS アプリからつぶやいてみた

概要

Swifter は iOS アプリ用の Twitter ライブラリで Twitter API を使ってツイートの取得やつぶやきを行うことができます
公式の Fabric を使う方法もありますが、カジュアルに使いたかったので Swifter を試してみました

環境

  • Mac OS X 10.11.6
  • Xcode 7.3.1 (Swift 2.1)
  • Swifter 1.7

ライブラリのインストール

あらかじめ適当なサンプルプロジェクト (今回は swifter-test )を作成しておいてください

Swifter は残念ながら CocoaPods が使えません
対応してほしいという要望は Issue でいろいろと上がって入るのですが、本記事執筆時の段階 (2016/09/13) ではまだ対応されておりません

なので、ソースをダウンロードして手動で framework をプロジェクトに紐付ける必要があります

まずソースをダウンロードします
https://github.com/mattdonnelly/Swifter/archive/1.7.zip

今回 1.7 というバージョンを使います
最新版に 2.0 というバージョンがあるのですが、Swift 3.0 対応版になっており、Swift 3.0 が使える環境でないとエラーとなるため使えません

ダウンロードしたら解凍しましょう
Swifter-1.7 というフォルダの中に Swifter.xcodeproj があれば OK です

そしたらそのファイルを Xcode にドラッグアンドドロップしてください
以下のような感じになれば OK です
try_swifter_install_lib.png

次に swifter-test を選択します

General -> Embedded Binaries

で「+」ボタンを押しダイアログから SwifteriOS.framework を探し追加してください
以下のようになれば OK です
try_swifter_added_lib.png

同時に Linked Frameworks and Libraries にも framework ファイルが追加されると思います

これでライブラリのインストールは OK です

Twitter アプリの作成

https://apps.twitter.com/
にアクセスしアプリを作成します
アプリを作成するユーザでログインしておいてください

ログインできたらアプリを作成するのですが、どうやら Twitter アカウントに電話番号の登録が完了している状態でないとアプリの新規作成はできないようです
なので、素直に Twitter アカウントに電話番号を設定してください

アプリが作成できたら「Keys And Access Tokens」から

  • Consumer Key (API Key)
  • Consumer Secret (API Secret)

を取得しましょう
また、その下に「Your Access Token」があるので新規でアクセストークンとシークレットアクセストークンも作成しておいてください

  • Access Token
  • Access Token Secret

取得したトークンは Access Level が「Read and write」になっていることも確認してください

サンプルコード

swifter-test プロジェクトにある ViewController.swift を開き viewDidLoad メソッドに以下のコードを記載してください
今回は特に UI 側は作らないのでプロジェクトを実行するだけでつぶやく感じにしたいと思います

override func viewDidLoad() {
    super.viewDidLoad()
    print("start")
    let TWITTER_CONSUMER_KEY = ""
    let TWITTER_CONSUMER_SECRET = ""
    let TWITTER_ACCESS_TOKEN = ""
    let TWITTER_ACCESS_TOKEN_SECRET = ""
    let accessToken = SwifterCredential.OAuthAccessToken(key: TWITTER_ACCESS_TOKEN, secret: TWITTER_ACCESS_TOKEN_SECRET)
    let credential = SwifterCredential(accessToken: accessToken)
    let swifter = Swifter(consumerKey: TWITTER_CONSUMER_KEY, consumerSecret: TWITTER_CONSUMER_SECRET)
    swifter.client.credential = credential
    swifter.postStatusUpdate("swifter-test", inReplyToStatusID: nil, lat: nil, long: nil, placeID: nil, displayCoordinates: nil, trimUser: nil, success: {
        (status) in
        print(status)
    }) {
        (error) in
        print(error)
    }
}

TWITTER_CONSUMER_KEY から TWITTER_ACCESS_TOKEN_SECRET までの定数は Twitter アプリ作成時に取得したトークン情報をそのままコピペしてください

基本的にはつぶやくための認証 (OAuthAccessToken) を実行して、その認証実行を使ってつぶやく (postStatusUpdate) だけです

動作確認

では実行してみましょう
Xcode で Run すれば OK です
成功するとコンソールログにレスポンス情報がだらーっと表示されると思います
また、Twitter 側にもアプリを保持しているアカウントでつぶやきが行われていると思います

UI 側は特に作成していないので、真っ白な画面が表示されるだけだと思います

Tips

認証回りについて

Twitter には様々な認証方式があります
今回は OAuth 認証を使ったのですが、他にも Application-only authentication という認証方式があります
App-only Auth はいわゆる簡易認証みたいなやつで認証に必要な情報あ「Consumer Key」と「Consumer Secret」だけになります

簡単だったらこっちを使えばいいじゃんという話になるのですが、実は App-only Auth を使うとつぶやきをするための権限がもらえません
基本は GET 系の処理だけできます
なので、今回は OAuth 認証を使いました

Swifter の公式サイトの Getting Started が App-only Auth を使った認証になっており、初めそれを使っていたのですがツイートしようとすると Twitter から「credentials do not allow access to this resource.」と怒られ全然ツイートできませんでした
もしかするとこの辺りの権限や認証方法回りは Twitter API のはまりポイントかもしれません

最後に

これで Swifter を使って iOS アプリからつぶやきができるようになりました
ライブラリの追加が少し面倒なだけで、そこを我慢すれば Fabric よりかは簡単に使えるかなと思いました

ただ、CocoaPods 対応していないのでライブラリのソースコード一式をどこかで管理しないとしけないのがちょっとつらい点ではあります
あとは git submodule を使うとかでしょうか

参考サイト

0 件のコメント:

コメントを投稿