Skip to main content
このドキュメントは Mobile + API アーキテクチャシナリオの一部であり、Android でモバイルアプリケーションを実装する方法について説明します。実装されているソリューションの詳細については、このシナリオを参照してください。

ステップ1. アプリケーションを設定する

サンプルプロジェクト

このチュートリアル用のサンプルプロジェクトをダウンロードして、作業を始めましょう。 ダウンロード GitHub でフォーク システム要件
  • Android Studio 2.3
  • Android SDK 25
  • エミュレーター - Nexus 5X - Android 6.0
要件を表示

依存関係を設定する

この実装では、アプリのbuild.gradleファイルで次の依存関係を使用します。
  • Auth0.Android: このパッケージを使うと、Auth0 を統合してユーザーを認証できます。
  • OkHttp: このパッケージは、Node.JS API にリクエストを送信するための HTTP クライアントを提供します。
  • JWTDecode.Android: このパッケージは、のデコードに役立ちます。
  • AppCompat: このパッケージを使うと、アクティビティ内のナビゲーションに Toolbar ウィジェットを使用できます。

マニフェストを更新する

アプリケーションの AndroidManifest.xml を開き、インターネットへのアクセス権限を追加します。
また、Toolbarウィジェットを利用するよう、アプリケーションの詳細も更新します:

設定値を指定する

/res/values/strings.xml にある strings.xml リソースで、Auth0 の 、Auth0 ドメイン、API の URL を設定します。
この実装では、アプリケーションパッケージ内に activities、models、utils の各ディレクトリを作成します。
  • activities/: このパッケージには、LoginActivity.javaTimeSheetActivity.javaFormActivity.javaUserActivity.java が含まれます。
  • models/: このパッケージには、TimeSheet.javaUser.java のデータモデルが含まれます。
  • utils/: このパッケージには、UserProfileManager.javaTimeSheetAdapter.javaImageTask.java が含まれます。

ステップ 2. ユーザーを認可する

マニフェストを更新する

アプリのAndroidManifest.xmlを開き、LoginActivityを追加します。

Login Activity を作成する

LoginActivity ではユーザーの認可を処理し、ユーザーに最初に表示される画面として使用します。WebAuthProvider を初期化して認証を開始する login() メソッドを作成します。WebAuthProvider には、正しい scheme、、および scope を必ず指定してください。この実装では、次を使用します。
  • scheme: demo
  • audience: https://api.exampleco.com/timesheets (Node.JS API)
  • response_type: code
  • scope: create:timesheets read:timesheets openid profile email offline_access。これらのスコープにより、Node.JS API に対して POSTGET を実行できるほか、ユーザープロフィールと も取得できます。
login() メソッドでは、認証に成功したらユーザーを TimeSheetActivity にリダイレクトします。

資格情報を保存する

ログイン後に受け取った資格情報を保存するには、Auth0.Android ライブラリの CredentialsManager と、保存先として SharedPreferences を使用します。 login() メソッドで WebAuthProvider を初期化する前に、CredentialsManager を作成しておけます。AuthenticationAPIClientCredentialsManager に渡すと、有効期限が切れた を更新できるようになります。
次に、認証が成功したら資格情報が CredentialsManager 経由で保存されるよう、login() メソッドを更新します。

ステップ 3. ユーザープロフィールの取得

User モデルを作成する

UserProfileManagerUserActivity で使用するシンプルな User モデルを作成します。

ユーザープロファイルを保存する

ユーザープロファイル情報を保存するために、UserProfileManager というマネージャークラスを作成します。UserProfileManager は、データの保存に SharedPreferences を使用します。
次に、LoginActivitylogin() メソッドを更新して、 を取得し、JWTDecode.Android ライブラリを使ってトークンからユーザープロファイルを取得します。続いて、そのユーザープロファイルを UserProfileManager に保存します。

ステップ 4. スコープに基づいて UI 要素を条件付きで表示する

ユーザーが特定の操作を実行する権限を持っているかどうかを判断するには、認証プロセス中にユーザーに付与されたscopeを確認します。scopeには、そのユーザーに付与されたすべてのスコープを含む文字列が入っているため、特定のスコープが付与されているかどうかを判断するには、そのスコープに対応する部分文字列がスコープ文字列に含まれているかを確認するだけです。

スコープを保存する

まず、付与されたスコープを保存できるように User クラスを更新します。次に、付与されたスコープに特定のスコープが含まれているかどうかを判定するためのヘルパーメソッド hasScope() を用意します。
追加のフィールドを保存できるよう、UserProfileManager も忘れずに更新してください。
次に、scopeUserオブジェクトに保存できるよう、LoginActivityを更新して渡すようにします。

スコープに基づいて承認メニューを表示する

これで、ユーザーに特定のスコープが付与されているかどうかに応じて、特定のUI要素を表示できるようになりました。たとえば、承認メニュー項目は approve:timesheets スコープが付与されたユーザーにのみ表示されるようにする必要があります。 以下は、ユーザーが approve:timesheets スコープを持っているかどうかを確認し、その結果に応じて承認アクティビティを表示するメニュー項目の表示・非表示を設定する BaseActivity クラスのコードです。

ステップ 5:API を呼び出す

マニフェストを更新する

アプリのAndroidManifest.xmlを開き、TimeSheetActivityを追加します。

Timesheets Activity のレイアウトを作成する

次に、TimeSheetsActivity 用のレイアウトである timesheet_activity.xml を作成します。
ListViewウィジェットには、item_entry.xmlレイアウトで表現される各エントリが含まれます。
また、TimeSheetActivity の Toolbar のナビゲーション用に、timesheet_action_menu.xml のメニューリソース (/res/menu/) を作成します。

タイムシートモデルを作成する

ビューでタイムシートデータを扱うためのモデルを作成します。

タイムシートアダプターを作成する

TimeSheetAdapter は、タイムシートのエントリ配列を受け取り、TimeSheetActivityListView に適用するユーティリティクラスです。

Timesheet Activity を作成する

TimeSheetActivity は、サーバーに保存されている、ログイン中のユーザーのタイムシートエントリを表示します。
  • Android Emulator から http://localhost:8080 で実行中の Node.JS API に接続できるよう、@string/api_urlhttp://10.0.2.2:8080/timesheets に設定されています。
  • callAPI() メソッドは、Node.JS API からタイムシートを取得します。
  • processResults() メソッドは、callAPI() の JSON レスポンスを受け取り、TimeSheet オブジェクトに変換します。
  • onCreateOptionsMenu() および onOptionsItemSelected() メソッドは、Toolbar ウィジェットのナビゲーション機能を処理します。

ステップ 6. ユーザープロフィールを表示する

ログイン中のユーザーのプロフィールを表示するために、UserActivity、対応するuser_activity.xmlレイアウト、そして Toolbar のナビゲーション用のuser_action_menu.xmlを作成します。この画面には、ユーザーの名前、メールアドレス、プロフィール画像が表示されます。

マニフェストを更新する

アプリのAndroidManifest.xmlを開き、UserActivityを追加します。

User Activity のレイアウトを作成する

次に、UserActivity のレイアウトである user_activity.xml を作成します。プロフィール画像用の ImageView と、ユーザー名およびメールアドレス用の TextViews を配置します。
次に、UserActivity の Toolbar 用に user_actions_menu.xml を作成します:

URLからプロフィール画像を読み込む

URLからユーザーのプロフィール画像を読み込むには、AsyncTask を継承したタスクを作成し、バックグラウンドで実行します。

User Activity を作成する

onCreate() メソッドでは、UserProfileManager からユーザー情報を取得し、その内容をビューに設定します。これまでと同様に、onCreateOptionsMenu() メソッドと onOptionsItemSelected() メソッドで Toolbar ウィジェットのナビゲーション機能を処理します。

ステップ 7. 新しいタイムシート用フォーム

次に、新しいタイムシートのエントリを作成するための FormActivity とレイアウトを作成します。

マニフェストを更新する

アプリのAndroidManifest.xmlを開き、FormActivityを追加します。

Form Activity のレイアウトを作成する

プロジェクト名と作業時間の入力欄として EditText、作業日の選択用として DatePicker を備えた form_activity.xml レイアウトを作成します。
FormActivity の Toolbar 用に、form_actions_menu.xml も作成します。

Form Activity を作成する

  • @string/api_urlhttp://10.0.2.2:8080/timesheets に設定されており、Android エミュレータから http://localhost:8080 で実行中の Node.js API に接続できるようにしています。
  • onCreate() メソッドはフォームを初期化し、送信ボタンが押されたときに postAPI() メソッドで使う入力内容を取得します。
  • postAPI() メソッドは、フォームから取得したユーザー入力を JSON 形式で Node.js API に送信します。
  • clearForm() メソッドはフォームの入力内容をクリアします。
  • onCreateOptionsMenu() メソッドと onOptionsItemSelected() メソッドは、Toolbar ウィジェットのナビゲーション機能を処理します。

アプリをテストする

先に進む前に、Node.JS API を実装していることを確認してください。
  1. ターミナルで API のディレクトリに移動し、node server コマンドを実行して API を起動します。
  2. Android Studio でモバイルアプリを開き、Run ボタンをクリックします。
  3. Nexus 5X API 23 の仮想デバイスを選択します。
  4. エミュレーターでモバイルアプリが起動したら、ユーザーとしてログインし、実行中の Node.JS API を使って勤怠エントリを作成・表示できます。
以上で完了です!