2016-08-10 5 views
1

いくつかのアカウントのRESULT_CANCELEDを返します。私は私のMainActivity内部フラグメントでGoogleドライブのAPIを実装しました。これを行うためにGoogleドライブAPIのAndroidアカウントセレクタは、常に私はアプリのストレージフォルダ内のJSONファイルを保存するために、私のAndroidアプリに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を返します。

私は誰も他人のアカウントを使用している場合は、アカウントピッカーが消え、私は私のエラー例1を押してください。私がデバッグした場合、resultCodeは実際のRESULT_CANCELEDであることがわかります。

私は違いが何であるかが表示されません。私のコードはかなり標準的なようです。

アイデア?

+1

Googleアカウント(GmailやGoogle Appsドメインなど)を使用していますか? google appsドメインを使用している場合は、そのユーザーがドライブを有効にしているかどうかを確認できますか? – Shailendra

+0

あなたは既にGoogleドライブを使用していることを確認することで確認できますか?それは私が失敗したテストした両方の場合に当てはまります。 –

答えて

3

これは、アプリの署名の問題である可能性があり - その場合は、あなたがする必要があります - あなたがデバッグで正常にテストしますが、リリースに失敗している場合は、Google APIコンソールで設定し、正しいキーストアの署名を持っていないかもしれませんコンソールに2番目の署名を追加することができます。また、デバッグとリリースの両方のビルドが正常に動作します。

+1

私のOath2のデバッグ情報は明らかに別のPCからビルドされたときには機能しませんでした。リリースOauth2の資格情報を試したところ、うまくいきました。 –

関連する問題