wake-up-neo.net

onConnectionFailed gibt SIGN_IN_REQUIRED (4)

Ich entwickle eine Android-Anwendung, bei der ich die Google-API verwenden möchte. Dafür habe ich das google-play-service-lib Projekt importiert.

Ich folge diesem link , um das GoogleApiClient-Objekt zu initialisieren.

Mein Code:

1) In der onCreate()-Methode erstelle ich das GoogleApiClient -Objekt:

mGoogleApiClient = new GoogleApiClient.Builder(this)
    .addConnectionCallbacks(this)
    .addOnConnectionFailedListener(this)
    .addApi(Plus.API, null)
    .addScope(Plus.SCOPE_PLUS_LOGIN)
    .build();

2) In onStart() rufe ich mGoogleApiClient.connect() auf.

3) Meine Aktivität implementiert ConnectionCallbacks und OnConnectionFailedListener.

4) Meine onConnectionFailed()-Methode sieht folgendermaßen aus:

public void onConnectionFailed(ConnectionResult result) {
    //in dubug result looks like : ConnectionResult{
    //statusCode=SIGN_IN_REQUIRED, resolution=PendingIntent
                    // {41f8ca70: [email protected]}}
     try {
     if(!mIntentInProgress && result.hasResolution())
     {
         mIntentInProgress=true;
        result.startResolutionForResult(mActivity, RC_SIGN_IN);
          }

    } catch (SendIntentException e) {
        e.printStackTrace();
    }
}

5) Meine onActivityResult()-Methode enthält:

if (requestCode == RC_SIGN_IN) {
   if (!mGoogleApiClient.isConnecting()) {
      mGoogleApiClient.connect();
   }
}

Wenn ich meine App starte, erhalte ich ein Toast, das besagt, dass ein interner Fehler aufgetreten ist. Ich habe das Projekt in der Google-Konsole erstellt.

21
DCoder

Ich hatte das gleiche Problem.

Aus der Dokumentation: Der Client kann ohne Verwendung der API fortfahren oder startResolutionForResult (Activity, int) aufrufen, um den Benutzer zur Anmeldung aufzufordern.

Sie sollten sich also mit der Funktion startResolutionForResult () anmelden

@Override
public void onConnectionFailed(ConnectionResult result) {
   if (result.hasResolution()) {
       try {
           // !!!
           result.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR);
       } catch (SendIntentException e) {
           mPlusClient.connect();
       }
   }

   mConnectionResult = result;
}
23
user2642219

Folgen Sie einfach den Anweisungen von Google

UND VORSICHT

Da Sie sich noch im Entwicklungsmodus befinden, prüfen Sie, ob Sie Ihre Test-E-Mail-Adresse vor der Veröffentlichung des Spiels im Zentrum GAME DETAILS hinzugefügt haben.

7
Naskov

Vergewissern Sie sich, dass Sie die App mit einem in der apk hochgeladenen Keystore in die Google Play-Entwicklerkonsole signieren. Wenn Sie testen, können Sie sie als Alpha hochladen und veröffentlichen, während sie privat bleibt.

Wenn nicht, könnten es andere Dinge sein. Stellen Sie sicher, dass die E-Mail-Adresse Ihres Kontos in Testern auf der Seite Kontodetails (im Einstellungsmenü mit einem Zahnradsymbol) aufgeführt ist und die lizenzierte Antwort auf LICENSED, NICHT auf RESPOND_NORMALLY gesetzt ist

6
Michael Chinen

Ich bin nicht sicher, ob dies die beste Antwort ist, aber es hat bei mir funktioniert. Ich habe onConnectionFailed () aus der BasicSamples TakeANumber MainActivity kopiert. Es ruft BaseGameUtils zum Auflösen auf. Das bedeutet natürlich, dass Sie die BaseGameUtils-Bibliothek in Ihrem Projekt haben und das ist eine weitere Dose Würmer. Aber vielleicht kommst du mit der einen Methode zurecht, also habe ich sie unten kopiert.

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
   logger.info( "onConnectionFailed() *play* : attempting to resolve");
    if (mResolvingConnectionFailure) {
       logger.info( "onConnectionFailed(): already resolving");
        return;
    }

    if (mSignInClicked || mAutoStartSignInFlow) {
        mAutoStartSignInFlow = false;
        mSignInClicked = false;
        mResolvingConnectionFailure = true;
        if (!BaseGameUtils.resolveConnectionFailure(this, mGoogleApiClient, connectionResult,
                RC_SIGN_IN, getString(R.string.signin_other_error))) {
            mResolvingConnectionFailure = false;
        }
    }
}

In Google BasicSamples BaseGameUtils.Java:

 public static boolean resolveConnectionFailure(Activity activity,
                                               GoogleApiClient client, ConnectionResult result, int requestCode,
                                               String fallbackErrorMessage) {

    if (result.hasResolution()) {
        try {
            result.startResolutionForResult(activity, requestCode);
            return true;
        } catch (IntentSender.SendIntentException e) {
            // The intent was canceled before it was sent.  Return to the default
            // state and attempt to connect to get an updated ConnectionResult.
            client.connect();
            return false;
        }
    } else {
        // not resolvable... so show an error message
        int errorCode = result.getErrorCode();
        Dialog dialog = GooglePlayServicesUtil.getErrorDialog(errorCode,
                activity, requestCode);
        if (dialog != null) {
            dialog.show();
        } else {
            // no built-in dialog: show the fallback error message
            showAlert(activity, fallbackErrorMessage);
        }
        return false;
    }
}
3
user6627139

Drive-API sollte auf der Konsolenseite aktiviert werden.

3
challenger

Dieser Fehler zeigt an, dass der Benutzer Ihre App autorisieren muss. Im Anschluss an das Tutorial unter https://developers.google.com/+/mobile/Android/getting-started finden Sie einen vollständigen Workflow. Suchen Sie nach "onConnectionFailed".

3
Hounshell

wenn Sie keine Debug-Tasten verwenden, drücken Sie die App als Google-Play als Alpha, fügen Sie sich selbst als Tester hinzu und MOST ist wichtig - folgen Sie dem Link "Opt-In" auf der Aplha-Seite und bestätigen Sie, dass Sie der Tester sind.

2
Max

Ich hatte dasselbe Problem und löste diese Lösung. Ich hatte tatsächlich eine sehr alte Version der Google Play-Services-Bibliothek. Ich aktualisierte sie mit der neuesten Google Play-Service-Bibliothek auf compile 'com.google.Android.gms: play- Dienste: 11.0.4 'aus meiner früheren Versionsbibliothek, um Ihr Android SDK zu unterstützen und compileSDKVersion und targetSDKVersion in Gradle: App zu verwalten. füge google drive aktiviert API_KEY in Manifest hinzu und versuche es erneut 

1
Anjali

Ich möchte meine Erfahrungen damit teilen. Mein Fall war die Verwendung der Google Play-Dienste für Google Play Games. Ich habe auch den onConnectionFailed erhalten, der den Fehler SIGN_IN_REQUIRED angibt. Schließlich ist mir klar, dass ich meine Spieleinstellungen nicht in der Entwicklerkonsole "veröffentlicht" habe. Nicht zu verwechseln mit dem Veröffentlichen einer "Alpha" - oder "Beta" -Version Ihres apk. Ich meine das eigentliche Google Play Games "Spiel", das Sie erstellen und mit dem APK des Spiels verknüpfen.

1
Jonathan

In meinem Fall wurde das Problem in sensiblen Bereichen hinzugefügt und nicht überprüft:

https://console.developers.google.com/apis/credentials Anmeldeinformationen -> OAuth Einverständniserklärung -> Gültigkeitsbereiche für Google-APIs

Stellen Sie sicher, dass Sie keine nicht überprüften Bereiche haben.

1
Kirill Kuzyk

ich habe aus Versehen den Release-SHA1-Schlüssel falsch verwendet, um die API in der Entwicklerkonsole zu generieren. Dann erstellte ich den SHA1-Schlüssel mit debug.keystore und aktualisierte in meinen API-Anmeldeinformationen. Es begann zu arbeiten. 

keytool -list -v -keystore "C:\Users\<user>n\.Android\debug.keystore" -alias androiddebugkey -storepass andro
id -keypass Android
0
Anand saga