3

Google カレンダー API v3 とサービス アカウント モードを使用してアクセスできるアプリケーションを開発しています。私のアプリケーションでは問題なく新しいカレンダーを作成できているようですが、Google カレンダーの標準 Web アプリで結果を確認しようとすると、何も表示されません。CalendarList を取得すると適切なカレンダー リストが返されるため、これは奇妙です。なぜこれが起こるのか誰か知っていますか?サービス アカウントで作成したカレンダーに制限はありますか?

ご協力ありがとうございました。アルベルト

更新 1:

ここに私のコードのスニペットがあります

HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
        GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(httpTransport)
            .setJsonFactory(JSON_FACTORY)
            .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
            .setServiceAccountScopes(Collections.singleton(CalendarScopes.CALENDAR))
            .setServiceAccountPrivateKeyFromP12File(new File(KEY_P12))
            // .setServiceAccountUser("user@example.com")
            .build();

         Calendar service = new com.google.api.services.calendar.Calendar.Builder(httpTransport, JSON_FACTORY, credential)
            .setApplicationName(APPLICATION_NAME).build();

        com.google.api.services.calendar.model.Calendar content = new com.google.api.services.calendar.model.Calendar();
        content.setSummary("A calendar");
        service.calendars().insert(content).execute();

更新 2:

資格情報にサービス アカウント ユーザーを追加することを提案する人がいます (その後.setServiceAccountUser("user@example.com")、上記のコードのコメントを解除しますが、機能しません。この場合、カレンダーを作成することもできず、電話service.calendars().insert(content).execute();して受信したときに受信することもできません

400 Bad Request
{
  "error" : "access_denied"
}
4

2 に答える 2

0

GoogleCredential が不完全だと思います。ClientSecrets とリフレッシュ トークンを試してください。

    List<String> scopes = new ArrayList<String>();
    scopes.add("https://www.google.com/m8/feeds/");
    GoogleCredential credential = new  GoogleCredential.Builder()
    .setTransport(new NetHttpTransport())
    .setJsonFactory( new JacksonFactory())
    .setServiceAccountId("id@developer.gserviceaccount.com")
    .setServiceAccountPrivateKeyFromP12File(new File("privatekey.p12"))
    .setClientSecrets("clientID", "clientSecret")
    .setServiceAccountScopes(scopes)
    .build();
    credential.refreshToken();

よろしく

于 2013-10-13T19:49:26.970 に答える
0

CalendarList.get()関数を使用して、カレンダーがhidden=trueユーザーのカレンダー リストにないことを確認します。

于 2013-09-16T13:41:09.520 に答える