【Kotlin/Firebase】Authenticationでメールアドレス/パスワードでログインを実装する方法!

この記事からわかること

  • Kotlin/Firebase作成したAndroidアプリAuthentication導入する方法
  • メールアドレス/パスワードログインできるようにする方法
  • エラーcom.google.android.gms.common.api.ApiException: 10:解消方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

今回はFirebase Authenticationでログイン機能を実装する際に、メールアドレス/パスワードでログインできるようにする方法をまとめていきます。

Authenticationでメールアドレス/パスワードでログインする方法

手順

  1. Firebase プロジェクトにAuthenticationを追加
  2. gradleにSDKの追加
  3. フィンガープリントの取得/登録
  4. マニフェストファイルに権限を追加

上記手順で導入まで先に進めておきます。

1. Firebase プロジェクトにAuthenticationを追加

参考文献:Android で Google を使用して認証する

まずはFirebase Authenticationを「始める」をクリックして認証するログインプロバイダを選択します。

【Swift UI/Firebase】Authentication導入方法と使い方!ログイン機能の実装

ここでメール/パスワードを選択します。

【Swift UI/Firebase】Authentication導入方法と使い方!ログイン機能の実装 【Swift UI/Firebase】Authentication導入方法と使い方!ログイン機能の実装

これでプロジェクトの準備が整ったのでプロジェクトにAndroidアプリを追加しておいてください。すでにAndroidアプリを追加していた場合は「google-services.json」が更新されているので変更しておく必要があります。ここらへんの詳細な流れは以下の記事を参考にしてください。

【Android Studio】Firebaseの導入方法!Firebase Analytics/Google Analytics

2.gradleにSDK追加

続いて「build.gradle」にAuthenticationのFirebase SDK(Software Development Kit)を追加していきます。追加するのは以下の2つです。

dependencies {  
  // 〜〜〜〜〜〜〜〜〜〜
  // Authentication
  implementation 'com.google.firebase:firebase-auth-ktx'
  implementation 'com.google.android.gms:play-services-auth:20.7.0'
}

3.フィンガープリントの取得/登録

ここの詳細は以下の記事を参考にしてください。ざっくり説明すると以下コマンドを入力してフィンガープリントを取得しFirebaseに登録する流れになります。

$ keytool -list -v -keystore /Users/ユーザー名/.android/debug.keystore -alias androiddebugkey
【Kotlin/Firebase】AuthenticationでGoogleアカウントでログインを実装する方法!

4.マニフェストファイルに権限を追加

Authenticationの機能を利用するにはネットワークアクセスが必要になるので以下の権限を追加しておきます。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application....

アカウント作成

アカウントを作成するにはcreateUserWithEmailAndPasswordメソッドを使用します。引数にメールアドレスとパスワードを渡します。成功した時の処理はaddOnCompleteListener、失敗した時の処理はaddOnFailureListenerで実装できます。

FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password)
  // 成功した時の処理
  .addOnCompleteListener { task ->
      if (task.isSuccessful) {
          Log.d("Auth", "サインイン成功")
      }
  }
  // 失敗した時の処理
  .addOnFailureListener {
      Log.d("Auth", "サインイン失敗", it)
  }

サインイン

アカウントが作成済みでサインインするにはsignInWithEmailAndPasswordメソッドを使用します。

FirebaseAuth.getInstance().signInWithEmailAndPassword("ame8network@gmail.com", "12345678")
  .addOnCompleteListener { task ->
      if (task.isSuccessful) {
          //アカウント作成成功
          Log.d("Auth", "サインイン成功")
      }
  }
  .addOnFailureListener {
      //アカウント作成失敗
      Log.w("Auth", "サインイン失敗", it)
  }

サインアウト

サインイン済みのアカウントがサインアウトするにはsignOutメソッドを使用します。

FirebaseAuth.getInstance().signOut()

サインインしているか識別する

サインインしているかどうかを識別するにはcurrentUserプロパティを参照します。この値がnullであればサインインしていない状態になります。

val currentUser = FirebaseAuth.getInstance().currentUser

ユーザー情報取得

currentUserプロパティからはFirebaseUser型で値を取得できます。各プロパティからユーザー情報を取得できます。

currentUser.uid // lB1QK10YoUhgVUjY6Xg0yPaUga92
currentUser.email // sample@sample.com
currentUser.displayName // ""
currentUser.providerId // firebase

providerIdからはfirebaseとなってしまうのでメールアドレスやGoogleなどのプロバイダを知りたい場合はproviderDataから参照すると取得することができます。

user?.let {
  for (profile in it.providerData) {
      // (ex: google.com / password etc...)
      val providerId = profile.providerId
  }
}

ユーザー情報を編集する

ユーザー情報を編集したい場合userProfileChangeRequestで変更対象の情報リクエストを構築してupdateProfileメソッドを使用します。

val user = FirebaseAuth.getInstance().currentUser!!
val profileUpdates = userProfileChangeRequest {
    displayName = "Name"
}

user.updateProfile(profileUpdates)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d("Auth", "User profile updated.")
        }
    }

退会する

退会したい場合deleteメソッドを使用します。最終認証時間から時間が経過している場合は再認証してからでないと退会できないので注意してください。

currentUser.delete()
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d("Auth", "User account deleted.")
        }
    }.addOnFailureListener {
        //アカウント作成失敗
        Log.w("Auth", "退会失敗", it)
    }

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index