このチュートリアルは、ネイティブFacebookログインを使用して、Androidアプリケーションにユーザーログインを追加する方法について説明します。ログインして、アカウント用に構成された例を参考にして、このクリックスタートに従うことをお勧めします。
1
システム要件
- Android Studio 3.6.1
- Android SDK 25
- Emulator - Nexus 5X - Android 6.0
2
始める前に
- FacebookログインSDKをインストールして構成します。https://developers.facebook.comでFacebookアプリの作成プロセスも行います。この手順が終了したら、Facebookログインが統合された状態でモバイルアプリが稼働しているはずです。
3
Facebookのアクセス許可を要求する
アプリケーションでは既にFacebookでサインインすることができますが、リッチユーザープロファイルを確保するには、Facebookログインボタンがセットアップされたアクセス許可を更新する必要があります。要求されたアクセス許可を
public_profile
とemail
に設定します。これで、アクセス要求がユーザーによって受け入れられたという前提で、ユーザーメールも応答の一部に含まれます。loginButton.setPermissions(Arrays.asList("public_profile", "email"));
4
performLoginメソッドを作成する
次に、Auth0で認証プロセスを始めるために、送信するペイロードの準備を行う新しいメソッドを作成します。内部コールバックを処理するために、小さなインターフェイスを利用します。サンプルでは、メソッドの名前は
performLogin
、インターフェイスの名前はSimpleCallback
に指定されています。両方を追加してください。5
performLoginメソッドを呼び出す
次に、Facebookログインのコールバックの
onSuccess
メソッドから特定のメソッドを呼び出します。6
Facebookを統合する
Auth0でFacebookを使ってサインインすると、バックエンドはユーザーが主張する通りの本人であることを確認するために、バックグラウンドで確認作業を実施します。これを実現するには、セッションアクセストークンを提供する必要があります。さらに、このFacebookユーザーを表すために、ユーザーをAuth0で作成する必要がある場合、バックエンドでは姓名やメールなどの一部の情報が必要になります。Auth0ユーザープロファイルでは、メールは(提供された場合)未検証としてフラグが付けられます。セッションアクセストークンとユーザープロファイルを取得するには、Facebook APIに対してさらに2つの要求を行う必要があります。
7
Facebookセッションアクセストークンを取得する
Facebook APIの
/oauth/access_token
エンドポイントに対して新しいGET要求を行います。以下のクエリパラメーターを使用します:grant_type
:fb_attenuate_token
。fb_exchange_token
:ログイン時に受け取るアクセストークンです。client_id
:アプリIDです。この値は、Facebook開発者のダッシュボードから取得したもので、Facebookログインの統合に成功している場合は、アプリケーションで既に使用されているはずです。
GraphRequest
クラスを使用して、この要求を実行します。8
Facebookのユーザープロファイルを取得する
上の手順と同様に、別のGET要求を行います。エンドポイントパスは、Facebookログイン結果から得たユーザーID値(
/904636746222815
など)になります。次のパラメーターを使用します:access_token
:ログイン時に受け取るアクセストークンです。fields
:応答で取得したいユーザープロファイルからのフィールドです。これらは、初めに構成されたFacebookログインボタンのアクセス許可に直接関連付けられています。アクセス許可が任意の場合、ユーザーはまずアクセス許可を付与することに同意する必要があります。Auth0でユーザーをサインアップするには、フルネームとメールを入力するだけで十分です。
9
Auth0を統合する
必要なアーティファクトを取得したら、IDやアクセストークンなどAuth0のユーザー資格情報に交換する準備ができました。しかしまず、その最後の要求を行うためにAuth0 SDKをセットアップする必要があります。次に、Gradle Syncタスクを実行し、プロジェクトとその依存関係を更新します。ただし、Web認証をサポートする予定の場合は、ここでマニフェストのプレースホルダーを宣言する方法を確認してください。
アプリケーションキーを取得する
- Auth0 Dashboardの**[Applications(アプリケーション)]** セクションで、[Sign in with Facebook(Facebookでサインイン)] を有効にした既存のアプリケーションを選択します。この手順で不明な点があれば、この記事の上に記載された要件セクションを確認してください。
- アプリケーションの設定ページから**[Domain(ドメイン)]** と**[Client ID(クライアントID)]** の値をコピーします。これらはSDKで必要です。
- Androidアプリケーションのstrings.xmlファイルで2つの新しいリソースを作成して保存します。キーの名前は以下で使用するキーと一致しなければなりません。
Auth0 SDKをインストールする
Androidアプリケーションで、この行をapp/build.gradleファイルに追加します:Web認証のマニフェストを更新する
アプリケーションがSDKによって提供されるWeb認証モジュールを利用する予定がない場合は、未使用のアクティビティをAndroidManifest.xmlファイルから削除し、マニフェストのプレースホルダー問題を防ぐ必要があります。これを実現するには、アクティビティの宣言を追加し、tools:node=“remove”の注釈を加えます。10
受け取ったデータをAuth0トークンに交換する
SDKは、使用する前にインスタンス化する必要があります。クラスレベルでフィールドを定義し、ロジックを維持するメソッドを作成し、取得した2つのアーティファクトをAuth0のユーザー資格情報に交換します。サンプルでは、このメソッドの名前は
onCreate
メソッドで初期化します。上の手順で定義した資格情報がAuth0
コンストラクターに渡されたら、AuthenticationAPIClient
の新しいインスタンスが作成されます。exchangeTokens
です。APIクライアントは、トークンとサブジェクトタイプを受け取るloginWithNativeSocialToken
メソッドを宣言します。前者はセッショントークンに対応し、後者はバックエンドが認証しようとする接続のタイプを示します。ネイティブFacebookログインでは、以下の値を使用します:"http://auth0.com/oauth/token-type/facebook-info-session-access-token"
構成する必要がある他の値は、ユーザープロファイル(user_profile
キーを使用)とAuth0トークンに含まれる要求されたスコープです。変化しないことを把握している値はすべて、クラスの上部で定数として維持しておくと便利です。サンプルは、件名トークンタイプ、Facebookのアクセス許可、およびAuth0のスコープに対して定数を利用します。Auth0のスコープの詳細については、特集記事をお読みください。
11
performLoginメソッドを更新する
すべての手順が独自のメソッドで定義されたら、
performLogin
メソッドに全部まとめて入れましょう。すべて正常に実行されると、FacebookログインSDKでネイティブ認証ができるようになります。つまり、Facebookアプリがデバイスにインストールされていると、認証はブラウザーアプリでなくアプリケーションを介して処理されます。次のステップ
成功です!ここまで来れば、アプリケーションにログイン、ログアウト、ユーザープロファイル情報が備わっているはずです。これでクイックスタートチュートリアルは終了ですが、機能はまだまだたくさんあります。Auth0でできることについて詳しくは、以下をご覧ください。- Auth0 Dashboard - Auth0のテナントやアプリケーションを構成して管理する方法について説明します
- Auth0 Marketplace - Auth0の機能性を拡張できる各種の統合を見つけられます