ユーザーにログインのヒントを提供する

<ph type="x-smartling-placeholder">

ユーザーがまだ保存していない場合、ユーザー認証情報の取得リクエストが失敗することがある ユーザーがまだアプリに登録していないときに、アプリにログインできます。対象 認証情報 API を使用してログインのヒント( ユーザー名とメールアドレスを入力します。これらのヒントを使用してアプリのログインを事前入力する 登録フォームを使用して、アプリのオンボーディング プロセスを迅速化します。

Android 6.0(Marshmallow)以降では、アプリからリクエストする ログインのヒントを取得するための任意のデバイスやランタイム権限の Credentials API。

始める前に

Android Studio プロジェクトを設定します

ログインのヒントを取得する

ログインヒントを取得するには、まず次のようにヒントセレクタ ダイアログを構成します。 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);
}

Smart Lock のログインヒント選択ツール

ユーザーは、使用するメールアドレスを選択するよう求められます。

次に、アクティビティの 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 によってすでに確認済みです。