[Parse][Android] ユーザー管理機能を使ってみる
Parse Social
Parse では Parse Social と呼ばれる、ユーザー管理機能が用意されています。 この機能を使うと、Parse 上でとっても簡単にユーザー管理機能(Eメール認証、ログイン、SNS 連係)が実装できます。 ということでサクッとユーザー管理機能を試してみました!以下の記事を参考にしているので、併せて読んでいただくと理解が深まると思います。
Android Developer Guide #Users | Parse
サンプルプロジェクトの実行
Quickstart を使うと、予め用意されているサンプルプロジェクトがダウンロードできます。上のメニューから「Quickstart」を選択すると次の画面が表示されます。この画面はどんなプロダクトを作るか選択する画面です。「Social」をクリックします。
次に実行環境を選択する画面が表示されるので「Mobile」をクリックします。
次にプラットフォームを選択する画面が表示されるので「Android」をクリックします。
次に言語を選択する画面が表示されるので「Native(Java)」をクリックします。
次にプロジェクトの種類を選択する画面が表示されます。「New Project」はプロジェクトごとダウンロードでき、「Existing Project」は SDK のみダウンロードできます。ここでは「New Project」をクリックします。
次のような画面が表示されます。「Download the blank Android Project」をクリックして、プロジェクトをダウンロードしましょう。
ダウンロードしたら Zip を解凍し、Eclipse または Android Studio にインポートします。
ParseStarterProject というプロジェクトがインポートされるので、この中の ParseApplication を次のように書き換えます。サンプルコードはさきほどのプロジェクトをダウンロードした画面に記載されているので、それをコピペしましょう。
package com.parse.starter; import com.parse.Parse; import com.parse.ParseACL; import com.parse.ParseUser; import android.app.Application; public class ParseApplication extends Application { private static final String TAG = ParseApplication.class.getSimpleName(); @Override public void onCreate() { super.onCreate(); // Add your initialization code here Parse.initialize(this, "YOUR_APPLICATION_ID", "YOUR_CLIENT_KEY"); ParseUser user = new ParseUser(); user.setUsername("my name"); user.setPassword("my pass"); user.setEmail("email@example.com"); // other fields can be set just like with ParseObject user.put("phone", "650-555-0000"); user.signUpInBackground(new SignUpCallback() { public void done(ParseException e) { if (e == null) { Log.d(TAG, "サインアップ成功"); } else { Log.e(TAG, "エラーによりサインアップ失敗"); } } }); } }
ここでは Parse の初期化処理とユーザーのサインアップ処理を実装しています。サインアップに成功または失敗すると SignUpCallback の done() メソッドが呼ばれます。このソースを一度実行すると成功しますが、二度目以降はユーザー作成済みのため失敗します。
実行したら、プロジェクトをダウンロードした画面の下のほうにある「Test」ボタンをクリックしてみましょう。ユーザーが作成できたら次のような画面が表示されるはずです。
ユーザーに関する操作をいろいろ試してみる
ログイン
サインアップ後、ログインする場合は以下のコードで実行できます。上記のサインアップ処理を書き換えて実行してみましょう。
ParseUser.logInInBackground("my name", "my pass", new LogInCallback() { public void done(ParseUser user, ParseException e) { if (user != null) { Log.d(TAG, "ログイン成功"); } else { Log.e(TAG, "エラーによりログイン失敗"); } } });
ParseException が入っている場合、または ParseUser が null の場合はログイン失敗です。
メール認証
サインアップ時にメール認証を行いたい場合は Parse のコンソールの Settings 画面の「Verify user emails」を ON にします。
あとは通常のサインアップの処理を実装するだけで、setEmail() でセットしたメールアドレス宛てに認証メールが送信されます。デフォルトだと次のような内容になります。
送信元のアドレスやメールのタイトル、本文は設定画面から自由に設定可能です。
また、ユーザーが認証済みかどうでないかは ParseUser#get("emailVerified") で取得できます。true だと認証済み、false だと未認証です。missing の場合はメール検証機能がオフであったり、ユーザーのメールアドレスが無かったりといったような状態です。
現在のユーザーの取得
ログイン中のユーザーは getCurrentUser() で取得できます。もちろんログイン済みである必要があります。ログインしていないと null が返ってきます。
ParseUser user = ParseUser.getCurrentUser();
ログイン中のユーザー情報を取得したい場合はこのメソッドを呼ぶだけでOKです。またログアウトしたい場合は次のコードを呼ぶだけでOKです。
ParseUser.logOut();
匿名ユーザーのログイン
メールアドレス・パスワードなどを必要としない、匿名ユーザーを作成することもできます。匿名ユーザーでログインする場合は次のように実装します。
ParseAnonymousUtils.logIn(new LogInCallback() { @Override public void done(ParseUser user, ParseException e) { if (e != null) { Log.e(TAG, "匿名ユーザーのログイン失敗"); } else { Log.d(TAG, "匿名ユーザーのログイン成功"); } } });
これで通常のユーザーのように振る舞うことができます。匿名ユーザーですので、ログアウト後はユーザーは放棄されたと見なされ、そのユーザーで作成したオブジェクトにはアクセスできなくなります。また上記コードでログインした匿名ユーザーの ParseUser に後からメールアドレス・パスワードなどをセットして signUp() メソッドを呼ぶことで、匿名ユーザーを通常ユーザーに移行させるといったような変則的なこともできます。匿名ユーザーの状態で Facebook や Twitter にリンクさせることも可能です(Facebook と Twitter のリンク方法は後日解説する予定です)。
ParseAnonymousUtils.logIn(new LogInCallback() { @Override public void done(ParseUser user, ParseException e) { if (e != null) { Log.e(TAG, "匿名ユーザーのログイン失敗"); } else { Log.d(TAG, "匿名ユーザーのログイン成功"); // 後からサインアップ user.setUsername("username"); user.setEmail("sample@example.com"); user.setPassword("pass"); try { user.signUp(); Log.d(TAG, "匿名ユーザーからのサインアップ成功"); } catch (ParseException e1) { Log.d(TAG, "匿名ユーザーからのサインアップ失敗"); } } } });
また、現在のユーザーが匿名ユーザーであるか確認するためには次のように実装します。このメソッドを使って、匿名ユーザーの場合はサインアップを促したり、匿名ユーザーではない場合のみログアウトボタンを表示したりといったような実装が可能になります。
if (ParseAnonymousUtils.isLinked(ParseUser.getCurrentUser())) { Log.d(TAG, "匿名ユーザーである"); } else { Log.d(TAG, "匿名ユーザーではない"); }
また ParseUser#enableAutomaticUser() メソッドを使うと、ネットワークに接続せずにユーザーをセットすることが可能になります。この機能を使うと、アプリ起動後すぐに ParseUser.getCurrentUser() の戻り値を null 以外にすることができます。使いかたとしては、アプリ起動時にメールアドレスやパスワードを入れておいて、あとから実際のログイン処理を実行させるといったような感じですね。
// 自動的にユーザーをセット ParseUser.enableAutomaticUser(); // 起動回数をインクリメント(+1) ParseUser.getCurrentUser().increment("RunCount"); // 保存 ParseUser.getCurrentUser().saveInBackground();
ちなみにここで使っている increment() メソッドは指定したキーでインクリメントしていくメソッドです。Integer 型で保存されます。既に使われていて、かつ Integer ではない型のキーを指定すると IllegalArgumentException で落ちます。
まとめ
今回はユーザーの管理に関する機能をざっくり使ってみました。ユーザーのサインアップやサインインの機能はもちろん、匿名ユーザーの機能も充実していますね。今回は Facebook アカウント・Twitter アカウントへのリンク方法、アクセス制御に関しては触れていませんが、これらについては後日詳細に解説する予定です。お楽しみに!