In build.gradle (App)
Code: Select all
implementation "androidx.credentials:credentials:1.3.0"
implementation "androidx.credentials:credentials-play-services-auth:1.3.0"
implementation "com.google.android.libraries.identity.googleid:googleid:1.1.1"
Code: Select all
import androidx.core.os.CancellationSignal;
import androidx.credentials.Credential;
import androidx.credentials.CredentialManager;
import androidx.credentials.CredentialManagerCallback;
import androidx.credentials.CustomCredential;
import androidx.credentials.GetCredentialRequest;
import androidx.credentials.GetCredentialResponse;
import androidx.credentials.PasswordCredential;
import androidx.credentials.PublicKeyCredential;
import androidx.credentials.exceptions.GetCredentialException;
import com.google.android.libraries.identity.googleid.GetGoogleIdOption;
import com.google.android.libraries.identity.googleid.GoogleIdTokenCredential;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.security.SecureRandom;
import java.util.Random;
public void startGoogleLogin() {
String serverClientId = "";
SecureRandom secureRandom = new SecureRandom();
byte[] randomBytes = new byte[24]; // 24 bytes = 192 bits
secureRandom.nextBytes(randomBytes);
String nonce = java.util.Base64.getUrlEncoder().withoutPadding().encodeToString(randomBytes);
GetGoogleIdOption googleIdOption = new GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(false)
.setServerClientId(serverClientId)
.setAutoSelectEnabled(true)
.setNonce(nonce)
.build();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
CredentialManager credentialManager = CredentialManager.create(this);
Context context = getApplicationContext();
GetCredentialRequest request = new GetCredentialRequest.Builder()
.addCredentialOption(googleIdOption)
.build();
CancellationSignal cancellationSignal = new CancellationSignal();
Executor executor = Executors.newSingleThreadExecutor();
CredentialManagerCallback callback = new CredentialManagerCallback() {
@Override
public void onResult(GetCredentialResponse result) {
Log.v(TAG, "successful get credential: " + result.getCredential().toString());
}
@Override
public void onError(GetCredentialException e) {
Log.v(TAG, "credential get fail: " + e.toString());
}
};
try {
credentialManager.getCredentialAsync(context, request, cancellationSignal, executor, callback);
} catch (GetCredentialException e) {
Log.v(TAG, "credential get fail: " + e.toString());
}
}
}

Und die Methodensignatur ist diese

Ich habe keine Ahnung, was ich sonst noch versuchen soll. Die Methode existiert in credentialManager und ich habe für jedes Argument die gleichen Typen
//edit: Es wurde behoben, indem das Argument cancelSignal auf null gesetzt wurde