今月はFirebaseを触りまくるぞってことで、Firebase Authenticationを使用してみた
Firebase設定
公式を参考にプロジェクトの作成とアプリの追加を行った。
1. Firebaseにログインし、プロジェクトを作成します。
2. Android Studioでアプリのプロジェクトを作成
3. 作成したプロジェクトにアプリを追加します。公式参照
4. 実装
1、2については詰まることはないと思うので省きます。3で少し躓くかもしれないのでここから説明していきます。
作成したプロジェクト画面のプロジェクト概要で、以下の様なアプリ追加のボタンがありますので、こちらから追加していきます。
追加するアプリはAndroidを選択すると、
こちらの画面が開くと思います。ここでAndroidパッケージ名を入力するため、予めアプリを作成しておいてください。
デバッグ用の著名証明書は省略可能ですが、ログイン認証で必要になってくると思うので、Firebase Authentication
を使用する際は設定しなければなりません(多分)。こちらを参考にコマンドを叩けくだけです。
keytool -list -v \
-alias androiddebugkey -keystore ~/.android/debug.keystore
OR
./gradlew signingReport
1つ目のコマンドを叩くとキーストアのパスワードを求められますが、デバック用のキーストアのパスワードは、android
です。後は、説明通りに進めていけば追加できます(説明がとても丁寧なので省きます)。最後にアプリとの接続を確認するフェーズがあるので、そこで待機しておく(しなくてもいい)。
実装
Gralde
// Project
dependencies {
// ...
classpath 'com.google.gms:google-services:4.3.3'
}
// App
apply plugin: 'com.google.gms.google-services'
dependencies {
// ...
// Firebase
implementation 'com.google.firebase:firebase-auth-ktx:19.4.0'
implementation 'com.google.firebase:firebase-analytics:17.5.0'
implementation 'com.google.firebase:firebase-core:17.5.0'
}
ここで一旦ビルドすると、接続の確認がとれるはず
機能実装
認証状況
FirebaseAuth
をインスタンス化します。
class LoginActivity : AppCompatActivity() {
private lateinit var auth: FirebaseAuth
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
auth = Firebase.auth
// ...
}
現在の認証状況を確認するためには、FirebaseAuth
のcurrentUser
を取得することにより確認することができます。アプリ起動時にすでに認証済みの場合は、ログイン画面からログアウト画面に遷移するようにしました。
override fun onStart() {
super.onStart()
val currentUser = auth.currentUser
if (currentUser != null) LogoutActivity.start(this)
}
新規登録
メールアドレスとパスワードを使い新規登録する場合は、auth.createUserWithEmailAndPassword()
を使用します。入力されたメールアドレスとパスワード使って新規登録されます。
private fun createAccount(email: String, password: String) {
auth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
Log.d(TAG, "createUserWithEmail:success")
LogoutActivity.start(this)
} else {
Log.w(TAG, "createUserWithEmail:failure", task.exception)
Toast.makeText(
this, "Authentication failed.",
Toast.LENGTH_SHORT
).show()
}
}
}
ログイン
すでに登録されているメールアドレスとパスワードを使ってログインする場合、auth.signInWithEmailAndPassword()
を使用します。
private fun signIn(email: String, password: String) {
auth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
Log.d(TAG, "signInWithEmail:success")
LogoutActivity.start(this)
} else {
Log.w(TAG, "signInWithEmail:failure", task.exception)
Toast.makeText(
this, "Authentication failed.",
Toast.LENGTH_SHORT
).show()
}
}
}
ログアウト
private fun signOut() {
auth.signOut()
}