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

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

我正在尝试通过重新构建我之前用 Java 编写的应用来学习如何使用 dart 和 flutter,这涉及使用 Google 自己的日历 API 从 Google 日历获取事件。

通过阅读(一个不是很详细)documentation on the googleapis_auth package ,以及 only other thread在 StackOverflow 上关于一个非常相似的问题,我已经设法将理论上应该工作的代码放在一起:

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。

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

最佳答案

我能够使用您的代码进行一次更改(第 6 步)。首先,确保服务器端设置正确(步骤 1-5)。
Google 开发者控制台
1. 创建项目
2. 启用日历接口(interface)
3. 创建服务账户 - 下载 json 凭证
Google 日历设置
4. 分享给特定的人-添加服务账号邮箱
5. 复制日历 ID (alphanumericstring@group.calendar.google.com)
您的代码
6. 将“primary”替换为第 5 步中的日历 ID

https://murze.be/how-to-setup-and-use-the-google-calendar-api 上有对步骤 1-5 的详细概述。 .它们适用于 PHP,但 Google 端的设置是相同的。

希望这对某人有帮助。

关于google-api - 使用 dart 和 flutter 与 google calendar api 获取用户日历上的事件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49414279/

相关文章:

google-analytics - 从Google Analytics(分析)向Power Query添加列

java - 为什么我的应用程序抛出 IllegalStateException GoogleApiClient 尚未连接?

php - Google Fit API 无法添加大部分范围

angularjs - 导入库不会仅导入文件包文件夹

flutter - 带有里程碑/步骤分隔符的CircularProgressIndicator(例如1/3、2/3、3/3)

flutter - 在另一个带有另一个小部件的 ListView 中回调 ListView ?

api - 在页面之间波动共享 Bloc

java - 来自 Google API 的存储凭据可使用 Java 重复使用

dart - 使用 IMAP 将所有电子邮件放入列表

dart - curry 函数的类型签名