2016-08-10 1 views
1

Ich integriere Google Drive API in meine Android App, um eine JSON-Datei im Ordner App Storage zu speichern.Google Drive API Android-Kontoauswahl gibt immer RESULT_CANCELED für einige Konten zurück

Dazu habe ich die Google Drive API in ein Fragment in meiner MainActivity implementiert.

Wenn ich diesen Code ausführe, trifft er wie erwartet die onConnectionFailed-Methode mit dem SIGN_IN_REQUIRED-Code. Ich führe startResolutionForResult aus und die Kontoauswahl erscheint.

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 
    Log.i(TAG, "GoogleApiClient connection failed: " + connectionResult.toString()); 
    if (connectionResult.hasResolution()) { 
     if(!mConnectionResolutionInProgress) 
     { 
      try { 
       mConnectionResolutionInProgress = true; 
       connectionResult.startResolutionForResult(getActivity(), REQUEST_CODE_RESOLUTION); 
      } catch (IntentSender.SendIntentException e) { 
       // Unable to resolve, message user appropriately 
       showMessage("There was an issue connecting to Google Drive services.");      
      } 
     } 
     else 
     {     
      mConnectionResolutionInProgress = false; 
      showMessage("Canceling export/import action");     
     } 
    } 
    else 
    { 
     mConnectionResolutionInProgress = false; 
     GooglePlayServicesUtil.getErrorDialog(connectionResult.getErrorCode(), getActivity(), 0).show();    
    } 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode == REQUEST_CODE_RESOLUTION) 
    { 
     mConnectionResolutionInProgress = false; 
     if(resultCode == Activity.RESULT_OK) 
     { 
      if(!mGoogleApiClient.isConnected() && !mGoogleApiClient.isConnecting()) 
      { 
       ConnectToGoogleDrive(); 
      } 
     } 
    } 
} 

private void ConnectToGoogleDrive() 
{ 
    if(mGoogleApiClient == null) 
    { 
     mGoogleApiClient = new GoogleApiClient.Builder(getActivity()) 
       .addApi(Drive.API) 
       .addScope(Drive.SCOPE_FILE) 
       .addScope(Drive.SCOPE_APPFOLDER) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .build(); 
    } 

    mGoogleApiClient.connect(); 
} 

Das Merkwürdige ist, mit meinem persönlichen Konto (und meinem Konto bei der Arbeit) es funktioniert gut. Ich klicke auf mein Konto, dann verschwindet das Dialogfeld und es wird durch den Berechtigungsdialog ersetzt. Wenn ich das akzeptiere, dann läuft die Operation perfekt weiter. Das onActivityResult gibt resultCode RESULT_OK zurück.

Wenn ich das Konto eines anderen benutze, verschwindet die Kontoauswahl und ich treffe einen meiner Fehlerfälle. Wenn ich debugge, sehe ich, dass der ResultCode tatsächlich RESULT_CANCELED ist.

Ich sehe nicht, was der Unterschied ist. Es sieht so aus als ob mein Code ziemlich Standard ist.

Irgendwelche Ideen?

+1

Verwenden Sie ein Google-Konto (d. H. Google Mail oder Google Apps Domain)? Wenn Sie die Google Apps-Domain verwenden, können Sie überprüfen, ob Google Drive für diesen Nutzer aktiviert ist? – Shailendra

+0

Durch Verifizierung meinen Sie, dass Google Drive bereits verwendet wird? Das stimmt in beiden Fällen, die ich getestet habe, die fehlgeschlagen sind. –

Antwort

3

Es könnte ein App-Signaturproblem sein - wenn Sie beim Debuggen erfolgreich testen, aber bei der Veröffentlichung fehlschlagen, sind möglicherweise nicht die richtigen Keystore-Signaturen in der Google API-Konsole eingerichtet - falls dies der Fall ist, sollten Sie es sein kann die zweite Signatur auch zur Konsole hinzufügen, und sowohl Debug- als auch Release-Builds funktionieren einwandfrei.

+1

Es stellte sich heraus, dass meine Oath2-Debug-Anmeldedaten offensichtlich nicht funktionieren, wenn sie von einem anderen PC stammen. Als ich Oauth2-Zugangsdaten ausprobiert habe, hat es gut funktioniert. –

Verwandte Themen