KiiCloud

ひとりKii Cloud Advent Calendar 2014-12-7

More than 3 years have passed since last update.

この記事は、ひとりKii Cloud Advent Calendarの7日目の記事です。


7日目「ログインを実装してみる」

6日目でユーザー登録機能が実装できたので、次はログイン機能。といってもKiiVolleyAPI#loginAsUser()を呼ぶだけ。

@OnClick(R.id.button_login)

void loginClicked(View v) {
String username = mUsernameEdit.getText().toString();
String password = mPasswordEdit.getText().toString();

mKiiAPI.loginAsUser(username, password, new AppAPI.LoginCallback<KiiUser>() {
@Override
public void onSuccess(String token, KiiUser kiiUser) {
Toast.makeText(getActivity(), R.string.login_done, Toast.LENGTH_SHORT).show();
// メイン画面に遷移
// ログイン時に取得できるトークンを渡す
FragmentUtils.toNextFragment(getFragmentManager(), R.id.container, MainFragment.newInstance(token), false);
}

@Override
public void onError(Exception e) {
Toast.makeText(getActivity(), R.string.login_failed, Toast.LENGTH_SHORT).show();
}
});
}


自動ログインもやりたい

アクセストークンさえあればログイン済みになれるので、ログイン後にtokenをSharedPreferenceに保存しておくことで自動ログインを実現する。

mKiiAPI.loginAsUser(username, password, new AppAPI.LoginCallback<KiiUser>() {

@Override
public void onSuccess(String token, KiiUser kiiUser) {
Toast.makeText(getActivity(), R.string.login_done, Toast.LENGTH_SHORT).show();

// Save access token
SharedPreferences pref = getActivity().getSharedPreferences(Constants.PREF_NAME, Context.MODE_PRIVATE);
pref.edit().putString(Constants.PREF_KEY_TOKEN, token).apply();

FragmentUtils.toNextFragment(getFragmentManager(), R.id.container, MainFragment.newInstance(token), false);
}

@Override
public void onError(Exception e) {
Toast.makeText(getActivity(), R.string.login_failed, Toast.LENGTH_SHORT).show();
}
});

MainActivityの先頭で、tokenが保存済みかチェック。

// login check

SharedPreferences pref = getSharedPreferences(Constants.PREF_NAME, Context.MODE_PRIVATE);
String token = pref.getString(Constants.PREF_KEY_TOKEN, null);
if (token == null) {
FragmentUtils.toNextFragment(getSupportFragmentManager(), R.id.container, LoginFragment.newInstance(), false);
} else {
FragmentUtils.toNextFragment(getSupportFragmentManager(), R.id.container, MainFragment.newInstance(token), false);
}