Запросы на получение учетных данных пользователя могут завершиться неудачей, если пользователь еще не сохранил учетные данные или еще не зарегистрировался в вашем приложении. В таких ситуациях используйте Credentials 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);
}
Пользователю предлагается выбрать адрес электронной почты, который он будет использовать.
Затем в методе 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
токен идентификатора. В этом случае вы можете войти в систему с помощью токена идентификатора , не требуя от пользователя ввода пароля.
Если объект Credential
не содержит токен идентификатора (или вы не хотите использовать токен идентификатора), предварительно заполните поля входа подсказками, которые вы добавили в намерение.
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
токен идентификатора с подтвержденным адресом электронной почты. В этом случае вы можете пропустить этап проверки электронной почты вашего приложения, поскольку адрес электронной почты уже подтвержден Google.