负责向现有的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文档找到答案。
我认为(但让我们看看专家怎么说),因为云功能正在人类用户的名义上(!)运行,并且由于它是异步运行,因此服务帐户是正确的方法。
为此,Cloud Functions作为服务帐户运行,因此,他们对其他Google服务(包括日历)的任何调用都将作为该服务帐户。
您不妨考虑委托授权link
[在您执行此操作之前,我鼓励您等待观察专家的意见。但是,当您等待时,可能值得查看链接;-)