· Android Android Studio Fabric SDK Twitter

TwitterのFabric SDKをAndroid Studioで使ってみる

  • このエントリーをはてなブックマークに追加

はじめに

ひさびさTwitterをつかってアプリつくろうと思ってディベロッパーサイトに行ったら、fabric?????とか出てきてなんじゃこれ?と思って調べてたら、10/22(現地時間)に発表されたTwitterのモバイル向け新SDKとやららしい。

Twitter、モバイルアプリ向け新SDK「Fabric」発表 パスワード不要の次世代認証「Digits」リリース – ITmedia ニュース

まぁ英語でもいいんだけど、日本語の情報ないかなぁと探してみたけど、全然ない(´・ω・`)

ということで、Android StudioでFabric SDKのセットアップしてから、ツイートできるようになるまでを書いてみようと思います。

Android版Fabricの公式サイト

https://dev.twitter.com/twitter-kit/android

確認したバージョン

Android Studio:0.9.2
Fabric SDK:1.0.1

アプリの登録

https://apps.twitter.com/

これは普通に登録するだけ(今までどおり)

Fabric SDKのセットアップ

IDEプラグインをダウンロードすることもできるみたいだが、Gradleを使っているなら、build.gradleに書くだけで済ませたい。

基本的には下記を参考にすればよいと思うのですが、早速build.gradleの設定ではまった。

https://dev.twitter.com/twitter-kit/android/integrate

上記書いてあるとおりに記述してもsyncに失敗するので、Fabric SDKを使うには下記のように設定すればsyncは通っていけたっぽい。

--- a/build.gradle
+++ b/build.gradle
@@ -3,17 +3,21 @@
 buildscript {
     repositories {
         jcenter()
+        maven { url 'https://maven.fabric.io/repo' }
     }
     dependencies {
         classpath 'com.android.tools.build:gradle:0.12.+'
+        classpath 'io.fabric.tools:gradle:1.+'
     }
 }
 
 allprojects {
+    apply plugin: 'io.fabric'
     repositories {
         jcenter()
+        maven { url 'https://maven.fabric.io/repo' }
     }
 }
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -23,5 +37,7 @@ dependencies {
     compile fileTree(dir: 'libs', include: ['*.jar'])
     compile 'com.google.android.gms:play-services:6.1.71'
     compile 'com.android.support:support-v4:21.+'
+    compile('com.twitter.sdk.android:twitter:1.0.0@aar') {
+        transitive = true;
+    }
 }

API KEYとAPI Secretを追加する

https://dev.twitter.com/twitter-kit/android/integrate に「Add API Key and Build Secret」があるが、/app/crashlytics.properties にAPI KEYとAPI Secretを書きます。

twitterConsumerSecret=<YOUR SECRET>
twitterConsumerKey=<YOUR KEY>

crashlytics.propertiesに書いたKEYとSECRETの使い方に関しては、下記のリポジトリのbuild.gradleが参考になった。

https://github.com/twitterdev/cannonball-android/blob/master/app/build.gradle

僕が書いたのは下記です。

--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,5 +1,13 @@ apply plugin: 'com.android.application'
 
+Properties props = new Properties()
+try {
+    props.load(file('./crashlytics.properties').newDataInputStream())
+} catch (Exception ex) {
+    throw new GradleException("Missing crashlytics.properties, check the crashlytics.properties file.");
+}
+
+
 android {
     compileSdkVersion 21
     buildToolsVersion "20.0.0"
@@ -12,7 +20,13 @@ android {
         versionName "1.0"
     }
     buildTypes {
+        debug {
+            buildConfigField "String", "CONSUMER_KEY", "\"${props.getProperty("twitterConsumerKey")}\""
+            buildConfigField "String", "CONSUMER_SECRET", "\"${props.getProperty("twitterConsumerSecret")}\""
+        }
         release {
+            buildConfigField "String", "CONSUMER_KEY", "\"${props.getProperty("twitterConsumerKey")}\""
+            buildConfigField "String", "CONSUMER_SECRET", "\"${props.getProperty("twitterConsumerSecret")}\""
             runProguard false
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
         }

これは、buildConfigFieldを使っていて、アプリ内でBuildConfigを使ってKEYとSECRETを使えるようにしています。

次のように、ApplicationクラスのサブクラスでAPI KEYとSECRETを使ってFabric SDKの初期化します。

public class App extends Application{

    @Override
    public void onCreate() {
        super.onCreate();
        TwitterAuthConfig authConfig = new TwitterAuthConfig(BuildConfig.CONSUMER_KEY, BuildConfig.CONSUMER_SECRET);
        Fabric.with(this, new TwitterCore(authConfig));
    }
}

※AndroidManifest.xmlにandroid:name=".App"を追加することを忘れないこと。

Twitterでログインする

https://dev.twitter.com/twitter-kit/android/twitter-login

ログイン画面を作成します。

<com.twitter.sdk.android.core.identity.TwitterLoginButton
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

プレビューは「SIGN IN WITH TWITTER」と英語表記ですが、日本語設定の端末で確認すると「Twitterでログイン」と日本語になっています。

sign_in_with_twitter

Activityの方は公式サイトどおりでいけます。

ログイン成功後のTwitterSessionを受け取る事ができるのですが、result.dataで取得できます。

mTwitterLoginButton = (TwitterLoginButton) findViewById(R.id.login_button);
mTwitterLoginButton.setCallback(new Callback<TwitterSession>() {
    @Override
        public void success(Result<TwitterSession> result) {
        mTwitterSession = result.data;
    }
}   

TwitterのREST APIを使う

https://dev.twitter.com/twitter-kit/android/api

公式サイトの例は、1つのツイートを取得しています。

https://dev.twitter.com/rest/reference/get/statuses/show/%3Aid

僕はツイートしたかったので、こんな感じになりました。

/**
 * ツイートする。
 * @param message ツイートする内容
 * @see https://dev.twitter.com/rest/reference/post/statuses/update
 */
private void tweet(String message) {
    TwitterApiClient twitterApiClient = TwitterCore.getInstance().getApiClient();
    StatusesService statusesService = twitterApiClient.getStatusesService();

    statusesService.update(message, null, false, null, null, null, false, null, new Callback<Tweet>() {
        @Override
        public void success(Result<Tweet> result) {
            mHandler.post(new Runnable() {
                public void run() {
                    Toast.makeText(self, "ツイートしました。", Toast.LENGTH_SHORT).show();
                }
            });
        }

        public void failure(TwitterException exception) {
            mHandler.post(new Runnable() {
                public void run() {
                    Toast.makeText(self, "ツイートに失敗しました。", Toast.LENGTH_SHORT).show();
                }
            });

        }
    });
}

StatusesService#updateの引数の順番は、REST APIドキュメントの順番どおりです。

https://dev.twitter.com/rest/reference/post/statuses/update

このtweetメソッドを呼びたいタイミングで呼べばツイートできます。

おわりに

以上で、Fabric SDKのセットアップからツイートまでを書きましたが、TweetUi KitTweetComposer Kitなるものがあったり、電話番号を使ってサインインするDigitsなるものがあるみたいですね。

  • このエントリーをはてなブックマークに追加
  • LinkedIn
  • Tumblr
  • Reddit
  • Google+
  • Pinterest
  • Pocket