使用dart和flutter与google calendar api获取用户日历上的事件列表

时间:2018-03-21 18:41:15

标签: google-api dart flutter google-calendar-api

我正在尝试通过重新构建我之前使用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。

我错过了什么吗?代码错了吗?也许我需要弄乱服务帐户上的设置?任何帮助将不胜感激。

1 个答案:

答案 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端设置相同。

希望这对某人有帮助。