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

时间:2017-10-26 17:53:50

标签: c# google-api xamarin.android android-8.0-oreo google-smartlockpasswords

我知道在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 docs中,没有方法可以做到这一点。在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#

2 个答案:

答案 0 :(得分:3)

  

&#34; ...没有办法解决这个问题。在Google搜索中没有位置,或者在文档中搜索我可以找到这个forceEnableSaveDialog()方法。&#34;

这是因为发布了Google Play服务版APK及其相应的客户端库(结构概述here)之间的窗口。

在相应的客户端版本AuthCredentialOptions.forceEnableSaveDialog()中将提供有关其使用的文档。我会在问题可用后更新此问题,但您也可以查看发布说明here

更新1:相应的Google Play服务客户端库已发布。 overview documentation&#34;定位Android O及以上版本&#34;部分有更多细节。

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

答案 1 :(得分:1)

AuthCredentialsOptions.Builder的公共SDK中缺少该方法,我们修复了它(请参阅接受的答案)

但更重要的澄清:使用Google自动填充保存对话框将密码存储到同一个Smart Lock数据库,因此如果自动填充对话框显示,那么您不必担心使用用于强制显示其他对话框的API(事实上,如果您通过API强制执行对话,请确保禁止自动填充...用户不应该看到两个对话框)。通过任一对话框保存的数据将可用于Smart Lock自动登录(反之亦然,用于自动填充),数据通过Google帐户与Chrome同步(自动填充和API)。

由于对话框将数据存储到同一个地方,因此当用户将Google用作自动填充管理器时,我们选择向Google自动填充显示,因为它将为Oreo设备上的所有应用提供一致的体验。致力于改进错误消息,文档和品牌以澄清这一点。对不起,感到困惑。