我正在使用谷歌日曆API來獲取公共日曆中的事件。 在谷歌開發者控制檯,我創建了一個服務帳戶密鑰(JSON),我在Android代碼中使用設置的GoogleCredential如下:安卓谷歌日曆API在發佈時不工作
AssetManager am = getAssets();
InputStream inputStream = am.open("key-file-name.json");
GoogleCredential credential = GoogleCredential.fromStream(inputStream);
credential =credential.createScoped(Arrays.asList("https://www.googleapis.com/auth/calendar.readonly"));
然後我用這個GoogleCredential獲得日曆對象
Calendar client = new Calendar.Builder(AndroidHttp.newCompatibleTransport(),
new JacksonFactory(),
credential).setApplicationName("someAppName").build();
然後我得到這個日曆
com.google.api.services.calendar.model.Events nextEvent =
client.events().list("[email protected]")
.setTimeMin(new DateTime(new java.util.Date(), java.util.TimeZone.getDefault()))
.setMaxResults(5)
.setOrderBy("startTime")
.setSingleEvents(true)
.setShowDeleted(false)
.execute();
012未來5個事件
儘管這段代碼在android studio中運行時可以正常工作,但是當我爲發行版構建(使用keystore文件簽名)時,它不起作用。它只返回以下異常:
com.google.aacbc:404未找到3097-3187/com.news.apoelnews W/System.err的:未找到3097-3187/com.news.apoelnews w^/System.err:
在com.google.aacdacb(來源不明)
請幫幫忙!
UPDATE 我已經加入了採用Android的API密鑰的代碼如下:
com.google.api.services.calendar.model.Events nextEvent =
client.events().list("[email protected]")
.setTimeMin(new DateTime(new java.util.Date(), java.util.TimeZone.getDefault()))
.setMaxResults(5)
.setOrderBy("startTime")
.setSingleEvents(true)
.setShowDeleted(false)
.setKey("api-key-string_from_developer_console"))
.execute();
這將導致以下異常:
W/System.err的: COM .google.api.client.googleapis.json.GoogleJsonResponseException:403 Forbidden W/System.err:「code」:403,W/System.err:「errors」:[/ System.err:「domain」 :「usageLimits」, W/System.err的:
「消息」:「有一個每個IP或每個Referer的限制你的API密鑰配置 和
請注意,請求不符合這些限制的API密鑰是使用調試和版本SHA-1創建的。
由於您使用的服務帳戶,您使用的是工作(谷歌Apps for Work的)日曆? – adjuremods
不,我不................. – Louis
爲什麼要使用服務帳戶?據我所知,如果您使用Google Apps for Work([全域範圍授權委託]](https://developers.google.com/google-apps/calendar/concepts/domain#accessing_domain_calendars_as_an_app),則可以使用服務帳戶)。 – adjuremods