安卓谷歌日历 API 在发布时不起作用



我正在使用谷歌日历 api 从公共日历中获取事件。在谷歌开发者控制台中,我创建了一个服务帐户密钥(json(,我用它来在安卓代码中设置谷歌凭证,如下所示:

 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"));

然后我使用这个谷歌凭据来获取日历对象

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:
at com.google.a.a.c.d.a.c.b(未知来源(

请帮忙!

更新我在代码中添加了android API密钥的使用,如下所示:

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: "code" : 403, W/System.err: "errors" : [ { W/System.err: "domain" : "usageLimits", W/System.err:
"消息" : "配置了每个 IP 或每个引用的限制 ,并且请求与这些限制不匹配

请注意,API 密钥是使用调试和发布 SHA-1 创建的。

问题是在构建发布期间,gradle 选项"minifyenable true"弄乱了谷歌 api 类名。因此,解决方案是包括: -keep class com.google.api.** { *; }在普罗卫队

是否为签名密钥库生成了 api/密钥,并且是否更改了项目中与您的发布密钥库匹配的 api 密钥

我对谷歌日历API了解不多,但是是否尝试使用发布密钥库生成 SHA-1 密钥? 如果要生成发布APK,则必须为Google日历创建新密钥并再次发布它将为您工作。

遵循一些有用的链接: https://developer.android.com/studio/publish/app-signing.html#releasemode

https://coderwall.com/p/r09hoq/android-generate-release-debug-keystores

试试吧

相关内容

  • 没有找到相关文章

最新更新