FabricのTwitter-Kitを使って簡単な画像検索クライアントを作ってみた
前回 GooglePlayのメタデータのレギュレーションとは・・・ - 未処分利益でGooglePlayのレギュレーションを調査するために作ったアプリで、入力された検索キーワードを元にしてTwitter上から関連する画像ツイートを取得することができます。
まめのちから - Google Play の Android アプリ
(GooglePlayのスクショはとっても寂しい感じですが、そのかいあって、今のところ粛正はされていないようですね)
ちなみに「可愛い犬」と検索すると、以下の通り可愛い犬関連のツイートを集めることができました。
Fabric
今回のアプリはTwitterのAPIを使う必要があったのですが、迅速に開発を進めたかったこともありFabricを利用することにしました。
FabricはTwitterより公開されたモバイル開発者向けのSDKで、主に以下の3つのキットで構成されています。
- Crashlytics
- アプリのクラッシュ検知やパフォーマンス向上図れるキット
- MoPub
- 収益獲得のための広告配信キット(アプリの性質にあった広告配信が容易にできる)
- Twitter-Kit
- Native Tweet embeds(埋め込みネイティブツイート)
- Tweet composer
- Sign in with Twitter (柔軟なREST APIへのアクセスを可能とするインターフェイス含む)
今回はOAuth認証とREST APIの利用のためTwitter-Kitを使っています。 自分の開発プロジェクトにFabricを導入するにあたっては、Android Studio用のプラグインが公式より提供されているので、そちらをダウンロードして組み込みます。
Fabric - Twitter's Mobile Development Platform
Twitter-Kit
Twitterログインをする
TwitterLoginButtonを使う事で簡単にOAuthベースの認証ができます。 コード的にはこんな感じです。
loginButton = (TwitterLoginButton) findViewById(R.id.login_button); loginButton.setCallback(new Callback<TwitterSession>() { @Override public void success(Result<TwitterSession> result) { // ログイン成功時の処理 } @Override public void failure(TwitterException exception) { // ログイン失敗時の処理 } });
このsuccessコールバックで取得できるTwitterSessionからAuthTokenとAuthTokenSecretも簡単に取得できます。(ただ、実装者はこの情報を基本的に使うことは無いのかと思います)
@Override public void success(Result<TwitterSession> result) { String token = result.data.getAuthToken().token; String secret = result.data.getAuthToken().secret; }
ボタンの外観は以下の通りです。
REST APIをコールする
TwitterのREST APIには TwitterApiClient
経由でアクセスします。
公式のTwitter Kit では
- Tweets
- Favorites
- Search
上記の3つにしか対応していませんが、それ以外のAPIに対応するにはTwitterApiClient
を継承したクラスを作成してそちらで独自に実装する必要があります。ただ、TwitterCoreKit
はRetrofit
を採用しているのでインターフェイスを定義することで容易に対応できるでしょう。
お気に入り(Favorites)を行う場合は下記の要領で行えます。
private void doFav() { FavoriteService favs = TwitterCore.getInstance().getApiClient().getFavoriteService(); favs.create(554231363218714624L,true,new Callback<Tweet>() { @Override public void success(Result<Tweet> tweetResult) { // tweetResultはお気に入りしたTweetの情報を保有します } @Override public void failure(TwitterException e) { } }); }
ちなみに上記のコードを実行すると下記のツイートをお気に入りする事になります。 (喪女ブログというジャンル、個人的には2014から2015年にかけて一気に盛り上がるんじゃないでしょうかね。根拠は無いですけど)
喪女ブログという新ジャンルができておりました!「あるある!」と思う部分が多々あり、私も喪女かな…?とおもいました。ぜひご覧ください!http://t.co/lUS6hGoTde
— ロリポタッチ (@lolipotouch) January 11, 2015
下記はお気に入りのFavoriteServiceインターフェース定義です。
public interface FavoriteService { @retrofit.http.GET("/1.1/favorites/list.json") void list(@retrofit.http.Query("user_id") java.lang.Long aLong, @retrofit.http.Query("screen_name") java.lang.String s, @retrofit.http.Query("count") java.lang.Integer integer, @retrofit.http.Query("since_id") java.lang.String s1, @retrofit.http.Query("max_id") java.lang.String s2, @retrofit.http.Query("include_entities") java.lang.Boolean aBoolean, com.twitter.sdk.android.core.Callback<java.util.List<com.twitter.sdk.android.core.models.Tweet>> callback); @retrofit.http.FormUrlEncoded @retrofit.http.POST("/1.1/favorites/destroy.json") void destroy(@retrofit.http.Field("id") java.lang.Long aLong, @retrofit.http.Field("include_entities") java.lang.Boolean aBoolean, com.twitter.sdk.android.core.Callback<com.twitter.sdk.android.core.models.Tweet> callback); @retrofit.http.FormUrlEncoded @retrofit.http.POST("/1.1/favorites/create.json") void create(@retrofit.http.Field("id") java.lang.Long aLong, @retrofit.http.Field("include_entities") java.lang.Boolean aBoolean, com.twitter.sdk.android.core.Callback<com.twitter.sdk.android.core.models.Tweet> callback); }
結論
結構簡単に使えたので便利。 次はMoPubを触ろう。