4

Googleドライブをアプリケーションに統合しようとしていますが、ほとんど成功しませんでした。GoogleApiClient接続に失敗しました:ConnectionResult {statusCode = SIGN_IN_REQUIRED、

  1. https://developers.google.com/drive/android/get-started

    I/DriveDemo: GoogleApiClient connection failed: ConnectionResult{statusCode=SIGN_IN_REQUIRED, resolution=PendingIntent{867e070: [email protected]}, message=null} 
    

    私は以下のURLで指示に従っている:クイックスタートリポジトリからコードを使用して、私は次のエラーメッセージ私は、ログ用のユーザーアカウントを選択するたびに取得します

  2. https://github.com/googledrive/android-quickstart

とでビデオを追っ:

  1. https://youtu.be/RezC1XP6jcs

私も、私が間違っているの何がないアイデアを多数スタックオーバーフローの質問と回答を見てきました。

のmanifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.lightkeeper54.chuck.drivedemo"> 

    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

コード:

protected void onResume() { 
    super.onResume(); 
    if (mGoogleApiClient == null) { 
     // Create the API client and bind it to an instance variable. 
     // We use this instance as the callback for connection and connection 
     // failures. 
     // Since no account name is passed, the user is prompted to choose. 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addApi(Drive.API) 
       .addScope(Drive.SCOPE_FILE) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .build(); 
    } 
    // Connect the client. Once connected, the camera is launched. 
    mGoogleApiClient.connect(); 
} 

@Override 
protected void onPause() { 
    if (mGoogleApiClient != null) { 
     mGoogleApiClient.disconnect(); 
    } 
    super.onPause(); 
} 

@Override 
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { 
    switch (requestCode) { 
     case REQUEST_CODE_CAPTURE_IMAGE: 
      // Called after a photo has been taken. 
      if (resultCode == Activity.RESULT_OK) { 
       // Store the image data as a bitmap for writing later. 
       mBitmapToSave = (Bitmap) data.getExtras().get("data"); 
      } 
      break; 
     case REQUEST_CODE_CREATOR: 
      // Called after a file is saved to Drive. 
      if (resultCode == RESULT_OK) { 
       Log.i(TAG, "Image successfully saved."); 
       mBitmapToSave = null; 
       // Just start the camera again for another photo. 
       startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), 
         REQUEST_CODE_CAPTURE_IMAGE); 
      } 
      break; 
    } 
} 

@Override 
public void onConnectionFailed(ConnectionResult result) { 
    // Called whenever the API client fails to connect. 
    Log.i(TAG, "GoogleApiClient connection failed: " + result.toString()); 
    if (!result.hasResolution()) { 
     // show the localized error dialog. 
     GoogleApiAvailability.getInstance().getErrorDialog(this, result.getErrorCode(), 0).show(); 
     return; 
    } 
    // The failure has a resolution. Resolve it. 
    // Called typically when the app is not yet authorized, and an 
    // authorization 
    // dialog is displayed to the user. 
    try { 
     result.startResolutionForResult(this, REQUEST_CODE_RESOLUTION); 
    } catch (IntentSender.SendIntentException e) { 
     Log.e(TAG, "Exception while starting resolution activity", e); 
    } 
} 

@Override 
public void onConnected(Bundle connectionHint) { 
    Log.i(TAG, "API client connected."); 
    if (mBitmapToSave == null) { 
     // This activity has no UI of its own. Just start the camera. 
     startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), 
       REQUEST_CODE_CAPTURE_IMAGE); 
     return; 
    } 
    saveFileToDrive(); 
} 

@Override 
public void onConnectionSuspended(int cause) { 
    Log.i(TAG, "GoogleApiClient connection suspended"); 
} 
+0

開発/リリースキーをGoogle APIコンソールに登録していますか? –

+0

キーを作成して登録するすべての手順に従いました。 – lightkeeper

+0

@lightkeeperあなたのパッケージとSHAキーを使用して開発者コンソールでAuthKeyを作成してください。 – Kushan2

答えて

0

文書に基づいて - SIGN_IN_REQUIRED

クライアントがサービスに接続しようとしましたが、ユーザーが署名されていませんクライアントはAPIを使用せずに続行することができます。あるいは、hasResolution()がtrueを返す場合、クライアントはstartResolutionForResult(Activity, int)に電話してサインインするように促すことができます。サインインアクティビティがRESULT_OKで返された後、さらに試行が成功するはずです。

また、Cheokの質問@ SO post適切に尋ねたとして、あなたのSHA-1およびパッケージ名を追加し、プロジェクトの資格情報がすべて設定したらAPIを有効にするために示唆を確認することがあります。

この情報が役立つことを願っています。

+0

私はすべての手順に従ってキーを作成し、APIコンソールに登録しました。 APIがコンソールにアクティブとして表示されています。これが私が立ち往生している理由です。 – lightkeeper

0

私はStudioを使用する場合here

を説明するように、すべてのAPKのビルドは「Androidの証明書を取得し、アプリケーションを登録」やったときに私が使用したのと同じキーストアによって署名されることを保証した後、固定しまった同様の問題がありましたhereに記載されている「ビルドプロセスを自動的にAPKにサインインするように設定する」の手順に従って、「自動サインイン」を実行しました。明らかに、あなたのアプリケーションを登録する際に使用したのと同じキーストアを使用してください(上記)。

関連する問題