[Parse][Android] ユーザー管理機能を使ってみる

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Parse Social

Parse では Parse Social と呼ばれる、ユーザー管理機能が用意されています。 この機能を使うと、Parse 上でとっても簡単にユーザー管理機能(Eメール認証、ログイン、SNS 連係)が実装できます。 ということでサクッとユーザー管理機能を試してみました!以下の記事を参考にしているので、併せて読んでいただくと理解が深まると思います。

Android Developer Guide #Users | Parse

サンプルプロジェクトの実行

Quickstart を使うと、予め用意されているサンプルプロジェクトがダウンロードできます。上のメニューから「Quickstart」を選択すると次の画面が表示されます。この画面はどんなプロダクトを作るか選択する画面です。「Social」をクリックします。

parse_social01

次に実行環境を選択する画面が表示されるので「Mobile」をクリックします。

parse_social02

次にプラットフォームを選択する画面が表示されるので「Android」をクリックします。

parse_social03

次に言語を選択する画面が表示されるので「Native(Java)」をクリックします。

parse_social04

次にプロジェクトの種類を選択する画面が表示されます。「New Project」はプロジェクトごとダウンロードでき、「Existing Project」は SDK のみダウンロードできます。ここでは「New Project」をクリックします。

parse_social05

次のような画面が表示されます。「Download the blank Android Project」をクリックして、プロジェクトをダウンロードしましょう。

parse_social06

ダウンロードしたら 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 の初期化処理とユーザーのサインアップ処理を実装しています。サインアップに成功または失敗すると SignUpCallbackdone() メソッドが呼ばれます。このソースを一度実行すると成功しますが、二度目以降はユーザー作成済みのため失敗します。

実行したら、プロジェクトをダウンロードした画面の下のほうにある「Test」ボタンをクリックしてみましょう。ユーザーが作成できたら次のような画面が表示されるはずです。

parse_social07

ユーザーに関する操作をいろいろ試してみる

ログイン

サインアップ後、ログインする場合は以下のコードで実行できます。上記のサインアップ処理を書き換えて実行してみましょう。

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 が入っている場合、または ParseUsernull の場合はログイン失敗です。

メール認証

サインアップ時にメール認証を行いたい場合は Parse のコンソールの Settings 画面の「Verify user emails」を ON にします。

parse_social08

あとは通常のサインアップの処理を実装するだけで、setEmail() でセットしたメールアドレス宛てに認証メールが送信されます。デフォルトだと次のような内容になります。

parse_social09

送信元のアドレスやメールのタイトル、本文は設定画面から自由に設定可能です。

また、ユーザーが認証済みかどうでないかは 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 アカウントへのリンク方法、アクセス制御に関しては触れていませんが、これらについては後日詳細に解説する予定です。お楽しみに!

参考