1

Я пытаюсь настроить приложение, использующее функцию Google Smartlock, для получения учетных данных, хранящихся в менеджере паролей Google, и автоматического входа в систему. Для этого я установил тест website , где пользователь может войти (во время просмотра в Google Chrome), и если она захочет сохранить пароль для сайта, он будет сохранен в менеджере паролей Google. Образец app, который у меня должен иметь возможность автоматически получать сохраненные учетные данные и использовать их для входа на страницу содержимого приложения.Автоматическая интеграция между приложением и веб-сайтом с помощью Google Smartlock Api

Я внимательно следил за документацией. Вот файл цифровых активов размещается в корне сайта:

[{ 
    "relation": ["delegate_permission/common.get_login_creds"], 
    "target": { 
    "namespace": "web", 
    "site": "https://officeloginsso.azurewebsites.net" 
    } 
}, 
{ 
    "relation": ["delegate_permission/common.get_login_creds"], 
    "target": { 
    "namespace": "android_app", 
    "package_name": "com.mslogin.t_sopal.msloginsso", 
    "sha256_cert_fingerprints": [ 
     "XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX" 
    ] 
    } 
},{ 
    "relation": ["delegate_permission/common.get_login_creds"], 
    "target": { 
    "namespace": "android_app", 
    "package_name": "com.login.codelab.sopalsmartlock", 
    "sha256_cert_fingerprints": [ 
     "XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX" 
    ] 
    } 
}] 

Манифест фрагмент файла, который включает в себя ссылку на файл в формате JSON:

<application>  
<meta-data android:name="asset_statements" android:resource="@string/asset_statements" /> 
</application> 

strings.xml:

<string name="asset_statements" translatable="false"> 
     [{ 
     \"include\": \"https://officeloginsso.azurewebsites.net/.well-known/assetlinks.json\" 
     }] 
    </string> 

Приложение было опубликовано (с региональным ограничением), и был удален json-файл, который возвращает ответ:

HTTP/1.1 200 OK 
Content-Type: application/json 

Несмотря на это, приложение по-прежнему не может получить имя пользователя и пароль, хранящиеся на веб-сайте. Что-то мне здесь не хватает?

+0

Я работаю над командой Smart Lock в Google: мы видим ассоциацию для com.mslogin.t_sopal.msloginsso с https://officeloginsso.azurewebsites.net, но не ком. login.codelab.sopalsmartlock ... последний опубликован в Play Маркете? Мы можем только ассоциации опубликовать приложения Play Store (может использовать альфа/бета-канал, если вам нужно сохранить его закрытым). –

+0

Чтобы проверить, что соединение для первого приложения/пакета работает, выполните следующие действия: http://stackoverflow.com/questions/34861744/password-from-associated-website-not-retrieved-in-app-via- smart-lock-api (например, проверьте, используют ли APK подписанные с теми же ключами в версии Play Store и т. д.) –

+0

Мой плохой. Апок был подписан с другим ключом для второго приложения. Я исправил его и теперь использую только первое приложение. Большое спасибо –

ответ

-1

Чтобы интегрировать Smart Lock для паролей в ваше приложение для Android, вы должны добавить вызовы к Credentials API в поток запуска и входа вашего приложения.

Чтобы получить учетные данные:

  • При запуске приложения, если пользователь не подписан уже в, называют CredentialsApi.request().

  • getStatus().isSuccess() Если возвращает истину, получить учетные данные пользователя с getCredential() и использовать их для входа в систему.

  • getStatus().isSuccess() Если возвращает ложь и getStatusCode() возвращает RESOLUTION_REQUIRED, вход пользователя требуется выбрать удостоверение. Вызов startResolutionForResult() предложит пользователю выбрать сохраненную учетную запись, а затем вызвать getParcelableExtra(Credential.EXTRA_KEY), чтобы получить учетные данные пользователя и использовать их для входа в

. Примечание: Если войти с извлеченными полномочий не удается, потому что неправильный пароль или учетной записи не существует, удалите учетные данные из Smart Lock.

В этом document показано, как интегрировать Smart Lock для паролей в ваше приложение для Android.

+0

Мой код работал отлично. Я ошибочно предоставил другой сертификат SHA в файле Digital Assets, который вызвал ошибку. Спасибо за ответ, хотя –

0

Для обсуждения в комментариях резолюция заключалась в том, чтобы убедиться, что файл ссылок на ресурсы соответствует пакету и подписи опубликованного приложения Play Store и что проверенный apk подписан с тем же сертификатом, что и опубликованное приложение (то есть, не подписанный из хранилища отладки/разработки). Вы можете использовать альфа/бета-канал, если вы хотите протестировать его до выхода на производственный канал.

В общем, вот вещи, чтобы проверить (некоторые упомянутые в вопросе):

  • обеспечения вашей ссылки активов файл является действительным JSON, содержащий как приложение (пакет Play Маркете и CERT отпечатков пальцев) и любой (рабочий стол, мобильный веб-сайт, региональные домены и т. д., каждый из которых нуждается в собственном ресурсе linklink.json в известном месте, но может указывать на каноническую копию) без компонента пути (например, без косой черты)

  • проверьте (например, с curl -I), что файл обслуживается с HTTP 200 (без переадресаций) из хорошо известного место (должно быть доступно точно /.well-known/assetlinks.json) с «Content-Type: применение/JSON» заголовок и доступно для бот/гусеничного

  • убедитесь, что asset_statements в приложении манифесте под application и действует спасся JSON и указывает на файл ссылок активов в известном местоположении https. Приложение должно быть опубликовано прежде, чем мы можем обнаружить это, но вы можете использовать альфа/бета-канал для тестирования, так долго, как APK имеет последнюю версию кода

После того, как эти требования будут выполнены, и приложение опубликованный в Play Маркете, ассоциация будет включена автоматически с 1-2 рабочими днями. Подробности этих требований доступны по адресу https://developers.google.com/identity/smartlock-passwords/android/associate-apps-and-sites