ユーザーが認証情報をまだ保存していない場合や、ユーザーがアプリにまだ登録していない場合、ユーザー認証情報を取得するリクエストは失敗することがあります。このような状況では、Credentials API を使用して、ユーザーの名前やメールアドレスなどのログインヒントを取得します。これらのヒントを使用してアプリのログイン フォームや登録フォームに自動入力し、アプリのオンボーディング プロセスを迅速化します。
Android 6.0(Marshmallow)以降では、Credentials API を使用してログインヒントを取得するために、アプリはデバイスや実行時の権限をリクエストする必要はありません。
始める前に
ログインのヒントを取得する
ログインヒントを取得するには、まず HintRequest
オブジェクトを作成してヒントセレクタ ダイアログを構成します。次に、HintRequest
オブジェクトを CredentialsClient.getHintPickerIntent()
に渡して、ユーザーにメールアドレスの選択を求めるインテントを取得します。最後に、startIntentSenderForResult()
でインテントを開始します。
HintRequest hintRequest = new HintRequest.Builder()
.setHintPickerConfig(new CredentialPickerConfig.Builder()
.setShowCancelButton(true)
.build())
.setEmailAddressIdentifierSupported(true)
.setAccountTypes(IdentityProviders.GOOGLE)
.build();
PendingIntent intent = mCredentialsClient.getHintPickerIntent(hintRequest);
try {
startIntentSenderForResult(intent.getIntentSender(), RC_HINT, null, 0, 0, 0);
} catch (IntentSender.SendIntentException e) {
Log.e(TAG, "Could not start hint picker Intent", e);
}
ユーザーは、使用するメールアドレスを選択するよう求められます。
次に、アクティビティの onActivityResult()
メソッドで Credential.EXTRA_KEY
パーセルからヒントを取得し、ユーザーがユーザー データベースに存在するかどうかを確認して、認証情報のヒントを使用して適切なアクティビティを開始します。
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_HINT) { if (resultCode == RESULT_OK) { Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY); Intent intent; // Check for the user ID in your user database. if (userDatabaseContains(credential.getId())) { intent = new Intent(this, SignInActivity.class); } else { intent = new Intent(this, SignUpNewUserActivity.class); } intent.putExtra("com.mycompany.myapp.SIGNIN_HINTS", credential); startActivity(intent); } else { Log.e(TAG, "Hint Read: NOT OK"); Toast.makeText(this, "Hint Read Failed", Toast.LENGTH_SHORT).show(); } } ... }
ログイン フォームに事前入力する
ユーザーがユーザー データベースに存在し、アプリのログイン アクティビティを開始した場合は、(必要に応じて)Credential
オブジェクトに ID トークンが含まれているかどうかを確認できます。その場合は、ユーザーにパスワードを入力させることなく、ID トークンを使用してユーザーのログインを行うことができます。
Credential
オブジェクトに ID トークンが含まれていない場合(または ID トークンを使用しない場合)は、インテントに追加したヒントをログイン フィールドに事前入力します。
public class SignInActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
Credential credential = intent.getParcelableExtra("com.mycompany.myapp.SIGNIN_HINTS");
// Pre-fill ID field
mUsernameView.setText(credential.getId());
...
}
...
}
登録フォームに事前入力する
ユーザーがユーザー データベースに存在しないときにアプリの登録アクティビティを開始した場合、インテントに追加したログインヒントを登録フィールドに事前入力します。
public class SignUpNewUserActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
Credential credential = intent.getParcelableExtra("com.mycompany.myapp.SIGNIN_HINTS");
// Pre-fill sign-up fields
mUsernameView.setText(credential.getId());
mDisplaynameView.setText(credential.getName()); // Might be null.
...
}
...
}
必要に応じて、確認済みのメールアドレスの ID トークンが Credential
オブジェクトに含まれているかどうかも確認できます。その場合、メールアドレスはすでに Google によって確認されているため、アプリのメール確認手順をスキップできます。