Android. Добавляем напоминания о событиях
Задача:
Как известно, Google календарь собирает информацию о памятных событиях, днях рождения, годовщинах и пр. Однако, создав для этих событий отдельный календарь «Дни рождения», Google не только никак не уведомляет о событиях в нем, но и не предоставляет возможности эти оповещения настраивать. Поэтому можно легко пропустить какое либо событие, - ведь не каждый же заглядывает в календарь ежедневно.
Решение 1:
Можно настроить автоматический скрипт, созданный Nikhil K.. Описание скрипта на английском языке читаем в статье Google Calendar Birthday Notifications for Android Contacts
Хороший перевод на русский язык сделан Константином Докучаевым в статье Как добавить напоминания о днях рождениях в Google Календарь.
Поэтому, здесь приведу только ключевые моменты:
-
Переходим на страничку проекта Birthday Notifications сервиса разработчиков Google.
-
Выделяем весь текст скрипта и копируем его в буфер обмена (Ctrl+C)
Спойлер
Код: Выделить всё
function addBdayNotifications() { var bdayCal, bdayNotifyCal; var calendars = CalendarApp.getAllCalendars(); for (var i = 0; i < calendars.length; i++) { if (calendars[i].getName() == "Birthday Notifications") bdayNotifyCal = calendars[i]; if (calendars[i].getName() == "Birthdays") bdayCal = calendars[i]; if (calendars[i].getName() == "Дни рождения") bdayCal = calendars[i]; } if (bdayCal == undefined) return; if (bdayNotifyCal == undefined) { bdayNotifyCal = CalendarApp.createCalendar("Birthday Notifications"); bdayNotifyCal.setHidden(true); } var currentYear = new Date().getFullYear(); var fromDate = new Date(currentYear, 0, 1); var toDate = new Date(currentYear, 12, 31); var bdayEvents = bdayCal.getEvents(fromDate, toDate); var notifyEvents = bdayNotifyCal.getEvents(fromDate, toDate); // Maintain a list of event titles var notifyEventsTitle = []; for (i = 0; i < notifyEvents.length; i++) { notifyEventsTitle.push(notifyEvents[i].getTitle()) if (i % 25 == 0) Utilities.sleep(1000); } var items = 0; bdayEvents.forEach(function(evt) { var status = createEvent(bdayNotifyCal, notifyEventsTitle, evt.getTitle(), evt.getStartTime()); if (status) items++; if (items % 5 == 0) Utilities.sleep(1000); }) Logger.log("%s events added to the calendar", items); } function createEvent(cal, eventList, title, time) { for (var i = eventList.length - 1; i >= 0; i--) { if (eventList[i] == title) return false; } Utilities.sleep(1000); cal.createAllDayEventSeries(title, time, CalendarApp.newRecurrence().addYearlyRule(), {}) .setGuestsCanInviteOthers(false) .setGuestsCanModify(false) .setGuestsCanSeeGuests(false) .addPopupReminder(14 * 60 - 15); //.addEmailReminder(2 * 60); return true; } function createTrigger() { ScriptApp.newTrigger("addBdayNotifications") .timeBased() .everyDays(1) .create(); }
-
Создаем у себя новый проект: «Файл» -> «Создать» -> «Проект»:
-
Вставляем содержимое буфера обмена (Ctrl+V) и изменяем в восьмой строке скрипта «Birthdays» на «Contacts»
Примечание: В исходном скрипте для каждого дня рождения добавляются оповещения, приходящие на электронную почту за день до события в 22 часа. Поскольку, мне это не удобно, то я поменял оповещения на всплывающие за день до события в 10:15, для чего в коде заменил 55-ю строку
Код: Выделить всё
.addEmailReminder(2 * 60);
на
Код: Выделить всё
.addPopupReminder(14 * 60 - 15);
-
В меню «Ресурсы» выбираем раздел «Дополнительные функции Google...», если проект еще не сохранен, то сохраняем его, выбрав произвольное имя:
-
В открывшемся окне «Дополнительные функции Google...» включаем «Calendar API» и нажимаем на ссылку консоли разработчика:
-
В окне консоли разработчика в строке поиска вводим «calendar», выбираем «Google Calendar API» и на открывшейся странице нажимаем «Включить»:
-
Закрываем страницу «Диспетчера API», жмем«OK» на странице создания скрипта.
-
В меню «Выполнить» включаем и разрешите доступ для «addBdayNotifications»:
-
После завершения выполнения скрипта, переходим в Google Календарь и в блоке «Мои календари» открываем общие настройки всех календарей:
-
Включаем календарь «Birthday Notifications»:
-
Настраиваем напоминания для этого календаря так, как нам нужно
Скрипт будет в автоматическом режиме обновлять данные о днях рождения.
Особенности скрипта, которые нужно иметь ввиду:
-
Для немедленного обновления событий календаря, скрипт можно запускать вручную
-
Автоматическое обновление календаря происходит один раз в сутки
-
Если контакту добавляется новое событие, то оно появляется в календаре
-
Если имя контакта изменено, то в календаре создается дубликат события
-
Если контакт удален, то соответствующее событие календаря не удаляется
-
Если у контакта изменена дата события, то в календаре событие не изменяется
Решение 2:
Устанавливаем любое дополнительное приложение из сервиса «Google Play», умеющее напоминать о днях рождения.