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上に公開してます
終わりに
…ちょくちょくNCMB関連の記事投げつけられたらいいなぁ