Google 在 Android Oreo 中无法访问 Smart Lock 保存对话框

Google Smart Lock save dialog inaccessible in 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}}

但是在Androiddocs中没有这个方法。在 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(); 

这是 Xamarin 中的 Android。相同的方法和一切,只是使用 C#

"...there is no method for this. No where in a Google search, or a search in the docs can I find this forceEnableSaveDialog() method."

这是由于 window 发布 Google Play 服务 APK 版本及其相应的客户端库(结构概述 here)之间。

在相应的客户端版本中 AuthCredentialOptions.forceEnableSaveDialog() 将连同涵盖其使用的文档一起提供。一旦问题可用,我将更新此问题,但您也可以观看发行说明 here.

更新1:对应的Google Play服务客户端库已经发布。 overview documentation 的 "Targeting Android O and above" 部分对此有更多详细信息。

更新 2: 在最新版本(版本 11.8.0)中,AuthCredentialOptions 已被弃用,由新的 CredentialOptions 取代。

AuthCredentialsOptions.Builder 的 public SDK 中缺少该方法,我们修复了它(参见已接受的答案)

但一个更重要的说明:自动填充 Google 保存对话框将密码存储到同一个 Smart Lock 数据库,所以如果自动填充对话框显示,那么你不不需要担心使用 API 强制显示另一个对话框(事实上,如果您通过 API 强制显示对话框,那么请确保取消自动填充一个...用户不应该见两个对话框)。通过任一对话框保存的数据将可用于 Smart Lock 自动登录(反之亦然用于自动填充)并且数据通过 Google 帐户与 Chrome 同步(自动填充和 API ).

由于对话框将数据存储到同一位置,我们选择在用户使用 Google 作为自动填充管理器时显示带有 Google 的自动填充,因为它将在所有应用程序中提供一致的体验在奥利奥设备上。致力于改进错误消息、文档和品牌以澄清这一点。抱歉造成混淆。