ワンタップサインインがニーズを満たす場合は、代わりにそれを使用することを検討してください。 One Tapには、更新されたユーザーエクスペリエンスとその他の改善があります。

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

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

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

Android 6.0(Marshmallow)以降では、認証情報 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 パーセルからヒントを取得し、ユーザーがユーザー データベース内にいるかどうかを確認して、認証情報のヒントを使用して適切なアクティビティを開始します。

@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 によってメールアドレスがすでに確認されているため、アプリのメール確認手順をスキップできます。