Android Tips #50 Android Query を使ってサービスの認証処理を超シンプルに実装する
はじめに
Android Query の紹介記事でよく見かける実装は UI 周りだったり非同期処理だったりしますが API を見てみると他にもいろいろな実装を楽にする API があるようです。 ということで今回は各種サービスの認証の実装が、Android Query ではどのようにシンプルに実装できるのか見てみましょう!
Google Service
Google Service は Google アカウントのさまざまなデータを取得するときに使えます。 Google Service を使うには、まず AndroidManifest.xml に以下のパーミッションを追加しておく必要があります。
AndroidManifest.xml
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" />
Google Contact API (連絡先の API) を使いたい場合は以下のように実装します。
public void getContacts() { // Google Contacts API の GoogleHandle インスタンスを生成 GoogleHandle handle = new GoogleHandle(this, AQuery.AUTH_CONTACTS, AQuery.ACTIVE_ACCOUNT); AQuery aq = new AQuery(this); // 連絡先を取得 String url = "http://www.google.com/m8/feeds/contacts/default/full?alt=json"; aq.auth(handle).ajax(url, String.class, new AjaxCallback<String>() { @Override public void callback(String url, String object, AjaxStatus status) { AQUtility.debug(TAG, object.toString()); } }); }
GoogleHandle クラスを使うところがポイントです。Android Query で認証処理を実装するには Handle というクラスのインスタンスを auth() メソッドに渡して認証します。Google アカウントの認証なので GoogleHandle です。
GoogleHandle のコンストラクタの第二引数に渡している定数はどの API を使うか設定しています。上記サンプルは Google Contact API を呼び出したいので AQuery.AUTH_CONTACTS としています。他に連携できるサービスはこちらを参照してください!
Facebook と連携するにはまずこちらで開発者登録とアプリ登録を行い、アプリIDを取得しておく必要があります。あとは Google Service とほぼ同じです。auth() には FacebookHandle を渡します。コンストラクタの第三引数にはパーミッションをカンマ区切りの文字列で渡します。どのようなパーミッションが渡せるかはこちらを参照してください。
private static final String APP_ID = "YOUR_APP_ID"; private static final String PERMISSIONS = "read_stream,read_friendlists"; public void getFeeds() { // FacebookHandle のインスタンスを生成 FacebookHandle handle = new FacebookHandle(this, APP_ID, PERMISSIONS); AQuery aq = new AQuery(this); // フィードを取得 String url = "https://graph.facebook.com/me/feed"; aq.auth(handle).ajax(url, JSONObject.class, new AjaxCallback<JSONObject>() { @Override public void callback(String url, JSONObject object, AjaxStatus status) { AQUtility.debug(TAG, object.toString()); } }); }
Twitter と連携したい場合、まずこちらのダウンロードページより signpost-core-1.2.1.1.jar と signpost-commonshttp4-1.2.1.1.jar をダウンロードして libs フォルダに追加しておく必要があります。
あとはこちらから開発者登録・アプリ登録を行い Consumer Key と Consumer Secret を取得しておきます。実装は Google Service, Facebook と同じ感じです!
private static final String CONSUMER_KEY = "YOUR_APP_CONSUMER_KEY"; private static final String CONSUMER_SECRET = "YOUR_APP_CONSUMER_SECRET"; public void getTweets(){ // TwitterHandle インスタンスを生成 TwitterHandle handle = new TwitterHandle(this, CONSUMER_KEY, CONSUMER_SECRET); AQuery aq = new AQuery(this); // twitterapiの タイムラインを取得 String url = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=twitterapi"; aq.auth(handle).ajax(url, JSONArray.class, new AjaxCallback<JSONArray>() { @Override public void callback(String url, JSONArray object, AjaxStatus status) { AQUtility.debug(TAG, object.toString()); } }); }
Basic 認証
上記は既存サービスの認証でしたが、Android Query では通常の Basic 認証の実装もサポートしています。手順も大体同じ感じで簡単に実装できます!
public void auth(String email, String pass){ // BasicHandle インスタンスを生成 BasicHandle handle = new BasicHandle(email, pass); AQuery aq = new AQuery(this); String url = "http://yoursite/auth"; // Basic 認証 aq.auth(handle).ajax(url, JSONArray.class, new AjaxCallback<JSONArray>() { @Override public void callback(String url, JSONArray object, AjaxStatus status) { AQUtility.debug(TAG, object.toString()); } }); }
まとめ
以上 Google Service, Facebook, Twitter, Basic 認証のそれぞれの認証処理を実装してみました。 Android Query は非同期通信処理がとてもシンプルに実装できるので、こういうところでかなり力を発揮すると思います。 どのサービスもフレームワークなしでは処理がかなり複雑になるので、ぜひ Android Query を活用してサクッと実装したいですね。