У меня есть требование, когда я должен добавить кнопку в электронное письмо. При нажатии открывается Google, запрашивает учетные данные, а затем добавляет событие в календарь пользователя. Вот мой код.
<tr style = "display:none;">
<td width = "300" style = "width:225.0pt; background:#313131; padding:0in 0in 0in 0in; height:30.0pt; border-radius:3px">
<p class = "x_MsoNormal" align = "center" style = "text-align:center">
<span style = "font-family:Arial,sans-serif; color:white">
<a href = "@Model.GoogleLink" target = "_blank" rel = "noopener noreferrer" data-auth = "NotApplicable" data-linkindex = "10">
<span style = "color:white; text-decoration:none">Add to Google Calendar</span>
</a>
</span>
</p>
</td>
</tr>
Есть ли способ обновить событие, если оно уже есть в календаре?
PS: я не использую google-calendar-api, но решение с ним также будет оценено.
Хорошо, я отредактировал свой исходный пост, чтобы приветствовать решения с API. Обратите внимание, что я НЕ знаю электронную почту пользователей. Они должны получить запрос на вход
Понятно, я опубликую ответ, используя API.
@yousufalvi - пожалуйста, рассмотрите возможность «проголосовать» и «принять» ответ Кори Саттона.





Для достижения функциональности обновления событий Календаря Google из веб-приложения рекомендуется использовать API Календаря Google вместе с проверкой подлинности OAuth 2.0. Этот метод предоставляет необходимый доступ и разрешения для стороннего приложения для создания, чтения, обновления или удаления событий в календаре пользователя. Обновление является ключевым словом здесь для вашего вопроса.
Ниже приведены шаги, необходимые для интеграции API Календаря Google для обновлений событий:
Настройте учетные данные Google API: начните с создания нового проекта в Google Developers Console. Включите API Календаря Google для этого проекта и создайте учетные данные идентификатора клиента OAuth 2.0 для своего веб-приложения. Эти учетные данные предоставят необходимый доступ для управления событиями в календарях пользователей.
Код на стороне клиента. Измените существующий HTML-код, включив в него соответствующий JavaScript и библиотеки для обработки вызовов Google API. Реализуйте аутентификацию OAuth 2.0, чтобы получить токен доступа после успешной аутентификации пользователя. Этот токен позволит вашему приложению взаимодействовать с Календарем Google пользователя.
Обновление события: когда пользователь нажимает кнопку «Добавить в Календарь Google», инициируйте процесс аутентификации OAuth 2.0 с помощью вашего кода JavaScript (здесь Google попросит их войти). Получив токен доступа, используйте его, чтобы сделать запрос PATCH к API Календаря Google, обновив сведения о конкретном событии в тексте запроса.
Обработка аутентификации пользователя. Поскольку вы упомянули, что не имеете доступа к электронной почте пользователя, поток OAuth 2.0 выполнит процесс аутентификации за вас. Пользователям будет предложено войти в свою учетную запись Google и, при необходимости, предоставить свои учетные данные для предоставления необходимых разрешений.
Обратите внимание, что во время этого процесса пользователи могут столкнуться с экраном согласия Google, на котором объясняются разрешения, запрашиваемые вашим приложением, включая доступ к их Календарю Google. Это стандартная часть потока OAuth, обеспечивающая прозрачность для пользователей, и я бы не стал об этом беспокоиться.
Использование Google Calendar API вместе с проверкой подлинности OAuth 2.0 предлагает более безопасный и надежный способ взаимодействия с календарями пользователей по сравнению с попыткой манипулировать событиями с помощью прямой ссылки в электронном письме. Для более глубокого понимания деталей реализации вы можете обратиться к официальной документации Google Calendar API.
Отличный ответ. У OP есть несколько проблем: 1) обновление существующего события Google Calendar (исходный вопрос), 2) запрос, существует ли существующее событие, 3) добавление нового события, если его нет, и 4) «Аутентификация» (для выполнения любого из вышеперечисленных). Он обязательно должен использовать .NET API, и ему необходимо зарегистрировать и настроить свое приложение, чтобы разрешить OAuth2. Вы рассмотрели все это :) ДОПОЛНИТЕЛЬНО: я бы посоветовал ОП рассмотреть Identity Framework Core
Хотя ответ Кори Саттона представляет собой исчерпывающее руководство о том, как решить проблему, я предоставлю вам пример кода C#, который должен помочь вам обновить событие с помощью API Календаря Google:
public async Task UpdateCalendarEvent(string eventId, Google.Apis.Calendar.v3.Data.Event newEvent)
{
// Initialize the client
UserCredential credential;
using (var stream = new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
{
string credPath = "token.json";
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
}
var service = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
// Fetch the existing event
Google.Apis.Calendar.v3.Data.Event existingEvent = await service.Events.Get("primary", eventId).ExecuteAsync();
// Update the necessary fields from the new event data
existingEvent.Summary = newEvent.Summary;
existingEvent.Location = newEvent.Location;
existingEvent.Description = newEvent.Description;
existingEvent.Start = newEvent.Start;
existingEvent.End = newEvent.End;
// Update the event in the calendar
var request = service.Events.Update(existingEvent, "primary", existingEvent.Id);
request.Execute();
}
Это упрощенная версия кода для обновления события Календаря Google с помощью API Календаря Google с C#. Вам необходимо заменить «credentials.json» и «token.json» правильными путями к файлу учетных данных OAuth 2.0 и файлу хранилища токенов соответственно. «основной» используется для обозначения основного календаря аутентифицированного пользователя. Также укажите Scopes и ApplicationName в соответствии с вашими требованиями.
Как упомянул Кори Саттон, вам нужно использовать OAuth 2.0 для аутентификации пользователя и получения его разрешения на доступ и изменение своего Календаря Google. Клиентские библиотеки Google API .NET предоставляют метод GoogleWebAuthorizationBroker.AuthorizeAsync для обработки процесса проверки подлинности. После получения необходимой авторизации вы можете использовать CalendarService для взаимодействия с календарем пользователя.
Метод service.Events.Get используется для получения существующего события. После обновления необходимых полей используется метод service.Events.Update для обновления события в календаре.
В веб-приложении обновление событий Календаря Google без использования Google API невозможно. API Google предоставляет необходимый доступ и разрешения для стороннего приложения для создания, чтения, обновления или удаления событий.