android google calendar api在发布时无法正常工作

Lou*_*uis 6 android google-calendar-api google-api

我正在使用谷歌日历api从公共日历中获取活动.在谷歌开发者控制台中,我创建了一个服务帐户密钥(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"));
Run Code Online (Sandbox Code Playgroud)

然后我使用此GoogleCredential来获取日历对象

Calendar client = new Calendar.Builder(AndroidHttp.newCompatibleTransport(),
                   new JacksonFactory(),
                   credential).setApplicationName("someAppName").build();
Run Code Online (Sandbox Code Playgroud)

然后我从这个日历中获得接下来的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();
Run Code Online (Sandbox Code Playgroud)

虽然这个代码在android工作室中运行时在调试中工作正常,但是当我构建发布版(使用密钥库文件签名)时它不起作用.它只返回以下异常:

com.google.aacbc:404 Not Found 3097-3187/com.news.apoelnews W/System.err:Not Found 3097-3187/com.news.apoelnews W/System.err:
at com.google.aacdacb(Unknown Source )

请帮忙!

更新 我在代码中添加了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();
Run Code Online (Sandbox Code Playgroud)

这会导致以下异常:

W/System.err:com.google.api.client.googleapis.json.GoogleJsonResponseException:403 Forbidden W/System.err:"code":403,W/System.err:"errors":[{W/System.错误:"domain":"usageLimits",W/System.err:
"message":"您的API密钥上配置了每IP或每个Referer限制,并且请求与这些限制不匹配

请注意,API密钥是使用调试和版本SHA-1创建的.

Lou*_*uis 9

问题是在发布版本中,gradle选项'minifyenable true'正在搞乱google api类的名字.所以解决方案是包括:-keep class com.google.api.**{*; 在proguard中