Android. Добавляем напоминания о событиях

Все ПО, не вошедшее в другие разделы (почтовые клиенты, прокси-серверы, графические пакеты и пр.)


Модератор: UncleFather

Аватара пользователя
UncleFather
Site Admin
Сообщения: 1503
Зарегистрирован: 17 авг 2004 16:20, Вт
Контактная информация:

Android. Добавляем напоминания о событиях

Сообщение UncleFather »

Задача:

Как известно, Google календарь собирает информацию о памятных событиях, днях рождения, годовщинах и пр. Однако, создав для этих событий отдельный календарь «Дни рождения», Google не только никак не уведомляет о событиях в нем, но и не предоставляет возможности эти оповещения настраивать. Поэтому можно легко пропустить какое либо событие, - ведь не каждый же заглядывает в календарь ежедневно.


Решение 1:

Можно настроить автоматический скрипт, созданный Nikhil K.. Описание скрипта на английском языке читаем в статье Google Calendar Birthday Notifications for Android Contacts

Хороший перевод на русский язык сделан Константином Докучаевым в статье Как добавить напоминания о днях рождениях в Google Календарь.

Поэтому, здесь приведу только ключевые моменты:

  1. Переходим на страничку проекта Birthday Notifications сервиса разработчиков Google.

  2. Выделяем весь текст скрипта и копируем его в буфер обмена (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();
    }
    
    
  3. Создаем у себя новый проект: «Файл» -> «Создать» -> «Проект»:

    Image-1.png
  4. Вставляем содержимое буфера обмена (Ctrl+V) и изменяем в восьмой строке скрипта «Birthdays» на «Contacts»

    Примечание: В исходном скрипте для каждого дня рождения добавляются оповещения, приходящие на электронную почту за день до события в 22 часа. Поскольку, мне это не удобно, то я поменял оповещения на всплывающие за день до события в 10:15, для чего в коде заменил 55-ю строку

    Код: Выделить всё

    .addEmailReminder(2 * 60);

    на

    Код: Выделить всё

    .addPopupReminder(14 * 60 - 15);
  5. В меню «Ресурсы» выбираем раздел «Дополнительные функции Google...», если проект еще не сохранен, то сохраняем его, выбрав произвольное имя:

    05.jpg
  6. В открывшемся окне «Дополнительные функции Google...» включаем «Calendar API» и нажимаем на ссылку консоли разработчика:

    Image--3--1.png
  7. В окне консоли разработчика в строке поиска вводим «calendar», выбираем «Google Calendar API» и на открывшейся странице нажимаем «Включить»:

    Image--2--1.png
    Image--2--1.png (9.49 КБ) 5293 просмотра
  8. Закрываем страницу «Диспетчера API», жмем«OK» на странице создания скрипта.

  9. В меню «Выполнить» включаем и разрешите доступ для «addBdayNotifications»:

    Image--4-.png
  10. После завершения выполнения скрипта, переходим в Google Календарь и в блоке «Мои календари» открываем общие настройки всех календарей:

    Image--5-.png
  11. Включаем календарь «Birthday Notifications»:

    Image--6-.png
  12. Настраиваем напоминания для этого календаря так, как нам нужно

Скрипт будет в автоматическом режиме обновлять данные о днях рождения.

Особенности скрипта, которые нужно иметь ввиду:

  1. Для немедленного обновления событий календаря, скрипт можно запускать вручную

  2. Автоматическое обновление календаря происходит один раз в сутки

  3. Если контакту добавляется новое событие, то оно появляется в календаре

  4. Если имя контакта изменено, то в календаре создается дубликат события

  5. Если контакт удален, то соответствующее событие календаря не удаляется

  6. Если у контакта изменена дата события, то в календаре событие не изменяется


Решение 2:

Устанавливаем любое дополнительное приложение из сервиса «Google Play», умеющее напоминать о днях рождения.


Alexander A. Manaeff©

Понравилась статья? Будем крайне признательны за репосты в соцсетях! Материально поддержать проект можно здесь

Мои странички:
ВКонтакте
Одноклассники
Youtube
Facebook
Instagram

Изображение
Изображение
Изображение
Изображение