Alexander A Manaeff -

 
 

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

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

Модератор: UncleFather

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

Сообщение UncleFather » 05 фев 2017 17:28, Вс

Задача:

Как известно, 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 (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 КБ) Просмотров: 228


  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», умеющее напоминать о днях рождения.
Аватара пользователя
UncleFather
Site Admin
 
Сообщения: 1307
Зарегистрирован: 17 авг 2004 16:20, Вт

Вернуться в Прочее ПО

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Alexander A Manaeff -
@Mail.ru .