2014-09-26 36 views
0

我想使用gdata來獲取特定用戶的谷歌聯繫人。該操作將在控制檯應用程序中執行。具有用戶名(電子郵件)和密碼,我可以檢索我需要的數據,以防帳戶級別訪問未經檢查的應用程序(據我所知,我使用ClientLogin)。如果它設置在帳戶級別,我也可以使用特定於應用程序的密碼。 我知道我可以在不使用userId-password的情況下使用Oauth進行授權,但是這對我來說幾乎不可行,因爲據我瞭解,每次使用都必須爲包括CLIENT ID,CLIENT SECRET和REDIRECT URIS的本地應用程序生成客戶端ID(請更正我,如果我不右)有沒有什麼辦法讓谷歌聯繫人有密碼和用戶名(電子郵件)沒有特定的帳戶設置?

我使用的代碼是:

ContactsService contactsService = new ContactsService("projectName"); 
contactsService.setUserCredentials(email, password); 
URL feedUrl = new URL("https://www.google.com/m8/feeds/contacts/default/full"); 
Query myQuery = new Query(feedUrl); 
myQuery.setMaxResults(100); 
ContactFeed resultFeed = contactsService.getFeed(myQuery, ContactFeed.class); 

有沒有什麼辦法讓從賬戶不依賴於帳戶設置的所有聯繫人,有用戶ID(電子郵件)和passowrd ? (打開瀏覽器,使用戶授權或類似的東西也可以工作)

回答

0

終於設法得到它的工作 萬一有人面臨着同樣的問題

創建谷歌帳戶,生成JSON文件(對本地應用包括客戶端ID,客戶端密鑰和重定向 將JSON文件到您的應用程序 爲以下

public class AuthorizationHelper { 

    public static Credential authorize() throws Exception { 
     java.io.File DATA_STORE_DIR = 
       new java.io.File("permissionsFile", "PermissionsFolder"); 
     JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); 
     NetHttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); 
     FileDataStoreFactory dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR); 
     // load client secrets 
     GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, 
       new InputStreamReader(new FileInputStream("client_secrets.json"))); 
     if (clientSecrets.getDetails().getClientId().startsWith("Enter") 
       || clientSecrets.getDetails().getClientSecret().startsWith("Enter ")) { 
      System.out.println(
        "Enter Client ID and Secret from https://code.google.com/apis/console/?api=plus " 
          + "into plus-cmdline-sample/src/main/resources/client_secrets.json"); 
      System.exit(1); 
     } 
     // set up authorization code flow 
     GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
       httpTransport, JSON_FACTORY, clientSecrets, 
       Collections.singleton("https://www.google.com/m8/feeds/contacts/default/full")).setDataStoreFactory(
       dataStoreFactory).build(); 
     // authorize 
     return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("googleAccount"); 
    } 
} 

創建類似的方式憑證,其中permissionsFile和permissionsFolder是文件和客戶端ID)文件夾,暫時將存儲你試圖用 Google賬戶登錄的帳戶您的權限 - 您所創建的帳戶(我不使用@ gmail.com)

然後就去做

myService.setOAuth2Credentials(AuthorizationHelper.authorize()); 

並刪除

contactsService.setUserCredentials(email, password); 

因爲你不需要在你的代碼中的登錄名和密碼。

您將被重定向到登錄頁面瀏覽器,並要求輸入用戶名和passord

希望幫助別人

感謝

Ievgenii

相關問題