Android StudioでFabricのTwitter Kit使ってみた
表題の通り、FabricのTwitter Kitを使ってログイン処理、タイムライン取得を実装してみました。 GitHubにあげましたので、よかったら使ってください。(ここです)
*既にFabricの登録を済ませてpluginを導入している前提で話を進めます。
Twitter Kit for Androidは要確認です。見てください。(後からでも...)
まず、Android Studioにて、下記のようにFile→New Projectから新規プロジェクトを作成します。
今回は下記のように設定しました。自由に変えてください。
Blank Activityを選択し、nextボタンをクリック。そして、最後にfinishボタンをクリックしてください。
ここまでで、hello,world!を表示するアプリができました。
いよいよ、こっからが本題です。 次に、Fabricのボタンを押して、Twitter Kitをインストールします。
あとは勝手にインストールしてくれるので、そのまま進めちゃいましょう。 終わったら、backボタンではじめの画面に戻ります。 すると、InstallからPending..に代わっていることが分かります。
この時点で、ソースコードがどのように変化したか確認してみてください。(ここをチェック)
では、ログインボタンを実装していきます。
MainActivity.java
public class MainActivity extends ActionBarActivity { // Note: Your consumer key and secret should be obfuscated in your source code before shipping. private static final String TWITTER_KEY = "your_twitter_key"; private static final String TWITTER_SECRET = "your_twitter_secret"; private TwitterLoginButton loginButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET); Fabric.with(this, new Twitter(authConfig)); setContentView(R.layout.activity_main); setUpViews(); } private void setUpViews() { loginButton = (TwitterLoginButton) findViewById(R.id.login_button); loginButton.setCallback(new Callback<TwitterSession>() { @Override public void success(Result<TwitterSession> result) { startTweetList(); } @Override public void failure(TwitterException exception) { // Do something on failure } }); } .....
activity_main.xml
<com.twitter.sdk.android.core.identity.TwitterLoginButton xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"/>
twitterボタンをクリックし、認証処理後の画面遷移処理、Intentでオブジェクトを渡しています。
private void startTweetList() { final Intent intent = new Intent(MainActivity.this, TweetListActivity.class); startActivity(intent); }
最終的にMainActivityは以下のようになります。
MainActivity.java
public class MainActivity extends ActionBarActivity { // Note: Your consumer key and secret should be obfuscated in your source code before shipping. private static final String TWITTER_KEY = "your_twitter_key"; private static final String TWITTER_SECRET = "your_twitter_secret"; private TwitterLoginButton loginButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET); Fabric.with(this, new Twitter(authConfig)); setContentView(R.layout.activity_main); setUpViews(); } private void setUpViews() { loginButton = (TwitterLoginButton) findViewById(R.id.login_button); loginButton.setCallback(new Callback<TwitterSession>() { @Override public void success(Result<TwitterSession> result) { startTweetList(); } @Override public void failure(TwitterException exception) { // Do something on failure } }); } private void startTweetList() { final Intent intent = new Intent(MainActivity.this, TweetListActivity.class); startActivity(intent); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Pass the activity result to the login button. loginButton.onActivityResult(requestCode, resultCode, data); } }
ログイン後にタイムラインからtweetを取得する、TweetListActivity,tweet_list.xmlは以下の通りです。 今回は、最新のtweetから20件取得するようにしました。
TweetListActivity.java
public class TweetListActivity extends ListActivity { final TweetViewFetchAdapter adapter = new TweetViewFetchAdapter<CompactTweetView>( TweetListActivity.this); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tweet_list); setListAdapter(adapter); TwitterApiClient twitterApiClient = TwitterCore.getInstance().getApiClient(); // statusAPI用のserviceクラス StatusesService statusesService = twitterApiClient.getStatusesService(); statusesService.homeTimeline(20, null, null, false, false, false, false, new Callback<List<Tweet>>() { @Override public void success(Result<List<Tweet>> listResult) { adapter.setTweets(listResult.data); } @Override public void failure(TwitterException e) { } }); } }
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@id/android:empty" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal|center_vertical" android:text="@string/empty"/> <ListView android:id="@id/android:list" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:drawSelectorOnTop="false"/> </LinearLayout>
app/res/values/strings.xmlにemptyを追加。
strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">FabricSample</string> <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> <string name="hello_blank_fragment">Hello blank fragment</string> <string name="empty">oops, this is empty.</string> </resources>
AndroidManifest.xmlへActivityの追加も忘れずに。
では、起動してみましょう。
Fabricで設定したproject名、今回作成したアプリのpackage名ですね。 ログイン処理を行いましょう。 すると、、、
最新のtweetが取得できていますね。
念のため、Android エミュレータからだけでなく、スマホ(PC)からも確認して整合性をみてみましょう。
ソースはここに置いてます。FabricSample