To może być trochę skomplikowane, ale Google już teraz ogromnie podał Docs o tym użytkowaniu.
Aby zażądać zapisanych poświadczeń, należy utworzyć instancję o numerze GoogleApiClient
skonfigurowaną w celu uzyskania dostępu do interfejsu API poświadczeń.
mCredentialsApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.enableAutoManage(this, this)
.addApi(Auth.CREDENTIALS_API)
.build();
Obiekt CredentialRequest określa systemy logowania, z których chcesz żądać referencji. Utwórz metodę CredentialRequest
, korzystając z metody setPasswordLoginSupported
do logowania na podstawie hasła oraz metody setAccountTypes()
dla sfederowanych usług logowania, takich jak Google Sign-in.
mCredentialRequest = new CredentialRequest.Builder()
.setPasswordLoginSupported(true)
.setAccountTypes(IdentityProviders.GOOGLE, IdentityProviders.TWITTER)
.build();
Po utworzeniu GoogleApiClient
i CredentialRequest
obiektów, przekazać je do metody CredentialsApi.request()
aby żądać poświadczeń przechowywanych dla aplikacji.
Auth.CredentialsApi.request(mCredentialsClient, mCredentialRequest).setResultCallback(
new ResultCallback<CredentialRequestResult>() {
@Override
public void onResult(CredentialRequestResult credentialRequestResult) {
if (credentialRequestResult.getStatus().isSuccess()) {
// See "Handle successful credential requests"
onCredentialRetrieved(credentialRequestResult.getCredential());
} else {
// See "Handle unsuccessful and incomplete credential requests"
resolveResult(credentialRequestResult.getStatus());
}
}
});
Po pomyślnym żądaniu referencji użyj uzyskanego obiektu poświadczeń, aby ukończyć logowanie użytkownika do aplikacji. Użyj metody getAccountType()
, aby określić typ pobranych poświadczeń, a następnie przeprowadź odpowiedni proces logowania.
private void onCredentialRetrieved(Credential credential) {
String accountType = credential.getAccountType();
if (accountType == null) {
// Sign the user in with information from the Credential.
signInWithPassword(credential.getId(), credential.getPassword());
} else if (accountType.equals(IdentityProviders.GOOGLE)) {
// The user has previously signed in with Google Sign-In. Silently
// sign in the user with the same ID.
// See https://developers.google.com/identity/sign-in/android/
GoogleSignInOptions gso =
new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.setAccountName(credential.getId())
.build();
OptionalPendingResult<GoogleSignInResult> opr =
Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient);
// ...
}
}
Jeśli urządzenie BLE zostanie dodane jako zaufane urządzenie w ustawieniach inteligentnego zamka, urządzenie automatycznie się odblokuje po podłączeniu telefonu do tego urządzenia BLE. To, czego szukasz, wciąż nie jest dla mnie jasne. Proszę wyjaśnij to i popraw mnie, jeśli nigdzie się nie mylę. –
Masz rację. Ale ma jeszcze jeden ekran (ekran machnięcia). W tym czasie musimy przewinąć ekran, aby odblokować. Chcę to zignorować. Myślę, że Smartlock ma tę opcję – Jame
Sprawdziłeś to? http: // stackoverflow.com/questions/30246425/turn-on-screen-from-receiver-service/30365638 # 30365638 –