Статьи

Регистрация одним касанием и автоматический вход без ввода пароля с помощью Smart Lock

Прошло шесть месяцев с момента запуска Smart Lock для паролей, и мы очень рады тому, как это оказало влияние на то, что пользователи снова вошли в свои любимые приложения. Миллион пользователей без проблем вошли в систему с использованием сохраненных учетных записей для более чем 40 основных приложений при переходе с одного устройства Android на другое или с Chrome на Android и наоборот. Эта первая волна разработчиков осознала, что устранение трения при входе в систему увеличивает повторное вовлечение пользователей, возможности монетизации и аналитику между устройствами, повышая ценность и опыт их пользователей.

Нью — Йорк Таймс видел 80 процентов своего нового входа в событиях при содействии Smart Lock. Между тем, команда поддержки клиентов Netflix обнаружила более чем 20-процентное сокращение случаев поддержки, связанных с восстановлением аккаунта для их пользовательской базы Android. Пользователи настоятельно предпочитают оставаться на своих устройствах с более чем 60-процентной подпиской, чтобы сохранить информацию для входа в основные приложения с поддержкой Smart Lock. И многие из этих разработчиков смогли реализовать эти достижения менее чем за один день, внеся только изменения на стороне клиента в свое приложение. Чтобы узнать больше о Smart Lock для паролей, посетите наш сайт для разработчиков.

Что нового

В последней версии сервисов Google Play мы внесли некоторые усовершенствования в API-интерфейс Smart Lock for Passwords, чтобы помочь вам регистрировать новых пользователей или быстрее регистрировать существующих. Используя новый метод для получения «подсказок» для входа , ваши пользователи увидят диалоговое окно со списком адресов электронной почты, которые они могут выбрать одним нажатием:

Этот новый опыт особенно важен для модели разрешений на этапе выполнения Android Marshmallow. Чтобы упростить и улучшить взаимодействие с пользователем, это диалоговое окно не требует разрешений для устройства и включает в себя любые адреса электронной почты, которые пользователь сохранил с помощью Smart Lock, а не только учетные записи на устройстве. Это означает, что вы можете улучшить свои процессы входа и регистрации, чтобы большинству ваших пользователей никогда не приходилось вводить свой адрес электронной почты. В приложениях, использующих это диалоговое окно, почти три четверти пользователей выбирают отображаемую запись, что улучшает показатели регистрации.

Затем, после того, как пользователь коснулся и поделился своим адресом электронной почты, с некоторой поддержкой на стороне сервера, сложное приложение может полностью адаптировать процесс входа в систему. Используя адрес электронной почты, вы можете проверить свою базу данных, чтобы увидеть, если пользователь уже зарегистрирован для учетной записи. Затем можно интеллектуально отобразить экраны входа или регистрации, предварительно указав адрес электронной почты, имя и фотографию профиля пользователя.

Пропуск пароля в целом

Можно сделать еще лучше: если пользователь выбирает учетную запись Google из диалогового окна, предоставляется токен OpenID Connect ID . Это может избавить ваше приложение от необходимости проверять адреса электронной почты для новых учетных записей или вообще пропускать пароль для возвращающихся пользователей. Идентификационные токены также используются в Google Sign-In для аутентификации вместо пароля и являются убедительным подтверждением от Google о том, что присутствует владелец данного адреса электронной почты. Если пользователи на вашем сайте восстанавливают свои пароли по электронной почте, то идентификационный токен от Google дает вам то же самое утверждение, что пользователь владеет адресом электронной почты и выполнил вход на это устройство с этим адресом электронной почты. Вы также можете считать наличие ID-токена в дополнение к паролю сигналом для предотвращения взлома и злоупотребления паролем.

Мы обнаружили, что большинство пользователей Android используют адрес электронной почты, зарегистрированный на их устройстве, в качестве своей учетной записи для сторонних приложений, так что это означает плавный вход в систему большинства ваших постоянных пользователей или создание новой учетной записи одним касанием. !

Примеры кода и пользовательский поток

Вот краткий обзор того, как упростить процесс входа в
приложение : при запуске приложения запрашивайте сохраненные учетные данные Smart Lock и по возможности переходите прямо к контенту пользователя. Создайте запрос на ввод пароля или учетных данных Google, затем прослушайте ответный звонок с результатами. Войдите немедленно, если сохраненные учетные данные пользователя (имя пользователя / пароль, идентификационный токен и т. Д.) Доступны.

 CredentialRequest request = new CredentialRequest.Builder()  
     .setSupportsPasswordLogin(true)  
     .setAccountTypes(IdentityProviders.GOOGLE) // you can add other identity providers, too  
     .build();  
 Auth.CredentialsApi.request(mCredentialsApiClient, request).setResultCallback(  
     new ResultCallback<CredentialRequestResult>() {  
       public void onResult(CredentialRequestResult result) {  
         if (result.getStatus().isSuccess()) {  
          handleCredential(result.getCredential()) // sign in automatically!  

Когда пользователь хочет или должен войти в систему со своим адресом электронной почты, покажите средство выбора, чтобы помочь ему ввести его. Создайте запрос на подсказки, передайте управление системе для отображения пользовательского интерфейса и обработайте результат, когда пользователь выбирает запись.

 HintRequest hintRequest = new HintRequest.Builder()  
     .setEmailAddressIdentifierSupported(true)  
     .setAccountTypes(IdentityProviders.GOOGLE)  
     .build();  
 PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(mCredentialsApiClient,   
                                 hintRequest);  
 startIntentSenderForResult(intent.getIntentSender(), RC_HINT, null, 0, 0, 0);  
 ...  
 onActivityResult(int requestCode, int resultCode, Intent data) {  
   switch (requestCode) {  
     case RC_HINT:  
       if (resultCode == RESULT_OK) {  
         Credential hint = data.getParcelableExtra(Credential.EXTRA_KEY);  
         handleCredential(hint);  

Результат запроса подсказки будет содержать выбранный пользователем идентификатор и маркер идентификатора, если это учетная запись Google на устройстве. Если вы используете идентификационный токен, вы должны отправить и проверить его на своем сервере в целях безопасности. Обратите внимание, что этот токен также будет содержать претензию, если адрес электронной почты подтвержден, поэтому вы можете пропустить любой шаг проверки электронной почты. Если токен отсутствует или вы не можете выполнить проверку на стороне сервера, просто заполните поле электронной почты для пользователя.

 handleCredential(Credential credential) {  
   if (!credential.getIdTokens().isEmpty()) {  
     credential.getIdTokens().get(0).getIdToken(); // send the ID token string to your server  
   } else {  
     // otherwise, try fill the sign-in form fields and submit if password is available  
     mEmailField.setText(credential.getId());  
     mPasswordField.setText(credential.getPassword());  

На вашем сервере, после проверки идентификационного токена, используйте его для создания учетной записи или входа пользователя без необходимости ввода его пароля. Google предоставляет библиотеки для проверки токенов , или вы можете использовать реализацию с открытым исходным кодом. Идентификационный токен содержит адрес электронной почты пользователя, и вы можете найти его в своей базе данных, чтобы определить, нужно ли создавать учетную запись.

 GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)  
         .setIssuer("https://accounts.google.com")  
         .setAudience(Arrays.asList(String.format("android://%s@%s",   
                             SHA512_HASH, PACKAGE_NAME)))  
         .build();  
 ...  
     GoogleIdToken idToken = verifier.verify(idTokenString);  
     if (idToken == null) {  
       Log.w(TAG, "ID Token Verification Failed, check the README for instructions.");  
       return;  
     }  
     GoogleIdToken.Payload payload = idToken.getPayload();  
     Log.d(TAG, "IdToken:Email:" + payload.getEmail());  
     Log.d(TAG, "IdToken:EmailVerified:" + payload.getEmailVerified());  
     // based on the email address, determine whether you need to create account   
     // or just sign user in  

Затем сохраните «подсказку» для адреса электронной почты пользователя в Smart Lock для автоматического входа в следующий раз. Просто вызовите метод сохранения API Credentials с подсказкой и либо введите пароль, введенный пользователем, либо укажите тип учетной записи, если вы вошли в систему с ID-токеном.

 Credential credential = new Credential.Builder(hint)  
     // if you signed in with ID token,   
     // set account type to the URL for your app (instead of a password field)  
     //.setAccountType("https://yourdomain.com")   
     .setPassword(password)  
     .build();  
 Auth.CredentialsApi.save(mCredentialsApiClient, credential).setResultCallback(  
     new ResolvingResultCallbacks<Status>(this, RC_SAVE) {  

Выучить больше

Чтобы узнать больше об основах интеграции с Smart Lock API, ознакомьтесь с пошаговым руководством в нашей лаборатории кода . Мы рады сделать возможной аутентификацию без паролей с помощью Smart Lock и с нетерпением ждем мира, в котором не только управление учетными данными может осуществляться более эффективно, но и приложения могут быстро и надежно регистрировать и регистрировать своих пользователей без необходимости вводить имена пользователей и пароли. Мы будем рады услышать ваши отзывы или вопросы !