4

https://developers.google.com/identity/smartlock-passwords/android/retrieve-credentialsに従って、Chrome の新しい Android Smart Lock 機能に資格情報を保存しているユーザーを自動的にサインインさせようとしました。ガイドに正確に従いましたが、 setResultCallback() に渡すコールバックが呼び出されません。以前にこの問題に遭遇した人はいますか?

エラーメッセージなどはありません。呼び出されないだけです。

4

2 に答える 2

5

connect()問題は、Google API クライアントが接続されていない可能性があります。アクティビティのメソッドを呼び出してみonStart()てください。または、Play Services の最近のバージョンを使用している場合は、API クライアントの自動管理を追加してこれを簡単にし、物事を本当に単純化しています。一般的な問題を回避します。

enableAutoManage()ビルド時に呼び出すだけGoogleApiClientです:

    // "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 API クライアントのライフサイクルは自動的に管理されます。例えば

@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!
...

Github で完全なサンプル アプリを確認してください: https://github.com/googlesamples/android-credentials/blob/master/credentials-quickstart/app/src/main/java/com/google/example/credentialsbasic/MainActivity。ジャワ

于 2015-12-31T01:15:38.907 に答える
0

ここの公式デモアプリに疲れましたが、うまくいきました。

基本的に、 は のときにsetResultCallback()呼び出されます。saverequestdelete

保存する場合:

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);
                        }
                    }
                });

リクエスト:

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);
                            }
                        }
                    }
                });

削除の場合:

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でコンソールに設定することもできます

この時点で、あなたは行く準備ができているはずです:)

于 2015-08-05T20:17:46.250 に答える