【发布时间】:2016-05-09 03:33:15
【问题描述】:
我正在使用 google calendar api 从公共日历中获取事件。 在 google 开发者控制台中,我创建了一个服务帐户密钥 (json),用于在 android 代码中设置 GoogleCredential,如下所示:
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();
然后我会从此日历中获取接下来的 5 个事件
com.google.api.services.calendar.model.Events nextEvent =
client.events().list("public-calendar-id@group.calendar.google.com")
.setTimeMin(new DateTime(new java.util.Date(), java.util.TimeZone.getDefault()))
.setMaxResults(5)
.setOrderBy("startTime")
.setSingleEvents(true)
.setShowDeleted(false)
.execute();
虽然此代码在 android studio 中运行时在调试中运行良好,但当我构建发布(使用密钥库文件签名)时它不起作用。它只是返回以下异常:
com.google.a.a.c.b.c:404 未找到 3097-3187/com.news.apoelnews W/System.err:未找到 3097-3187/com.news.apoelnews W/System.err:
在 com.google.a.a.c.d.a.c.b(未知来源)
请帮忙!
更新 我在代码中添加了android API key的使用如下:
com.google.api.services.calendar.model.Events nextEvent =
client.events().list("public-calendar-id@group.calendar.google.com")
.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 禁止 W/System.err:“代码”:403,W/System.err:“错误”:[ { W/System.err:“域”:“usageLimits”,W/System.err:
"message" : "配置了 per-IP 或 per-Referer 限制 在您的 API 密钥上,并且请求不符合这些限制
请注意,API 密钥是使用调试版和发布版 SHA-1 创建的。
【问题讨论】:
-
由于您使用的是服务帐户,因此您使用的是 Calendar for Work(Google Apps for Work)吗?
-
为什么使用服务帐户?据我所知,如果您使用的是 Google Apps for Work (domain-wide authority delegation),则可以使用服务帐户。
-
你是对的。我现在修改了我的代码,我只使用了 android API 密钥。
-
在开发者控制台添加你的域名
标签: android google-api google-calendar-api