Immer wenn ich versuche, mich durch Starten der Google-Anmeldeabsicht anzumelden, wird direkt an onActivityResult weitergeleitet, ohne dass ich die Möglichkeit habe, ein Konto auszuwählen. Alles, was Sie tun, ist den Bildschirm zu dimmen, aber das Fenster zum Auswählen eines Kontos wird nicht angezeigt wird nicht angezeigt ..__ Die Anmeldung schlägt dann mit dieser ApiException fehl:
Java.lang.ClassNotFoundException: com.google.Android.gms.common.api.Scope
und
Java.lang.RuntimeException: Canvas: trying to draw too large(256000000bytes) bitmap.
(vollständiger Stack-Trace: https://Pastebin.com/vBZeBLu0 )
Alle meine verwendeten Abhängigkeiten sind auf dem neuesten Stand und meine Anmeldeinformationen (oAuth-Client-ID) sind alle korrekt eingerichtet. Ich habe die Lösung anderer ähnlicher Probleme ausprobiert, aber keiner von ihnen löste mein Problem. Ich überprüfte auch, ob der Benutzer abgemeldet ist vollständig aus dem Gerät und das Problem wurde ständig behoben.
Dies ist meine Login-Aktivität:
public class Login extends Activity implements GoogleApiClient.OnConnectionFailedListener, GoogleApiClient.ConnectionCallbacks {
private static final String TAG = "LoginProcess";
SignInButton gsignInButton;
private static final int RC_SIGN_IN = 1;
DatabaseReference mRef;
FirebaseAuth mAuth;
FirebaseAuth.AuthStateListener mAuthListener;
GoogleSignInOptions gso;
GoogleApiClient mGoogleApiClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.welcomescreenlogin);
mAuth = FirebaseAuth.getInstance();
gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
gsignInButton = findViewById(R.id.sib);
gsignInButton.setColorScheme(SignInButton.COLOR_DARK); // wide button style
gsignInButton.setOnClickListener(myhandler);
}
View.OnClickListener myhandler = new View.OnClickListener() {
public void onClick(View v) {
signIn();
}
};
public void signIn() {
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
// Google Sign In was successful, authenticate with Firebase
GoogleSignInAccount account = task.getResult(ApiException.class);
firebaseAuthWithGoogle(account);
} catch (ApiException e) {
// Google Sign In failed, update UI appropriately
Log.w(TAG, "Google sign in failed", e); //this is where it always lands.
Toast.makeText(this, "login failed", Toast.LENGTH_SHORT).show();
// ...
}
}
}
vollständiger Code für die Login-Aktivität: https://Pastebin.com/6Yi7vzD7
Gradle:
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "com.example.sanchez.worldgramproject"
minSdkVersion 21
targetSdkVersion 28
multiDexEnabled true
versionCode 0
versionName "0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
debug {
debuggable true
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
api "com.google.Android.material:material:1.0.0"
implementation 'com.github.madrapps:pikolo:1.1.6'
implementation 'com.google.Android.gms:play-services-drive:16.0.0'
implementation 'com.google.Android.material:material:1.1.0-alpha02'
implementation 'com.github.bumptech.glide:glide:3.8.0'
implementation'com.firebaseui:firebase-ui-storage:2.3.0'
implementation 'com.google.firebase:firebase-auth:16.1.0'
implementation 'com.google.Android.gms:play-services-auth:16.0.1'
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'com.jakewharton:butterknife:8.8.1'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'pl.droidsonroids.gif:Android-gif-drawable:1.2.6'
implementation 'de.hdodenhof:circleimageview:2.2.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.exifinterface:exifinterface:1.0.0'
implementation 'com.google.firebase:firebase-storage:16.0.5'
implementation 'com.google.Android.gms:play-services-maps:16.0.0'
implementation 'com.google.firebase:firebase-database:16.0.5'
testImplementation 'junit:junit:4.12'
}
apply plugin: 'com.google.gms.google-services'
Ich habe keine Ahnung, was die Ursache des Problems ist. Wie kann ich dieses Problem lösen und das Fenster für die Kontoauswahl aufklappen lassen?
EDIT 2.1.2019
Anstelle der obigen ApiExeption erhalte ich diesen Fehler:
W/LoginProcess: Google sign in failed
com.google.Android.gms.common.api.ApiException: 8:
at com.google.Android.gms.common.internal.ApiExceptionUtil.fromStatus(Unknown Source:4)
at com.google.Android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source:8)
at com.example.sanchez.worldgramproject.Login.onActivityResult(Login.Java:162)
at Android.app.Activity.dispatchActivityResult(Activity.Java:7548)
at Android.app.ActivityThread.deliverResults(ActivityThread.Java:4485)
at Android.app.ActivityThread.handleSendResult(ActivityThread.Java:4532)
at Android.app.ActivityThread.-wrap20(Unknown Source:0)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1752)
at Android.os.Handler.dispatchMessage(Handler.Java:105)
at Android.os.Looper.loop(Looper.Java:164)
at Android.app.ActivityThread.main(ActivityThread.Java:6938)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.Java:327)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1374)
Ich glaube, dass etwas mit meiner oAuth-Einstellung fehlgeschlagen ist (von Firebase automatisch generiert).
Option 1 - Stellen Sie sicher, dass die Google-Anmeldung in den Firebase-Authentifizierungsmethoden in der Firebase-Konsole aktiviert ist. Die Google-Anmeldung ist standardmäßig nicht aktiviert.
Option 2 - Fügen Sie in Ihrer AndroidManifest.xml-Datei unter dem Tag die folgenden Zeilen hinzu, um Unterstützung für hohen Speicher zu unterstützen, falls das Google-Anmeldungs-Popup mehr Speicher benötigt. Selbst große Bilder können mit diesem Befehl in das Anwendungs-Tag - _ largeHeapals _ true ~ Ihr Startbild geladen werden.
<application
Android:hardwareAccelerated="true"
Android:largeHeap="true" >
Option 3 - Verwenden Sie diesen Code, um die Google-Anmeldung mit Firebase zu implementieren. Es sollte funktionieren.
public class LoginActivity extends AppCompatActivity {
private GoogleSignInClient mGoogleSignInClient;
private FirebaseAuth mAuth;
private int permissions = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
SignInButton authButton = findViewById(R.id.home_auth_button);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken("xxxxxxxxxxxx.apps.googleusercontent.com").requestEmail().build();
mAuth = FirebaseAuth.getInstance();
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
authButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
signIn();
}
});
}
private void signIn() {
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, 0);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
GoogleSignInAccount account = task.getResult(ApiException.class);
if (account != null) {
firebaseAuthWithGoogle(account);
} else{
Log.w("AUTH", "Account is NULL");
Toast.makeText(LoginActivity.this, "Sign-in failed, try again later.", Toast.LENGTH_LONG).show();
}
} catch (ApiException e) {
Log.w("AUTH", "Google sign in failed", e);
Toast.makeText(LoginActivity.this, "Sign-in failed, try again later.", Toast.LENGTH_LONG).show();
}
}
}
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
Log.d("AUTH", "firebaseAuthWithGoogle:" + acct.getId());
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Log.d("AUTH", "signInWithCredential:success");
startActivity(new Intent(LoginActivity.this, AnotherActivity.class));
Toast.makeText(LoginActivity.this, "Sign-in successful!", Toast.LENGTH_LONG).show();
} else {
Log.w("AUTH", "signInWithCredential:failure", task.getException());
Toast.makeText(LoginActivity.this, "Sign-in failed, try again later.", Toast.LENGTH_LONG).show();
}
}
});
}
}
Suchen Sie nach dem GoogleSignInOptions.Builder, an dem Sie das requestIdToken ("xxxx") mit dem Builder übergeben müssen. Dies ist eine URL, die Sie auf der Registerkarte Firebase-Authentifizierung finden -> Anmeldemethoden -> Google -> Web-SDK-Konfiguration -> Web-Client-ID.
Hoffe, das beantwortet deine Frage.
Wie erwartet, lag dies daran
Canvas: Versuch, ein zu großes Bitmap (256000000Byte) zu zeichnen.
Das von Ihnen verwendete Startsymbol, das auch im Dialogfeld für die Kontoauswahl angezeigt wurde, hat das Popup-Dialogfeld gestoppt.
Als Lösung können Sie der Antwort von Praveen (option2) folgen, wie die App die größeren Bilder von Manifest
unterstützt.
Ich empfehle Ihnen jedoch, die Image-Datei zu komprimieren, da der Dialog zur Kontoauswahl nicht wirklich ein hochauflösendes Image benötigt und auch das Startsymbol nicht so groß sein muss. Sehen Sie sich " this " an, skalieren Sie die Startsymbole auf diese Größen (nur die Sie benötigen) und legen Sie sie in die entsprechenden Zeichenordner, sodass Sie in Zukunft ähnliche Probleme vermeiden können.
Bitte fügen Sie den folgenden Code im Manifest hinzu
<meta-data
Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
Und versuchen Sie, die (hochauflösende) Splash-Bitmap von drawable nach drawable-xxhdpi zu verschieben, war die Lösung.
Ich hatte das gleiche Problem. Ich hatte nicht den Verdacht, dass mein Startbildschirm das Problem ist, da es beim Starten der App angezeigt wird. Es stellte sich jedoch heraus, dass der Startbildschirm das Problem ist.
Der Begrüßungsbildschirm in meinem Fall hat eine xxhdpi-Auflösung, und er wurde versehentlich im drawable-Ordner anstelle von drawable-xxhdpi abgelegt. Dies führte dazu, dass Android davon ausging, dass der Begrüßungsbildschirm eine Auflösung von mdpi aufwies und das Bild auf die dreifache Größe skalierte und versuchte, eine Bitmap zu erstellen.
verwenden Sie die Bitmap.Factory-Klasse. Dieser Link hilft Ihnen Große Bitmaps effizient laden