ユーザーがまだ保存していない場合、ユーザー認証情報の取得リクエストが失敗することがある ユーザーがまだアプリに登録していないときに、アプリにログインできます。対象 認証情報 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
Parcel は、ユーザーがユーザー データベースに登録されているかどうかを確認します。
認証情報のヒントを使用して適切なアクティビティを開始します。
@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.
...
}
...
}
必要に応じて、Credential
オブジェクトに
ID トークン:
確認されたメールアドレスです。その場合は、アプリのメール確認手順をスキップできます。
メールアドレスは Google によってすでに確認済みです。