【Kotlin/Firebase】Authenticationでメールアドレス/パスワードでログインを実装する方法!
この記事からわかること
- Kotlin/Firebaseで作成したAndroidアプリにAuthenticationを導入する方法
- メールアドレス/パスワードでログインできるようにする方法
- エラー:com.google.android.gms.common.api.ApiException: 10:の解消方法
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
今回はFirebase Authenticationでログイン機能を実装する際に、メールアドレス/パスワードでログインできるようにする方法をまとめていきます。
Authenticationでメールアドレス/パスワードでログインする方法
手順
- Firebase プロジェクトにAuthenticationを追加
- gradleにSDKの追加
- フィンガープリントの取得/登録
- マニフェストファイルに権限を追加
上記手順で導入まで先に進めておきます。
1. Firebase プロジェクトにAuthenticationを追加
参考文献:Android で Google を使用して認証する
まずは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
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)
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。