今回は、Firebase Authentication のメール認証に挑戦です。
メール認証の他にも、Twitter 認証や、匿名認証も用意されています。
初めてだから失敗するかも。
認証コンポーネントを追加する
プロジェクトに認証コンポーネントを追加します。

前回、Android Studio と Google アカウントを紐づけてあるので、接続は済んでいると思います。
まだの方は前回の記事を参考にして、接続してみて下さい。簡単だから説明なんて要らないけどね。
Add Firebase Authentication to your app を押します。

プロジェクトに追加されるコンポーネントが表示されます。
Accept Changes を押します。

レイアウトにテキストボックスとボタンを配置する
次に、見た目を作っていきます。
とりあえず、こんな感じにザックリと作ってみました。

今回はIDも変えているので、ソースをコピペする場合は気をつけて下さい。
認証のログイン方法を設定する
Firebase コンソールから認証に使用するログイン方法を設定します。

メールパスワードを有効にする
今回は、メール認証をするのでメールパスワードを有効にします。

他にもいろいろな認証方法があるので、利用者は便利だと思います。
認証処理を書く
お馴染みの Android Studio に戻って、[MainActivity.java]に認証処理を書いて行きます。
1.認証に必要なインポートをする。
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
2.FirebaseAuth のプライベートメンバー変数を宣言する。
private FirebaseAuth mAuth;
3.onCreate() メソッドで、FirebaseAuth インスタンスを初期化します。
mAuth = FirebaseAuth.getInstance();
4.認証状態の確認ボタンの処理を書く。
findViewById(R.id.check_user_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FirebaseUser user = mAuth.getCurrentUser();
if (user != null) {
showDialog(user.getUid());
}
}
});
5.新規登録ボタンの処理を書く。
findViewById(R.id.create_user_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String email = ((TextView)findViewById(R.id.email_txt)).getText().toString();
String password = ((TextView)findViewById(R.id.password_txt)).getText().toString();
createUser(email, password);
}
});
6.ログインボタンの処理を書く。
findViewById(R.id.sign_in_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String email = ((TextView)findViewById(R.id.email_txt)).getText().toString();
String password = ((TextView)findViewById(R.id.password_txt)).getText().toString();
signIn(email, password);
}
});
7.新規登録処理を書く。
private void createUser(String email, String password) {
mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser user = mAuth.getCurrentUser();
showDialog(user.getUid());
}
}
});
}
8.ログイン処理を書く。
private void signIn(String email, String password) {
mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser user = mAuth.getCurrentUser();
showDialog(user.getUid());
}
}
});
}
9.確認ダイアログ処理を書く。
private void showDialog(String message) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(message);
builder.setPositiveButton("閉じる", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
Dialog dialog = builder.create();
dialog.show();
}
なんやかんやで長くなってしまいました。
やっていることは前回と同じで、ボタンを押したら入力してあるメルアドとパスワードを、createUser や、signIn に投げているだけです。
そして結果が戻ってきて、成功だったらダイアログを表示する。
そんな感じですね。
実機で動かしてみよう
実機に転送して動作確認
実機に転送して動作確認をやってみます。

適当なメールアドレスとパスワードを入力して、新規登録のボタンを押しました。

新規登録が成功したので、ダイアログと UID が表示されました。
やったね。
Firebase コンソールも確認しておきます。

同じ UID で登録されていますね。
実際に存在するメールアドレスでの確認は控えよう
実際に存在するメールアドレスで確認するのもいいのですが、注意が必要です。
一応、今のコードだとメールが飛ばないのでいいですけど、実際にメールを飛ばす処理を書くと、本当に飛んでいってしまいます。
自分が持っているメールアドレスならいいけど、知らないメールアドレスに飛ばすと、スパムメールになって迷惑が掛かるので気をつけて下さい。
めちゃくちゃつまずいて心折れかけた
私がつまずいた点を紹介します。
パスワードは6文字以上
これに気がつくまでどれだけ苦労したか!!!
Google が配布している Firebase のチュートリアルのソースコードを拾ってきて、実際に動かしても認証されないし。
どこにも書いてないし。ホント、勘弁してください。
そんな気分で、いじくっていたら出来ました!
そんなこんなで
そんなこんなで、Firebase Authentication 編、完結です。
次は、Twitter 認証パート編です。
よろしくお願いします。