簡體   English   中英

使用Android進行Gmail API訪問

[英]Gmail API access using Android

我正在嘗試使用Android應用程序訪問Gmail API。 我已成功請求並使用所有可用范圍組合接收了訪問令牌。 但似乎每次我實際嘗試使用Gmail API命令時,我都會收到403 exception reading: Access not configured please use Google developers console to activate the api...

不用說,API已激活,並且使用正確的包名稱和sha1代碼創建了客戶端密鑰。 相同的客戶端ID適用於Google Plus功能。

是否有任何人遇到此問題或成功連接到Android的Gmail API?

謝謝

這是日志:

09-04 21:40:54.014: W/System.err(26717): com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
09-04 21:40:54.014: W/System.err(26717): {
09-04 21:40:54.014: W/System.err(26717):   "code" : 403,
09-04 21:40:54.014: W/System.err(26717):   "errors" : [ {
09-04 21:40:54.014: W/System.err(26717):     "domain" : "usageLimits",
09-04 21:40:54.014: W/System.err(26717):     "message" : "Access Not Configured. Please use Google Developers Console to activate the API for your project.",
09-04 21:40:54.014: W/System.err(26717):     "reason" : "accessNotConfigured"
09-04 21:40:54.014: W/System.err(26717):   } ],
09-04 21:40:54.014: W/System.err(26717):   "message" : "Access Not Configured. Please use Google Developers Console to activate the API for your project."
09-04 21:40:54.014: W/System.err(26717): }

是否需要在API控制台中啟用除Google+ API和Gmail API之外的任何其他API?

編輯:

我發現使用基於WebView的身份驗證將導致訪問令牌授予Gmail API訪問權限,但這不是有效的解決方案,因為令牌是短暫的。 至於現在,GoogleAuthUtil會授予令牌,但它的權限不足以使用Gmail API。 有人成功將Android與Gmail API連接並希望分享?

EDIT2:

以下是我正在做的片段:

獲得令牌:

token = GoogleAuthUtil.getToken(MainActivity.this, Plus.AccountApi.getAccountName(mGoogleApiClient), scope);

嘗試從Gmail API獲取郵件:

GoogleCredential credential = new GoogleCredential().setAccessToken(token);
JsonFactory jsonFactory = new JacksonFactory();
HttpTransport httpTransport = new NetHttpTransport();

service = new Gmail.Builder(httpTransport, jsonFactory, credential).setApplicationName("GmailApiTP").build();
ListMessagesResponse messagesRespose;
List<Message> m = null;

ArrayList<String> ids = new ArrayList<String>();
ids.add("INBOX");
try {
    messagesRespose = service.users().messages().list("me").setLabelIds(ids).setQ("From: something")
            .execute();
    m = messagesRespose.getMessages();

} catch (IOException e) {
    e.printStackTrace();
}

使用Gmail API服務時會遇到異常。 此外,我已經嘗試清除令牌並要求一個具有相同結果的新令牌。

雖然沒有清楚地描述,但問題是通過GoogleAuthUtil.getToken()獲得的令牌在本地緩存並且可能會過期。 您收到的403錯誤是由於令牌過期造成的。 處理這種情況的正確方法是調用GoogleAuthUtil.clearToken()來刪除本地緩存的令牌,然后調用GoogleAuthUtil.getToken()來獲取新的令牌。

或者,您可以跟蹤上次請求令牌的時間,如果它超過一小時(這些令牌的默認到期時間),則搶先執行clearToken + getToken調用。

該錯誤消息具有欺騙性,我相信當開發人員項目憑證客戶端不正確時也會發生這種情況。 例如,當您真正想要“已安裝的應用程序”時,您選擇了“Web應用程序”。

確認您正確遵循以下說明: https//developers.google.com/accounts/docs/OAuth2

(應該是“安裝應用程序”等)

你可以從開發者控制台發布你的oauth客戶端信息嗎? (在那里輸入類型和任何其他非機密信息等)

您需要在Google Dev Console中設置Android應用密鑰。

  1. 選擇您的項目,選擇API&Auth,然后單擊憑據
  2. 創建新的客戶端ID(盡管它有其他客戶端ID)
  3. 選擇已安裝的應用程序 - > android
  4. 正確填寫您的包名和SHA1
  5. 創建新密鑰(盡管它有其他客戶端密鑰)
  6. 選擇Android密鑰
  7. 填寫SHA1; packageName如下: 45:B5:E4:6F:36:AD:0A:98:94:B4:02:66:2B:12:17:F2:56:26:A0:E0;com.example

您的問題將自動解決。 確保使用調試密鑰庫和發布密鑰庫創建客戶端ID和密鑰。

那么這就是交易。 到目前為止,GoogleAuthUtil && AccountManager提供的令牌無法與Gmail API配合使用。 不知道這是否是谷歌的事情,但我的解決方案是這樣的:

在API控制台中創建客戶端ID(應用程序 - >其他)。 使用客戶端ID和客戶端密鑰通過WebView獲取訪問令牌。 保存結果刷新令牌。 現在,只要您想刷新訪問令牌,請使用此請求:

    httpClient = new DefaultHttpClient();
    httpPost = new HttpPost(address);
    params.add(new BasicNameValuePair("refresh_token", token));
    params.add(new BasicNameValuePair("client_id", client_id));
    params.add(new BasicNameValuePair("client_secret", client_secret));
    params.add(new BasicNameValuePair("grant_type", "refresh_token"));
    httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
    httpPost.setEntity(new UrlEncodedFormEntity(params));
    HttpResponse httpResponse = httpClient.execute(httpPost);
    HttpEntity httpEntity = httpResponse.getEntity();
    is = httpEntity.getContent();

適合我。 希望以后將使用GoogleAuthUtil.getToken()選項提供有效的令牌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM