ネイティブアプリで実践! mixi Graph API活用法
OAuth 2.0を使う
ソーシャルなAndroidアプリの作り方
株式会社ミクシィ
システム本部 技術部 たんぽぽグループ 藤崎 友樹
プラットフォームサービス開発部 鶴原 翔夢
2011/3/30
「OAuth」を使ってスマートでソーシャルなアプリを作ろう
- - PR -
最近よく耳にする「OAuth」とは、mixi、Facebook、Twitterなどの外部サービスと自アプリケーションを連携するための技術です。
「クラウド」「ソーシャル」というキーワードが叫ばれている昨今では、こういった連携をいかにうまく行うかということがユーザー体験を向上させる鍵となります。
特に「ソーシャル」を取り入れることは以下のような点でメリットがあると考えられます。
- ユーザーのソーシャルグラフを活用して、アプリをバイラル・マーケティングできる
- 現実の人間関係をベースにしたユーザー体験(UX)を提供し、継続的にアプリを使ってもらえるモチベーションを与えられる
本稿では、ソーシャルなmixi Graph APIやFacebook Graph APIで採用されているOAuth 2.0の「Draft v.10」という仕様に焦点を当て、OAuth 2.0の例としてmixi Graph APIを使った、Androidで動くネイティブ・アプリケーションの作り方を解説します。
■ OAuth 2.0 Draft v.10の処理フロー
Android上での実装に入る前に、おおまかなOAuth 2.0の処理フローを概観しておきます。
OAuth 2.0 Draft v.10では、認可の手順としていくつかの“プロファイル”を定めています。ここでは、最も基本的な「Web Serverプロファイル」を見ていきます。
- ユーザーを外部サービスの認可を行う画面にリダイレクト
- ユーザーが認可を行いAuthorization Code(認可コード)を発行
- Authorization CodeをAccess Token(アクセストークン)と交換する
- Access Tokenを使ってAPIにアクセス
以上をAndroidで実装していきます。
OAuthの歴史や、OAuth 2.0の詳細については、以下の記事もご覧ください。
■ サンプルアプリの画面遷移
Androidで「OAuth 2.0 Web Server Profile」を用いた認証認可手順を実装した場合の画面遷移は、図1のような流れとなります。
サンプルアプリの画面遷移図 |
途中の[2.認証画面][3.認可画面]は、Web サイト上に存在するWebページです。これらのページを表示する手段としては、次の2つの方法が考えられます。
- 端末の持つWebブラウザ・アプリケーション(AndroidのWebブラウザ以外にも、OperaやFirefox、NetFrontなどがある)で表示する
- 埋め込み型Webブラウザ(Androidが用意しているAPIのWebViewクラス)で実装する
■ Webブラウザとネイティブ・アプリをIntent Filterでつなぐ
Androidでは、Intent Filterを設定することで、Webブラウザとネイティブ・アプリケーション間の遷移が容易に実現可能であるため、本稿では、前者のWebブラウザアプリケーションを利用した実装について解説します。
ユーザーが普段使っているWebブラウザを使用することには、次の利点もあります。
- ユーザーは、すでにWebブラウザ上でログイン状態にある場合が多く、既存のログインセッションを活用することで、IDとパスワードの入力の手間を省ける
- ユーザー自身が、フィッシングでないことを確認可能
■ サンプルの概要
サンプルは、OAuthを用いた認証・認可を行い、発行されたAccess Tokenを用いて、「mixi Graph API」の1つである「People API」へリクエストを行い、友人の一覧を取得します。
またAccess Tokenには、有効期限が過ぎた場合のリフレッシュ処理の実装も行います。
サンプルアプリの起動画面 |
■ サンプルのソースコード・ ビルド
本稿で解説を行うAndroidアプリケーションのソースコードは、以下のリポジトリから取得できます。
本サンプルのビルドには、Android 2.2以降のSDKが必要ですが、AndroidManifest.xmlに下記の宣言を行うことで、Android 2.1端末でも動作可能です。
<uses-sdk android:minSdkVersion="7" />
mixi Graph APIの利用登録
OAuthの認可フローで用いるConsumer KeyとConsumer Secretを取得するため、最初に「mixi Developer Center」上でアプリケーション(サービス)を登録します。デベロッパーアカウントをお持ちでない場合は、以下の記事などを参考に、まずデベロッパー登録とmixi Graph APIの利用登録を行ってください。
登録情報として、「リダイレクトURL」という項目があります。これは、前節の図1で、Webからアプリケーションに遷移する際に利用するため、ここにユニークなスキームを持つURLを登録します。
スキームは、衝突を避けるため、開発するアプリケーションのPackage Nameに一致させるのがいいでしょう。今回の場合は、「org.example.android.oauth://callback」を指定しています。
なお、もしIntent Filterが衝突した場合は、Webからのリダイレクト時にアプリケーションの選択ダイアログが表示されます。この場合は、正しいアプリケーションを選択しないと、Consumer KeyおよびSecretが一致しないため、認証を完了できません。
アプリケーションの登録手続きが完了すると、以下の図のようなサービス画面にて、アプリケーションで用いるConsumer KeyおよびSecretが発行されます。
画像をクリックすると、拡大します |
これらのキーを、サンプルの「OAuthClient.java」内に記述します。
OAuthClient.java抜粋 private static class EncodedConsumerKey {
/** TODO 取得したConsumer Keyに書き換える */
private static final String ENCODED_CONSUMER_KEY = "d67160……";
/** TODO 取得したConsumer Secretに書き換える */
private static final String ENCODED_CONSUMER_SECRET = "2bfdcc……";
ここで、クラス名の「Encoded」というプレフィックスにお気づきの方もいらっしゃると思います。
今回はサンプルのため、特にEncodeせず、生のConsumer KeyとSecretを記述していますが、これらのString constantは、ビルドしたパッケージファイルから簡単に抜き出すことができてしまうため、悪意を持った第三者にアプリケーションを偽装されてしまう可能性があります。リリースの際には、この部分に何らかの難読化を行うことを強く推奨します。
次ページからは、具体的なサンプルの実装の解説に入ります。適宜、ドキュメントも参照してください。
1/3 |
INDEX | ||
ネイティブアプリで実践! mixi Graph API活用法 OAuth 2.0を使うソーシャルなAndroidアプリの作り方 |
||
Page1 「OAuth」を使ってスマートでソーシャルなアプリを作ろう mixi Graph APIの利用登録 |
||
Page2 リダイレクト先のURL(独自スキーマ)の定義 Webブラウザからのリダイレクトを受け取る 認可コードからAccess Tokenを受け取る |
||
Page3 Access Tokenを用いてPeople APIへリクエストを発行 Access Tokenの有効期限が切れた場合の処理 Refresh Tokenが無効になった場合 アプリにソーシャルな要素を取り入れてみまソ |
Smart&Social フォーラム トップページへ |
- 夏休みの自由研究にマイコンボードで「電子サイコロ」を作ったり、音楽プログラミングをしたりしてみよう (2017/7/24)
子ども向け電子工作&プログラミング用マイコンボード「chibi:bit」の基本的な使い方を紹介する企画。夏休みの自由研究に「電子サイコロ」を作ったり、音楽プログラミングをしたりしてみよう - 子ども向け電子工作&プログラミング用マイコンボード「chibi:bit」の基本的な使い方 (2017/7/20)
子ども向け電子工作&プログラミング用マイコンボード「chibi:bit」の基本的な使い方を紹介する。夏休みの子どもの自由研究などに役立てつつ、プログラミングを始めるきっかけにしてみてはいかがだろうか - 3DゲームのAIをiOSのSceneKitとGameplayKitで作る基本 (2017/7/10)
3Dゲーム用のフレームワークSceneKitを使った簡単なアプリ制作を通して、3Dゲーム用の人工知能(AI)について学ぶ - UnityアプリをWebGL、UWP、Android、iOS用としてビルドしてみた (2017/6/27)
アプリをWebで実行できるように書き出す方法やWindows上でUWP、Android、iOS用などにビルドする方法について解説する【Windows 10、Unity 5.6に対応】
|
|