2017-10-18 83 views
0

我想使用谷歌日曆API在java中創建應用程序,但我嘗試連接到API服務,但它是錯誤的。 這裏是我的代碼(與Eclipse)連接谷歌日曆服務java

GoogleCredential credential = new GoogleCredential.Builder().setTransport(GoogleNetHttpTransport.newTrustedTransport()) 

       .setServiceAccountId("*****************") 
    // .setServiceAccountUser("my e-mail adress") 
       .setClientSecrets("","********") 
     // .setServiceAccountScopes(CalendarScopes.CALENDAR) 
       .setJsonFactory(new GsonFactory()) 

       .build(); 
      Calendar client = new com.google.api.services.calendar.Calendar.Builder(
        GoogleNetHttpTransport.newTrustedTransport(), new GsonFactory(), credential).build(); 

的錯誤是:

Exception in thread "main" java.lang.IllegalArgumentException 
    at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:111) 
    at com.google.api.client.util.Preconditions.checkArgument(Preconditions.java:37) 
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.<init>(GoogleCredential.java:323) 
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential$Builder.build(GoogleCredential.java:539) 
    at google_calendar.add_evenement.main(add_evenement.java:21) 
+0

根據你的錯誤信息沒有與驗證的問題,你能提供的輸出與改變認證?您可以使用:GoogleCredential憑證= new GoogleCredential.Builder()。setTransport(GoogleNetHttpTransport.newTrustedTransport())。setServiceAccountId(「*****************」)。setClientSecrets (「」,「********」)。setJsonFactory(new GsonFactory())。setAccessType(「offline」)。build();' –

+0

謝謝,但我有同樣的錯誤 –

+0

這似乎很奇怪對我來說,你正在設置一個服務帳戶ID和一個客戶端機密 - 通常你*要麼*使用服務帳戶的詳細信息*或*你使用客戶端ID /祕密。同樣,您設置服務帳戶標識很奇怪,但在服務帳戶機密方面沒有別的。 –

回答

0

如果您還沒有這樣做,檢查Using OAuth 2.0 for Server to Server Applications

正如所討論的,如果你已經委派域範圍內的訪問服務帳戶,你要模擬用戶帳戶,該帳戶GoogleCredential工廠setServiceAccountUser方法指定的用戶帳戶的電子郵件地址。例如:

GoogleCredential credential = new GoogleCredential.Builder() 
    .setTransport(httpTransport) 
    .setJsonFactory(JSON_FACTORY) 
    .setServiceAccountId(emailAddress) 
    .setServiceAccountPrivateKeyFromP12File(new File("MyProject.p12")) 
    .setServiceAccountScopes(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN)) 
    .setServiceAccountUser("[email protected]") 
    .build(); 

然後,calling Google APIs使用Java:

使用GoogleCredential對象通過完成以下步驟來調用谷歌的API:

  1. 創建的API服務對象你想使用GoogleCredential對象進行呼叫。例如:
SQLAdmin sqladmin = 
    new SQLAdmin.Builder(httpTransport, JSON_FACTORY, credential).build(); 
  • 請使用interface provided by the service object請求到API服務。例如,要列出雲SQL數據庫的實例在興奮的 - 例如-123項目:
  • SQLAdmin.Instances.List instances = 
        sqladmin.instances().list("exciting-example-123").execute(); 
    
    +0

    感謝您的幫助, 我用你的說明和錯誤是: 異常在線程「main」com.google.api.client.auth.oauth2.TokenResponseException:401 Unauthorized .... –

    +0

    您可能想要檢查您使用的訪問令牌是已過期還是無效。請參閱建議的操作[此處](https://developers.google.com/google-apps/calendar/v3/errors#401_invalid_credentials)。 – Teyam

    +0

    我試過解決方案,但同樣的錯誤 –