読者です 読者をやめる 読者になる 読者になる

どくぴーの備忘録

真面目なことを書こうとするクソメガネのブログ。いつ投げ捨てられるのかは不明

AndroidとNifty Cloud Mobile BackendでAndroidのコードのみでアプリに会員登録機能を実装する

Nifty Cloud Mobile Backend(以下:NCMB)という,mBaaSサービスを利用すると,会員登録,データストア,プッシュ通知と言った,サービスでよく用いるバックエンドを要する機能がコードレスに利用できるようになる.また,Android / iOS / JS / Unity向けにSDKが公開されており,簡単に利用することができる.今回は,Android用にログイン機能らしきものを実装してみる

予備知識

何はともあれ,イントロダクションを実行してとりあえずデータストア位を試しておこう.

AndroidによるNCMBでのログイン等,会員登録機能を実装する際には,NCMBUser クラスを用いる.基本的にはドキュメントを参照すると大体の使い方がわかるのだが,毎度毎度ログインを繰り返さなくても良いように,NCMBUser#getSessionToken メソッドを用いると,String型のトークンが登録済みであれば返ってくるので,こいつをnullチェックしてやれば,初回起動かそうでないかを判別できる.Activity#onCreateにて NCMB#initialize 以降で NCMBUser#getSessionToken を実行してトークンのnullチェックを行い,初回起動かそうでないかの分岐をかければ良いと思う.ドキュメントをみてると, NCMBUser#getCurrentUser にてログイン中のユーザを取得できるとあるが,こいつを初回起動の判別に使おうとすると取得した NCMBUser に対して NCMBUser#getUserName までしてnullチェックをしてあげる必要があるので,初回起動の対応だけしたいのであれば前者のほうがいいかなー,とは思う.初回起動時に NCMBUser をシングルトンで持たせたい場合はこちらで初回起動判別をして保持させたほうが良さそうな気もする.

初回起動判別

基本的には先述の初回起動判別を行い,基本画面ないしは初回登録/ログイン画面への遷移を行うのが普通と思われる.具体的には Activity#onCreate 内で

if(NCMBUser.getSessionToken() == null) {
    replaceFragment(new SignUpFragment(), false); //初回起動時
} else {
    replaceFragment(new MainFragment(), false); //通常起動時
}

としてやれば良い.replaceFragment についてはただのFragmentのreplaceなので各自補完してほしい.

会員登録・ログイン

とりあえず,ここではドキュメントにも書いてあるID・パスワードのみの登録を行うことにする.ドキュメントそのままではあるが会員登録,ログイン用の画面をFragmentで実装しておく(先述コード内のSignUpFragment及びLoginFragment).ID,パスワードを入力させ,登録ボタン,ログインボタンにつけた OnClickListener 内にて

登録は

@Override
public void onClick(View view) {
    // 各EditTextからID/パスワードを取得
    String id = mIdEdit.getText().toString();
    String pass = mPassEdit.getText().toString();

    // NCMBUserへID/パスワードを代入
    NCMBUser user = new NCMBUser();
    user.setUserName(id);
    user.setPassword(pass);
    user.signUpInBackground(new DoneCallback() {
        @Override
        public void done(NCMBException e) {
            if (e != null) { // 登録失敗時
                Log.d(TAG, e.getCode());
            } else { // 登録成功時
                Toast.makeText(getBaseActivity(), "Sign up succeeded!", Toast.LENGTH_SHORT).show();
                replaceFragment(new MainFragment(), false);
            }
        }
    });
}

ログインは

@Override
public void onClick(View view) {
    // 各EditTextからID/パスワードを取得
    String id = mIdEdit.getText().toString();
    String pass = mPassEdit.getText().toString();

    // NCMBUserへID/パスワードを代入
    NCMBUser user = new NCMBUser();
    user.setUserName(id);
    user.setPassword(pass);
    try{
        user.loginInBackground(id, pass, new LoginCallback() {
            @Override
            public void done(NCMBUser ncmbUser, NCMBException e) { //ログイン成功時
                if (e != null) {
                    Log.d(TAG, e.getCode());
                } else {
                    Toast.makeText(getBaseActivity(), "Login succeeded!", Toast.LENGTH_SHORT).show();
                    replaceFragment(new MainFragment(), false);
                }
            }
        });
    } catch(NCMBException e) { //ログイン失敗時
        Log.d(TAG, e.getCode());
    }
}

以上のようにすると初回起動時の会員登録/ログインの処理が簡単に実装できる.

ソースコード

一応ここまでのコードはDagger2,ButterKnifeと言ったライブラリが用いられているものではありますが,github上に公開してます

github.com

終わりに

…ちょくちょくNCMB関連の記事投げつけられたらいいなぁ