メインコンテンツへスキップ
この文書はモバイルおよびAPIアーキテクチャシナリオの一部であり、Androidでモバイルアプリケーションを実装する方法を説明します。実装したソリューションについての情報は、シナリオを参照してください。

1.アプリケーションのセットアップ方法

サンプルプロジェクト

始めるには、このチュートリアル固有のサンプルプロジェクトをダウンロードします。 ダウンロード Fork(Github) システム要件
  • Android Studio 2.3
  • Android SDK 25
  • Emulator - Nexus 5X - Android 6.0
要件を表示

依存関係の設定

この実装ではアプリのbuild.gradleファイル内で以下の依存関係を使用します。
  • Auth0.Android:このパッケージは、ユーザーを認証するためにAuth0との統合を可能にします。
  • OkHttp:このパッケージはNode.JS APIに要求を行うためのHTTPアプリケーションを提供します。
  • JWTDecode.Android:このパッケージはのデコードを支援します。
  • AppCompat:このパッケージは、アクティビティ内でのナビゲーションにおいてツールバーウィジェットの使用を可能にします。

マニフェストの更新

アプリケーションのAndroidManifest.xmlを開き、インターネット権限を追加します。
アプリケーションの詳細も更新して、ツールバーウィジェットを活用するようにします。

規定値の設定

Auth0 , Auth0ドメイン、およびAPIのURLを /res/values/strings.xmlにあるstrings.xmlリソースに設定してください。
この実装ではアプリケーションパッケージ内にactivities、models、 utilsのディレクトリを作成します。
  • activities/:このパッケージには LoginActivity.java, TimeSheetActivity.javaFormActivity.javaおよびUserActivity.javaが含まれます。
  • models/このパッケージにはTimeSheet.javaおよびUser.javaデータモデルが含まれます。
  • utils/:このパッケージにはUserProfileManager.javaTimeSheetAdapter.javaおよびImageTask.javaが含まれます。

2.ユーザーの認可

マニフェストの更新

アプリのAndroidManifest.xmlを開き、ログインアクティビティを追加します。

ログインアクティビティの作成

ログインアクティビティログイン()メソッドを作成して、 WebAuthProviderを初期化し、認可を開始します。WebAuthProviderに必ず正確なスキーム、オーディエンス、およびスコープを提供してください。この実装では以下の識別子を使用します。
  • schemedemo
  • https://api.exampleco.com/timesheet(Node.JS API)
  • response_typecode
  • scopetimesheets read:timesheets openid profile email offline_accessを作成します。これらのスコープにより、Node.js APIに対してPOSTおよびGET 要求を行うことができ、ユーザープロフィールやリフレッシュトークンを取得できます。
ログイン()メソッドで認証が成功すると、ユーザーをTimeSheetActivityにリダイレクトします。

資格情報の保存

ログイン後に受け取った資格情報を保存するためにAuth0.AndroidライブラリのCredentialsManagerSharedPreferencesを使用します。 ログイン()メソッドでWebAuthProviderを初期化する前に、CredentialsManagerを作成できます。CredentialsManagerAuthenticationAPIClientを渡すことで、期限切れのアクセストークンをリフレッシュできます。
認証成功後に資格情報がCredentialsManagerを通じて保存されるようにログイン()メソッドを更新してください。

3.ユーザープロファイルの取得

ユーザーモデルの作成

UserProfileManagerUserActivityで使用される簡単なユーザーモデルを作成します。

ユーザープロファイルの保存

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

4.スコープに基づいた条件付きUI要素の表示

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

スコープの保存

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

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

これで、ユーザーに特定のスコープが付与されているかどうかの情報に基づいて、特定のUI要素を表示することができます。例えば、approve:timesheetsスコープが付与されたユーザーにのみ表示される承認メニュー項目があります。 以下は、BaseActivityクラスのコードで、ユーザーが approve:timesheetsスコープを持っているかどうかをチェックし、それに基づいて承認アクティビティを表示するメニュー項目の可視性の状態を設定します。

5.APIの呼び出し

マニフェストの更新

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

TimeSheetActivityのレイアウトを構成する

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

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

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

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

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

タイムシートアクティビティの作成

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

6.ユーザープロファイルを表示する

ログインしているユーザーのプロファイルを表示するには、UserActivityを作成し、それに対応するuser_activity.xmlレイアウトと、ツールバーナビゲーション用のuser_action_menu.xmlを作成します。ビューは、ユーザーの名前、メールアドレス、およびプロファイル写真を表示します。

マニフェストの更新

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

ユーザーアクティビティレイアウトを作成する

次に、UserActivityのレイアウトであるuser_activity.xmlを作成します。これには,ユーザーのプロファイル写真用のImageViewと、ユーザーの名前とメールアドレス用のTextViewsが含まれます。
続いて UserActivityツールバー用にuser_actions_menu.xmlを作成します。

URLからプロファイル写真を読み込む

URLからプロファイル写真を取り込むには、AsyncTaskを拡張したタスクを作成し、バックグラウンドで実行します。

ユーザーアクティビティを作成する

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

7.新しいタイムシートのためのフォーム

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

マニフェストの更新

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

フォームアクティビティのレイアウトの作成

form_activity.xmlレイアウトを作成します。これにはプロジェクト名と作業時間の入力用の EditText および作業日用のDatePickerが含まれます。
また、FormActivityのツールバー用に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()メソッドはツールバーウィジェットのナビゲーション機能を処理します。

アプリのテスト

続行する前に、 Node.js APIを実装していることを確認してください。
  1. APIのディレクトリにターミナルで移動し、node serverコマンドを入力してAPIを起動します。
  2. 次に、Android Studioでモバイルアプリを開き、**[Run(実行)]**ボタンを押します。
  3. Nexus 5X API 23の仮想デバイスを選択します。
  4. エミュレーターがモバイルアプリを読み込んだら、ユーザーにログインし、その後、実行中のNode.js APIからタイムシートエントリを作成および表示できます。
これで作業完了です。完了です。