我正在尝试通过重新构建我之前使用Java编写的应用程序来学习如何使用dart和flutter,其中包括使用Google自己的Calendar API从Google日历中获取事件。
通过阅读(不是非常详细的)documentation on the googleapis_auth package以及StackOverflow上的only other thread关于一个非常类似的问题,我已经设法将理论上应该工作的代码放在一起:< / p>
import 'package:googleapis/calendar/v3.dart';
import 'package:googleapis_auth/auth_io.dart';
//get Service Account Credentials
final accountCredentials = new ServiceAccountCredentials.fromJson({
"private_key_id": "myprivatekeyid",
"private_key": "myprivatekey",
"client_email": "myclientemail",
"client_id": "myclientid",
"type": "service_account"
});
var _scopes = [CalendarApi.CalendarScope]; //defines the scopes for the calendar api
void getCalendarEvents() {
clientViaServiceAccount(accountCredentials, _scopes).then((client) {
var calendar = new CalendarApi(client);
var calEvents = calendar.events.list("primary");
calEvents.then((Events events) {
events.items.forEach((Event event) {print(event.summary);});
});
});
}
上述代码在模拟器上运行时不会产生任何错误,也不会在控制台中打印任何事件摘要。但是当查看项目的仪表板时,请求会响应代码200,即成功。我还尝试使用嵌套在clientViaServiceAccount中的类似代码来获取所有日历的ID,并且它也不会返回任何内容。
此外,从文档中我发现,访问API的最简单方法是通过客户端服务帐户,如代码中所示,而不是通过我更习惯的OAuth2客户端ID。
我错过了什么吗?代码错了吗?也许我需要弄乱服务帐户上的设置?任何帮助将不胜感激。
答案 0 :(得分:2)
我可以使用您的代码进行一次更改就可以使它工作(步骤6)。首先,确保正确设置服务器端(步骤1-5)。
Google开发者控制台
1.创建项目
2.启用日历api
3.创建服务帐户-下载JSON凭证
Google日历设置
4.与特定的人共享-添加服务帐户的电子邮件
5.复制日历ID(alphanumericstring@group.calendar.google.com)
您的代码
6.将第5步中的日历ID替换为“主要”
在https://murze.be/how-to-setup-and-use-the-google-calendar-api处,第1-5步的内容做得很好。它们用于PHP,但Google端设置相同。
希望这对某人有帮助。