2016-08-10 3 views
1

Google 드라이브 API를 Android 앱에 통합하여 App Storage 폴더에 JSON 파일을 저장합니다.Google 드라이브 API Android 계정 선택기는 일부 계정에서 항상 RESULT_CANCELED를 반환합니다.

이렇게하려면 내 MainActivity 내의 조각에 Google 드라이브 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를 반환합니다.

다른 사람의 계정을 사용하면 계정 선택 도구가 사라지고 내 오류가 발생합니다. 내가 debug 경우 resultCode 실제 RESULT_CANCELED 것을 참조하십시오.

차이점이 무엇인지 알 수 없습니다. 내 코드는 꽤 표준적인 것처럼 보입니다.

아이디어가 있으십니까?

+1

Google 계정 (예 : Gmail 또는 Google 앱 도메인)을 사용하고 있습니까? Google 앱 도메인을 사용하는 경우 해당 사용자가 드라이브를 사용하도록 설정되어 있는지 확인할 수 있습니까? – Shailendra

+0

Google 드라이브를 이미 사용하고 있는지 확인한다는 의미입니까? 그것은 내가 실패한 두 가지 경우 모두에서 마찬가지입니다. –

답변

3

앱 서명 문제 일 수 있습니다. 디버그를 성공적으로 테스트했지만 릴리스가 실패한 경우 Google API 콘솔에 올바른 키 스토어 서명이 설정되지 않았을 수 있습니다. 콘솔에 두 번째 서명을 추가 할 수 있으며 디버그 및 릴리스 빌드가 모두 잘 작동합니다.

+1

내 Oath2 디버그 자격 증명이 분명히 다른 PC에서 빌드 된 경우 작동하지 않습니다. Oauth2 자격 증명을 릴리스했을 때 제대로 작동했습니다. –