Диалоговое окно сохранения Google Smart Lock недоступно в Android Oreo

Я знаю, что в версии 8.0 предпочтительнее использовать автозаполнение, но я хочу вызвать диалоговое окно сохранения Google Smart Lock. При реализации я получаю эту ошибку:

{Status{statusCode=The Credentials API's save confirmation dialog has been disabled to avoid conflicts with the Android Autofill feature. This choice may be overridden via AuthCredentialsOptions.Builder.forceEnableSaveDialog()., resolution=null}}

но в документах Android, для этого нет метода. Нигде в поиске Google или поиске в документах я не могу найти этот метод forceEnableSaveDialog().

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

Фрагмент кода SaveCredentials:

mCredentialsApiClient = new GoogleApiClient.Builder(Xamarin.Forms.Forms.Context)
                                                                       .AddConnectionCallbacks((obj) =>
                                                                       {
                                                                           var credendial = new Credential.Builder(userName).SetPassword(password).Build();

                                                                           Auth.CredentialsApi.Save(mCredentialsApiClient, credendial).SetResultCallback(new ResultCallback<IResult>((obj2) =>
                                                                           {
                                                                               Print("Saved");
                                                                                if (obj2.Status.IsSuccess)
                                                                                {
                                                                                    Print("Credentails successfully saved with Google Smart Lock");
                                                                                }
                                                                                else if (obj2.Status.StatusCode == CommonStatusCodes.ResolutionRequired)
                                                                                {  
                                                                                    obj2.Status.StartResolutionForResult(CrossCurrentActivity.Current.Activity, obj2.Status.StatusCode);
                                                                                }
                                                                           }));
                                                                       })
                                                                       .AddOnConnectionFailedListener(NotConnected)
                                                                       .AddApi(Auth.CREDENTIALS_API)
                                                                       .Build();
                            mCredentialsApiClient.Connect(); 

Это Android в Xamarin. Те же методы и все такое, просто используя C#


person grenadier89    schedule 26.10.2017    source источник
comment
Можете ли вы показать мне код, который у вас есть сейчас?   -  person Giovanni    schedule 26.10.2017
comment
Я добавил фрагмент кода, где я сохраняю. возвращаемый obj2.Status - это то, откуда пришло это сообщение   -  person grenadier89    schedule 26.10.2017


Ответы (2)


«... для этого нет никакого метода. Нигде в поиске Google или поиске в документах я не могу найти этот метод forceEnableSaveDialog()».

Это связано с периодом между выпуском версии APK сервисов Google Play и соответствующей клиентской библиотеки (обзор структуры здесь).

В соответствующем выпуске клиента AuthCredentialOptions.forceEnableSaveDialog() будет доступен вместе с документацией по его использованию. Я обновлю этот вопрос, как только он будет доступен, но вы также можете посмотреть примечания к выпуску здесь .

Обновление 1: выпущена соответствующая клиентская библиотека сервисов Google Play. обзор документации в разделе "Таргетинг Android O и выше" содержит более подробную информацию об этом.

Обновление 2. В последней версии (11.8.0) AuthCredentialOptions устарело и заменено новым CredentialOptions.

person David    schedule 30.10.2017
comment
В объекте AuthCredentialOptions.Builder отсутствует метод build(). - person Nicholas; 23.11.2017

Этот метод отсутствовал в общедоступном SDK для AuthCredentialsOptions.Builder, и мы исправили его (см. принятый ответ)

Но более важное уточнение: диалоговое окно автозаполнения с сохранением Google хранит пароли к той же базе данных Smart Lock, поэтому, если отображается диалоговое окно автозаполнения, вам не нужно беспокоиться об использовании API для принудительного ввода другого диалоговое окно для отображения (на самом деле, если вы вызываете диалог через API, обязательно отключите автозаполнение одного... пользователь не должен видеть два диалоговых окна). Данные, сохраненные в любом диалоговом окне, будут доступны для автоматического входа в Smart Lock (и наоборот для автозаполнения), а данные синхронизируются через учетную запись Google с Chrome (автозаполнение и API).

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

person Steven    schedule 25.01.2018