在Firebase Cloud功能中访问用户的Google日历

时间:2019-10-01 15:33:43

标签: firebase google-api google-cloud-functions google-calendar-api google-signin

负责向现有Flutter应用添加云功能。云功能的目标是经常运行,并查看用户帐户的Google日历中是否有即将发生的事件。

用户创建帐户并使用Google登录插件登录,然后存储在Firebase中。

我已将所需范围添加到GoogleSignIn对象

static GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: [
    'email',
    'https://www.googleapis.com/auth/calendar.events.readonly',
  ],
);

登录过程

final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
final GoogleSignInAuthentication googleAuth =
    await googleUser.authentication;

final AuthCredential credential = GoogleAuthProvider.getCredential(
  accessToken: googleAuth.accessToken,
  idToken: googleAuth.idToken,
);
final FirebaseUser user = await _auth.signInWithCredential(credential);
//update user table in firebase

这时,Google登录过程会返回一个访问令牌,我已将其存储在firebase中以供以后在云功能中使用。

我从Google Developer Console中的Web应用程序/云功能api项目中获得了客户端ID和客户端密码。

现在,我不确定如何使用googleapis /日历节点项目来使用此访问令牌进入该用户日历。

所有示例似乎都希望我再次使用范围创建另一个oauth2客户端以检索令牌,但是显然用户不会这样做,因为当用户不使用时,所有操作都会在后台发生应用程序。

我需要注册一个服务帐户,然后该帐户可以代表用户访问这些日历吗?可以做到吗?我正在努力尝试通过Google文档找到答案。

1 个答案:

答案 0 :(得分:0)

我认为(但让我们看看专家怎么说),因为云功能正在人类用户的名义(!)上运行,并且由于它是异步运行,因此服务帐户是正确的方法。

为此,Cloud Functions作为服务帐户运行,因此,他们对其他Google服务(包括日历)的任何调用都将作为该服务帐户。

您不妨考虑委托授权link

在您执行此操作之前,我建议您等待观察专家的意见。但是,可能需要在等待时查看链接;-)