首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓智能锁setResultCallback没有接到电话

安卓智能锁setResultCallback没有接到电话
EN

Stack Overflow用户
提问于 2015-08-05 16:55:06
回答 2查看 1.9K关注 0票数 4

我一直在跟踪https://developers.google.com/identity/smartlock-passwords/android/retrieve-credentials,如果用户已经将他们的凭据保存到新的chrome智能锁功能中,他们就会自动登录。我完全遵循了指南,但是我传入setResultCallback()的回调没有被调用。以前有人遇到过这个问题吗?

没有错误消息或任何东西,它只是没有被调用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-31 01:15:38

问题可能是Google客户端没有连接,尝试在您的活动的connect()方法中调用onStart(),或者如果您使用的是最近版本的Play Services,我们添加了API客户端的自动管理,以使这更容易,真正简化事情和避免常见的问题。

构建enableAutoManage()时只需调用GoogleApiClient

代码语言:javascript
复制
    // "this" is a reference to your activity
    mCredentialsApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .enableAutoManage(this, this)
            .addApi(Auth.CREDENTIALS_API)
            .build();

然后,您可以发出API请求,而不必在任何时候调用mCredentialsApiClient.onConnect(),Google客户端的生命周期将自动为您管理。例如:

代码语言:javascript
复制
@Override
public void onStart() {
    CredentialRequest request = new CredentialRequest.Builder()
            .setSupportsPasswordLogin(true)
            .build();
    Auth.CredentialsApi.request(mCredentialsApiClient, request).setResultCallback(
            new ResultCallback<CredentialRequestResult>() {
                public void onResult(CredentialRequestResult result) {
                    // result.getStatus(), result.getCredential() ... sign in automatically!
...

查看一个完整的示例应用程序,在on Github:https://github.com/googlesamples/android-credentials/blob/master/credentials-quickstart/app/src/main/java/com/google/example/credentialsbasic/MainActivity.java

票数 5
EN

Stack Overflow用户

发布于 2015-08-05 20:17:46

我厌倦了官方的演示应用这里,它起了作用。

基本上,setResultCallback()将在saverequestdelete时被调用。

为了节省:

代码语言:javascript
复制
Auth.CredentialsApi.save(mCredentialsApiClient, credential).setResultCallback(
                new ResultCallback<Status>() {
                    @Override
                    public void onResult(Status status) {
                        if (status.isSuccess()) {
                            Log.d(TAG, "SAVE: OK");
                            showToast("Credential Saved");
                            hideProgress();
                        } else {
                            resolveResult(status, RC_SAVE);
                        }
                    }
                });

请求:

代码语言:javascript
复制
Auth.CredentialsApi.request(mCredentialsApiClient, request).setResultCallback(
                new ResultCallback<CredentialRequestResult>() {
                    @Override
                    public void onResult(CredentialRequestResult credentialRequestResult) {
                        if (credentialRequestResult.getStatus().isSuccess()) {
                            // Successfully read the credential without any user interaction, this
                            // means there was only a single credential and the user has auto
                            // sign-in enabled.
                            processRetrievedCredential(credentialRequestResult.getCredential(), false);
                            hideProgress();
                        } else {
                            // Reading the credential requires a resolution, which means the user
                            // may be asked to pick among multiple credentials if they exist.
                            Status status = credentialRequestResult.getStatus();
                            if (status.getStatusCode() == CommonStatusCodes.SIGN_IN_REQUIRED) {
                                // This is a "hint" credential, which will have an ID but not
                                // a password.  This can be used to populate the username/email
                                // field of a sign-up form or to initialize other services.
                                resolveResult(status, RC_HINT);
                            } else {
                                // This is most likely the case where the user has multiple saved
                                // credentials and needs to pick one
                                resolveResult(status, RC_READ);
                            }
                        }
                    }
                });

删除:

代码语言:javascript
复制
Auth.CredentialsApi.delete(mCredentialsApiClient, mCurrentCredential).setResultCallback(
                new ResultCallback<Status>() {
                    @Override
                    public void onResult(Status status) {
                        hideProgress();
                        if (status.isSuccess()) {
                            // Credential delete succeeded, disable the delete button because we
                            // cannot delete the same credential twice.
                            showToast("Credential Delete Success");
                            findViewById(R.id.button_delete_loaded_credential).setEnabled(false);
                            mCurrentCredential = null;
                        } else {
                            // Credential deletion either failed or was cancelled, this operation
                            // never gives a 'resolution' so we can display the failure message
                            // immediately.
                            Log.e(TAG, "Credential Delete: NOT OK");
                            showToast("Credential Delete Failed");
                        }
                    }
                });

还可以在我的github 这里中克隆项目,在控制台这里中设置SHA1

此时,您应该做好准备:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31838523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档