gpt4 book ai didi

firebase - 是否可以在我的应用程序中的某个事件之后将事件添加到用户的谷歌日历(通过我的服务器)?

转载 作者:行者123 更新时间:2023-12-01 01:48:41 32 4
gpt4 key购买 nike

我想弄清楚是否可以通过 Firebase 将事件添加到用户的谷歌日历服务器端。

我已阅读 thisthis这似乎是我想要实现的目标,但它解释了我想将事件添加到他们的日历的用户应该共享他们的日历与我为我的应用程序创建的帐户。

这是真的还是我误解了什么?

如果有任何 JavaScript/NodeJS 指南,我也很感激。

最佳答案

没有。 Firebase 没有任何用于将事件添加到 Google 日历的内置功能。但是连接这两个 API 并不是特别困难。以下是一些额外的想法。

使用函数

一个优雅的解决方案是使用 Functions通过以任何方式(HTTP、数据库写入等)触发 Functions 事件并相应地调用 Calendar API 来实现此目的。

步骤如下所示:

  1. 在客户端对 Google OAuth 进行身份验证时,添加日历范围('https://www.googleapis.com/auth/calendar')
  2. 触发函数时,发送日历负载和 Google OAuth token

在 Cloud Functions for Firebase 中,您的触发器如下所示:

// Example combined from these docs:
// https://developers.google.com/calendar/v3/reference/events/insert#examples
// https://cloud.google.com/solutions/authentication-in-http-cloud-functions#writing_the_cloud_function
// https://firebase.google.com/docs/functions/http-events

//using another name other than "google" seems to cause error!!
const {google} = require('googleapis');
const calendar = google.calendar('v3');
const functions = require('firebase-functions');

// This example assumes an HTTP call
exports.addToCalendar = functions.https.onRequest((req, res) => {
const eventData = req.query.eventData;
const accessToken = getAccessToken(req);
return addToCalendar(eventData, accessToken).then(() => {
res.stats(200).send('yay');
}).catch(e => res.status(e.code).send({error: e.message}));
});

function addEventToGoogleCalendar(eventData, accessToken) {
const authClient = getOauthClient(accessToken);
return new Promise((resolve, reject) => {
calendar.events.insert({
auth: authClient,
calendarId: 'primary',
resource: eventData,
}, function(err, event) {
if (err) {
console.error(err);
reject(err);
}
else {
resolve();
}
});
});
}

function getOauthClient(accessToken) {
var oauth = new google.auth.OAuth2();
oauth.setCredentials({access_token: accessToken});
return oauth;
}

function getAccessToken(req) {
const header = req.get('Authorization');
if (header) {
var match = header.match(/^Bearer\s+([^\s]+)$/);
if (match) {
return match[1];
}
}
return null;
}

还有一些用于实时数据库和 Firestore 的替代函数触发器:

// Alternative: Realtime DB trigger
exports.addToCalendar = functions.database.ref('/addToCalendar/{pushId}')
.onWrite((event) => {
const data = event.data.val();
return addToCalendar(data.eventData, data.token)
// clear from queue after write
//.then(() => event.ref().remove());
});

// Alternative: Firestore DB trigger
exports.addToCalendar = functions.firestore.document('addToCalendar/{pushId}')
.onCreate((event) => {
const data = event.data.data();
return addTocalendar(data.eventData, data.token)
// clear from queue after write
//.then(() => event.data.ref.remove());
});

一个示例 eventData 对象看起来像这样:

var event = {
'summary': 'Google I/O 2015',
'location': '800 Howard St., San Francisco, CA 94103',
'description': 'A chance to hear more about Google\'s developer products.',
'start': {
'dateTime': '2015-05-28T09:00:00-07:00',
'timeZone': 'America/Los_Angeles',
},
'end': {
'dateTime': '2015-05-28T17:00:00-07:00',
'timeZone': 'America/Los_Angeles',
},
'recurrence': [
'RRULE:FREQ=DAILY;COUNT=2'
],
'attendees': [
{'email': 'lpage@example.com'},
{'email': 'sbrin@example.com'},
],
'reminders': {
'useDefault': false,
'overrides': [
{'method': 'email', 'minutes': 24 * 60},
{'method': 'popup', 'minutes': 10},
],
},
};

使用 Zapier

Zapier 提供了集成 Firebase 和 Google 日历的触发器:https://zapier.com/apps/firebase/integrations/google-calendar

关于firebase - 是否可以在我的应用程序中的某个事件之后将事件添加到用户的谷歌日历(通过我的服务器)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49182671/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com