3

AndroidでGoogleドライブを操作するためのアプリケーションを作成しています。

インターネットでいくつかの例を検索しましたが、それらはすべて同じです。次のエラーが発生します。

Object Drive.Builder does not have method setJsonHttpRequestInitializer.

運が悪かったので、GoogleドライブAPIV1とV2でテストしました。

問題はどこだ?

ソース:

private Drive getDriveService(String accountName) {

   HttpTransport ht = AndroidHttp.newCompatibleTransport();                     
   JacksonFactory jf = new JacksonFactory();          
   Credential credential = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(accountName);           

        Drive.Builder b = new Drive.Builder(ht, jf, null);
        b.setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() {

            @Override
            public void initialize(JsonHttpRequest request) throws IOException {
                DriveRequest driveRequest = (DriveRequest) request;
                driveRequest.setPrettyPrint(true);
                driveRequest.setOauthToken(accountName);
                driveRequest.setKey(API_KEY);
            }
        });
        return b.build();
} 

google-api-java-client-1.12.0-betaを使用する場合、setJsonHttpRequestInitializerメソッドが未定義であることがわかりました

ダウンロードおよびインポートされたgoogle-api-java-client-1.11.0-beta

しかし、今は次のようになっています。インストールされているアプリケーションにクライアントIDを使用する:クライアントID。

com.google.api.client.http.HttpResponseException: 403 Forbidden
 {
  "error": {
   "errors": [
    {
     "domain": "usageLimits",
     "reason": "accessNotConfigured",
     "message": "Access Not Configured"
    }
   ],
   "code": 403,
   "message": "Access Not Configured"
  }
 }

シンプルなAPIアクセスの使用:APIキー

Exceptioncom.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
{
  "code" : 401,
  "errors" : [ {
    "domain" : "global",
    "location" : "Authorization",
    "locationType" : "header",
    "message" : "Invalid Credentials",
    "reason" : "authError"
  } ],
  "message" : "Invalid Credentials"
}

プロジェクトのソースは次のとおりです。

http://www.sendspace.com/file/an6xxy

何が問題なのですか、証明書指紋(SHA1)が含まれている可能性がありますか?

googleからcalendar-android-sampleを試してみてください。

GoogleAPIコンソールのアプリの登録に問題があるようです。

サンプルで取得したクライアントIDはどこに配置しますか?

androidでデバッグモードでサンプルを実行した後、「アクセスが構成されていません」を取得します。

4

2 に答える 2

2

Android でのベスト プラクティスは、OAuth 2.0 に Google Play サービスを使用することです。ライブラリのバージョン 1.12.0-beta の時点で、これを行うにはGoogleAccountCredentialを使用する必要があります。

Android での OAuth 2.0 のベスト プラクティスのガイドとして、calendar-android-sampleに書いた例を使用してください。指示をよくお読みください。これを機能させるには、最初にアプリケーションをGoogle API コンソールに登録する必要があることに注意してください。サンプルのコード スニペット:

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  ...
  // Google Accounts
  credential = GoogleAccountCredential.usingOAuth2(this, CalendarScopes.CALENDAR);
  SharedPreferences settings = getPreferences(Context.MODE_PRIVATE);
  credential.setSelectedAccountName(settings.getString(PREF_ACCOUNT_NAME, null));
  // Calendar client
  client = new com.google.api.services.calendar.Calendar.Builder(
      transport, jsonFactory, credential).setApplicationName("Google-CalendarAndroidSample/1.0")
      .build();
}
于 2012-11-19T17:01:46.527 に答える
1

古いバージョンの Java ライブラリを使用している可能性があります。

とにかく、次のコードのように、GoogleCredentialオブジェクトのインスタンスを as として使用できます。HttpRequestInitializer

private Drive getDriveService(String token) {
  Credential credential = new GoogleCredential().setAccessToken(token);
  Drive.Builder b = new Drive.Builder(
      AndroidHttp.newCompatibleTransport(), new JacksonFactory(), credential)
      .setHttpRequestInitializer(credential);
  return b.build();
}
于 2012-11-16T00:35:15.533 に答える