2016-08-10 79 views
1

我正在將Google Drive API集成到我的Android應用中,以將JSON文件存儲在App Storage文件夾中。Google Drive API Android帳戶選擇器始終會爲某些帳戶返回RESULT_CANCELED

爲此,我在MainActivity中的片段中實施了Google Drive API。

當我執行此代碼時,它按照預期的方式使用SIGN_IN_REQUIRED代碼擊中onConnectionFailed方法。我執行startResolutionForResult並出現帳戶選取器。

@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(); 
} 

奇怪的是我的個人帳戶(和我的工作帳戶)它工作得很好。我點擊我的帳戶,然後對話框消失,並用權限對話框取代。如果我接受,那麼操作將繼續完美。 onActivityResult返回resultCode RESULT_OK。

如果我使用任何其他人的帳戶,帳戶選取器消失,我打我的一個錯誤情況。如果我調試我看到resultCode是真正的RESULT_CANCELED。

我看不出有什麼區別。它看起來像我的代碼是非常標準的。

任何想法?

+1

您使用的是谷歌帳戶(即Gmail或谷歌應用程序域)?如果您使用的是谷歌應用程序域,您是否可以驗證是否爲該用戶啓用了雲端硬盤? – Shailendra

+0

通過驗證你的意思是確保他們已經在使用Google Drive?在兩種情況下,我都測試過失敗。 –

回答

3

它可能是一個應用程序簽名問題 - 如果您在調試時成功測試,但發佈失敗,則可能沒有在Google API控制檯中設置正確的密鑰存儲簽名 - 如果是這種情況,您應該能夠將第二個簽名添加到控制檯,並且調試和發佈版本都可以正常工作。

+1

原來,我的Oath2調試憑據顯然不適用於從不同的PC構建時。當我嘗試釋放Oauth2證書時,它工作正常。 –

相關問題