GitHub 認証をアプリに統合することで、ユーザーは GitHub アカウントを使用して Firebase での認証を行えます。
準備
- Firebase を Android プロジェクトに追加します。
- アプリを Firebase プロジェクトに接続していない場合は、Firebase コンソールで接続します。
- Firebase Authentication の依存関係をアプリレベルの
build.gradleファイルに追加します。implementation 'com.google.firebase:firebase-auth:16.1.0'
- GitHub でデベロッパー アプリケーションとしてアプリを登録し、アプリの OAuth 2.0 クライアント ID とクライアント シークレットを取得します。
- GitHub 認証を有効にします。
- Firebase コンソールで [Auth] セクションを開きます。
- [ログイン方法] タブで [GitHub] を有効にし、GitHub から取得した OAuth 2.0 の [クライアント ID] と [クライアント シークレット] を指定します。
- 次に、GitHub アプリの構成にあるアプリ設定ページで、Firebase OAuth リダイレクト URI(
my-app-12345.firebaseapp.com/__/auth/handlerなど)を認証コールバック URL として設定します。
Firebase で認証する
- デベロッパー向けドキュメントに沿って GitHub 認証をアプリに統合します。ウェブ アプリケーション フローを使用して、GitHub からの OAuth 2.0 コールバックを処理するインテント フィルタをアプリに設定します。GitHub のログインフローの最後に OAuth 2.0 アクセス トークンを受け取ります。
- ログイン アクティビティの
onCreateメソッドで、FirebaseAuthオブジェクトの共有インスタンスを取得します。Java
Androidprivate FirebaseAuth mAuth;// ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
Kotlin
Androidprivate lateinit var auth: FirebaseAuth// ... // Initialize Firebase Auth auth = FirebaseAuth.getInstance()
- アクティビティを初期化するときに、ユーザーが現在ログインしているかどうかを確認します。
Java
Android@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); updateUI(currentUser); }Kotlin
Androidpublic override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser updateUI(currentUser) } - ユーザーが GitHub でのログインに成功したら、OAuth 2.0 アクセス トークンを Firebase 認証情報と交換し、Firebase 認証情報を使用して Firebase での認証を行います。
Java
AndroidString token = "<GITHUB-ACCESS-TOKEN>"; AuthCredential credential = GithubAuthProvider.getCredential(token); mAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful()); // If sign in fails, display a message to the user. If sign in succeeds // the auth state listener will be notified and logic to handle the // signed in user can be handled in the listener. if (!task.isSuccessful()) { Log.w(TAG, "signInWithCredential", task.getException()); Toast.makeText(MainActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); } // ... } });Kotlin
Androidval token = "<GITHUB-ACCESS-TOKEN>" val credential = GithubAuthProvider.getCredential(token) mAuth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful) // If sign in fails, display a message to the user. If sign in succeeds // the auth state listener will be notified and logic to handle the // signed in user can be handled in the listener. if (!task.isSuccessful) { Log.w(TAG, "signInWithCredential", task.exception) Toast.makeText(baseContext, "Authentication failed.", Toast.LENGTH_SHORT).show() } // ... }signInWithCredentialの呼び出しが成功した場合は、getCurrentUserメソッドを使用してユーザーのアカウント データを取得できます。
次のステップ
ユーザーが初めてログインすると、新しいユーザー アカウントが作成され、ユーザーがログインに使用した認証情報(ユーザー名とパスワード、電話番号、または認証プロバイダ情報)にアカウントがリンクされます。この新しいアカウントは Firebase プロジェクトの一部として保存され、ユーザーのログイン方法にかかわらず、プロジェクトのすべてのアプリでユーザーを識別するために使用できます。
-
アプリでは、
FirebaseUserオブジェクトからユーザーの基本的なプロフィール情報を取得できます。ユーザーの管理についての記事をご覧ください。 Firebase Realtime Database と Cloud Storage のセキュリティ ルールでは、ログイン済みユーザーの一意のユーザー ID を
auth変数から取得し、それを使用して、ユーザーがアクセス可能なデータを制御できます。
既存のユーザー アカウントに認証プロバイダの認証情報をリンクすることで、ユーザーが複数の認証プロバイダを使用してアプリにログインできるようになります。
ユーザーのログアウトを行うには、signOut を呼び出します。
Java
Android
FirebaseAuth.getInstance().signOut();
Kotlin
Android
FirebaseAuth.getInstance().signOut()

