儲存使用者憑證's 憑證

在使用者成功登入、建立帳戶或變更密碼後,允許 以便儲存憑證,以便日後在應用程式中自動進行驗證。

事前準備

設定 Android Studio 專案

儲存憑證

建立包含使用者登入資訊的 Credential 物件。適用對象 例如讓使用者在成功透過 Google 帳戶登入後儲存憑證 其密碼:

Credential credential = new Credential.Builder(email)
       
.setPassword(password)  // Important: only store passwords in this field.
                               
// Android autofill uses this value to complete
                               
// sign-in forms, so repurposing this field will
                               
// likely cause errors.
       
.build();

或在使用者成功使用 使用個人 Google 帳戶登入

GoogleSignInAccount gsa = signInTask.getResult();
Credential credential = new Credential.Builder(gsa.getEmail())
       
.setAccountType(IdentityProviders.GOOGLE)
       
.setName(gsa.getDisplayName())
       
.setProfilePictureUri(gsa.getPhotoUrl())
       
.build();

Smart Lock 的「儲存」對話方塊

接著,呼叫 CredentialsClient.save() 來儲存使用者。 憑證如果未立即呼叫 CredentialsClient.save() 憑證可能是新的憑證,這時使用者必須確認 儲存要求使用以下方式解析ResolvableApiExceptionstartResolutionForResult():提示使用者確認。

如果使用者選擇不儲存憑證,系統將不會再提示使用者 為應用程式儲存任何帳戶的憑證。如果你打電話 使用者選擇拒絕後,CredentialsClient.save()的結果會獲得 CANCELED 的狀態碼。使用者之後可以前往 Google 應用程式,前往「密碼專用 Smart Lock」部分。使用者必須啟用 為所有帳戶儲存憑證,下次系統就會提示你儲存憑證。

mCredentialsClient.save(credential).addOnCompleteListener(
       
new OnCompleteListener<Void>() {
           
@Override
           
public void onComplete(@NonNull Task<Void> task) {
               
if (task.isSuccessful()) {
                   
Log.d(TAG, "SAVE: OK");
                   
Toast.makeText(activity, "Credentials saved", Toast.LENGTH_SHORT).show();
                   
return;
               
}

               
Exception e = task.getException();
               
if (e instanceof ResolvableApiException) {
                   
// Try to resolve the save request. This will prompt the user if
                   
// the credential is new.
                   
ResolvableApiException rae = (ResolvableApiException) e;
                   
try {
                        rae
.startResolutionForResult(this, RC_SAVE);
                   
} catch (IntentSender.SendIntentException exception) {
                       
// Could not resolve the request
                       
Log.e(TAG, "Failed to send resolution.", exception);
                       
Toast.makeText(activity, "Save failed", Toast.LENGTH_SHORT).show();
                   
}
               
} else {
                   
// Request has no resolution
                   
Toast.makeText(activity, "Save failed", Toast.LENGTH_SHORT).show();
               
}
           
}
       
});</pre>

   
@Override
   
public void onActivityResult(int requestCode, int resultCode, Intent data) {
       
super.onActivityResult(requestCode, resultCode, data);

       
// ...

       
if (requestCode == RC_SAVE) {
           
if (resultCode == RESULT_OK) {
               
Log.d(TAG, "SAVE: OK");
               
Toast.makeText(this, "Credentials saved", Toast.LENGTH_SHORT).show();
           
} else {
               
Log.e(TAG, "SAVE: Canceled by user");
           
}
       
}

       
// ...

   
}

儲存憑證後,請呼叫 CredentialsClient.request()

指定 Android O 以上版本

在搭載 Android O 的裝置上使用 Smart Lock 儲存密碼憑證 或是更新版本,Smart Lock 本身就會使用原生的自動填入確認對話方塊 對話方塊(請注意,使用自動填入功能儲存的憑證 Google 會透過密碼專用 Smart Lock 進行雙向分享)。