Статьи

Переместите события вашего сайта Drupal на свой телефон с помощью Pushover

В этой статье я собираюсь показать вам, как вы можете интегрировать Pushover с вашим сайтом Drupal. Я проиллюстрирую несколько примеров того, как вы можете использовать Pushover для уведомления себя, как только что-то происходит на вашем сайте.

Код, который я пишу в этой статье, также доступен в этом репозитории, так что вы можете просто его клонировать, если хотите следовать.

Что такое Пушовер?

Pushover — это мобильное веб-приложение, которое позволяет получать уведомления в реальном времени на ваше мобильное устройство. Это работает так, что вы устанавливаете приложение на свое устройство Android или Apple, и с помощью удобного API вы можете отправлять уведомления об этом приложении. Самое замечательное в этом то, что это происходит более или менее в режиме реального времени (в зависимости от вашего интернет-соединения), так как Pushover использует серверы Google и Apple для отправки уведомлений.

Цена также очень доступна. По ставке 4,99 доллара США за платформу (Android, Apple или настольный компьютер), уплаченную только один раз, вы можете использовать ее на любом количестве устройств под этой платформой. И вы также получите 5-дневный пробный период бесплатно в момент создания учетной записи.

Что я здесь делаю?

В этой статье я собираюсь настроить приложение Pushover и использовать его с моего сайта Drupal для уведомления моего телефона о различных событиях. Я приведу два примера использования Pushover:

  • Каждый раз, когда анонимный пользователь публикует комментарий, ожидающий административного одобрения, я отправляю уведомление на свой телефон
  • Всякий раз, когда пользователь с правами администратора 1 входит на сайт, я отправляю экстренное уведомление на мой телефон (полезно, если вы являетесь единственным пользователем этой учетной записи администратора).

Естественно, это примеры, и вы можете не найти их полезными. Но они служат только иллюстрацией силы, которую вы можете получить, используя Pushover.

Pushover аккаунт

Во-первых, быстрый взгляд на создание учетной записи Pushover. Чтобы продолжить, перейдите к Pushover и зарегистрируйтесь, если вы еще этого не сделали, и вы можете начать 5-дневную бесплатную пробную версию. Затем перейдите в Google Play или App Store и установите приложение на свое устройство. Вам нужно будет войти в свою учетную запись и дать устройству имя. Мой называется просто Nexus (подсказка: у меня нет iPhone).

Затем вернитесь на веб-сайт Pushover, и вы уже можете проверить его, отправив себе тестовое уведомление на одно или все ваши активные устройства. Вы даже можете указать, какой звук он должен издавать.

Далее, если вы хотите использовать API, вам нужно создать приложение . Это сгенерирует для вас app_token для использования позже. И это должно быть в значительной степени так.

Drupal

Теперь, когда о создании учетной записи Pushover позаботились, приложение для устройства установлено (в моем случае Android), и у меня есть приложение Pushover, пришло время посмотреть, как я могу достичь поставленной цели в начале. В качестве краткого плана я сделаю следующее:

  • Создать пользовательский модуль Drupal
  • Добавьте к этому класс Pushover, созданный Крисом Шаленборгом (удобная оболочка для вызовов curl в API)
  • Реализовать несколько хуков, которые будут запускать уведомления на основе определенных условий
  • прибыль

Пользовательский модуль, с которым я буду работать в этом примере, называется pushover и содержит файл pushover.info и файл pushover.module (при необходимости). Кроме того, я создам в lib/Pushover папку lib/Pushover для хранения внешнего класса, который я буду использовать для подключения к Pushover. Существуют и другие, более рекомендуемые способы импорта внешних библиотек в модули Drupal (см. API библиотек ), но для краткости это будет работать просто отлично.

Первое, что я хочу сделать в своем файле pushover.module это импортировать этот внешний класс. Исходя из структуры моей папки, я могу сделать это с помощью этой строки:

 require_once(DRUPAL_ROOT . '/' . drupal_get_path('module', 'pushover') . '/lib/Pushover/Pushover.php'); 

Далее я хочу создать вспомогательную функцию многократного использования, которая будет возвращать объект с возможностью повторного использования . Это объект, уже заполненный моими собственными значениями по умолчанию (например, учетными данными), и для некоторых общих свойств требуются некоторые параметры. Но сначала я хочу поместить свои учетные данные Pushover в файл settings.php поскольку они не принадлежат моему репозиторию git:

 $conf['pushover_credentials'] = array( 'user_token' => 'uCpygdjfsndfi7233sdasdo33Yv', 'app_token' => 'aKH8Nwsdasdanl342jmsdaBWgoVe', ); 

Очевидно, что ни один из этих токенов теперь не действителен, но если вы user_token , вы должны заменить их своим: user_token вы получаете на главной странице при входе на веб-сайт Pushover, и app_token — это тот, который генерируется для вашего приложения.

Затем я могу продолжить с моей вспомогательной функцией, о которой я упоминал ранее:

 /** * Helper function that returns a pushable object using the Pushover class * * @param $vars * @return bool|Pushover */ function pushover_get_pushable($vars) { global $conf; if (isset($conf['pushover_credentials'])) { $push = new Pushover(); $push->setToken($conf['pushover_credentials']['app_token']); $push->setUser($conf['pushover_credentials']['user_token']); $push->setTitle($vars['title']); $push->setMessage($vars['message']); if (isset($vars['url'])) { $push->setUrl($vars['url']); } if (isset($vars['device'])) { $push->setDevice($vars['device']); } $push->setTimestamp(time()); return $push; } else { return FALSE; } } 

В этой функции я создаю новый объект Pushover, если в моем файле settings.php есть учетные данные. В противном случае я молча проваливаюсь, возвращая ложь. Функция принимает некоторые параметры, которые установлены для объекта: title и message являются обязательными, тогда как url ​​и device — нет. На самом деле устройство — это имя устройства, которым вы хотите ограничить это уведомление.

Кроме того, я устанавливаю текущую метку времени и затем возвращаю объект.

Затем пришло время использовать эту функцию внутри некоторых хуков. Первым будет hook_comment_insert () :

 /** * Implements hook_comment_insert(). */ function pushover_comment_insert($comment) { // Send a push notification if a new comment is created by an anonymous user // and it is not yet published. if ($comment->status == 0 && $comment->is_anonymous == TRUE) { global $base_url; $vars = array( 'title' => 'New comment on ' . variable_get('site_name') . '!', 'message' => 'Subject: ' . $comment->subject, 'url' => $base_url . '/node/' . $comment->nid . '#comment-' . $comment->cid, 'device' => 'Nexus' ); $pushable = pushover_get_pushable($vars); if ($pushable) { $pushed = $pushable->send(); if ($pushed == false) { watchdog('Pushover', t('A comment has been created but there was an error pushing that over.'), array(), WATCHDOG_ERROR, NULL); } } } } при /** * Implements hook_comment_insert(). */ function pushover_comment_insert($comment) { // Send a push notification if a new comment is created by an anonymous user // and it is not yet published. if ($comment->status == 0 && $comment->is_anonymous == TRUE) { global $base_url; $vars = array( 'title' => 'New comment on ' . variable_get('site_name') . '!', 'message' => 'Subject: ' . $comment->subject, 'url' => $base_url . '/node/' . $comment->nid . '#comment-' . $comment->cid, 'device' => 'Nexus' ); $pushable = pushover_get_pushable($vars); if ($pushable) { $pushed = $pushable->send(); if ($pushed == false) { watchdog('Pushover', t('A comment has been created but there was an error pushing that over.'), array(), WATCHDOG_ERROR, NULL); } } } } 

Здесь я проверяю, является ли комментатор анонимным и имеет статус 0 (чтобы быть в безопасности). Если это так, я создаю массив параметров для моей вспомогательной функции с некоторой информацией о сайте и комментирую и использую метод send() для отправки уведомления. Вы заметите, что я ограничил это для устройства Nexus .

В конце я проверяю, прошло ли уведомление успешно (метод send() возвращает false, если служба Pushover не возвращает код состояния успеха 1 Если что-то пошло не так, я быстро записываю его в сторожевой таймер).

Так что теперь, если анонимный пользователь пишет комментарий, я получаю push-уведомление с названием сайта, темой комментария и URL. Острота.

Теперь давайте обратимся ко второму примеру, в котором я внедряю экстренное уведомление, если мой пользователь-администратор входит на сайт. Если это не я, я буду знать, что что-то не так, и, вероятно, меня взломали. Я делаю это внутри реализации hook_user_login () :

 /** * Implements hook_user_login(). */ function pushover_user_login(&$edit, $account) { // If the admin user logs in, send a push notification. if ($account->uid == 1) { $whitelist = array('1.1.1.1'); if (!in_array(ip_address(), $whitelist)) { global $base_url; $vars = array( 'title' => 'Admin user sign in', 'message' => 'Admin user has logged into this site: ' . variable_get('site_name') . '!', 'url' => $base_url, ); $pushable = pushover_get_pushable($vars); if ($pushable) { $pushable->setPriority(2); $pushable->setRetry(30); $pushable->setExpire(60); $pushed = $pushable->send(); if ($pushed == false) { watchdog('Pushover', t('An admin user has logged into the site but there was an error pushing this over.'), array(), WATCHDOG_ERROR, NULL); } } } } } 

Здесь я сначала проверяю, входит ли пользователь в систему с идентификатором 1 (основной администратор). Затем я создаю массив с белыми IP-адресами для проверки входа пользователя. Я не хочу получать уведомления, если я вхожу из дома или из офиса ( 1.1.1.1 — это просто пример IP-адреса).

Затем, как и прежде, я получаю свой объект с обычными переменными (на этот раз без устройства, я хочу, чтобы это распространялось на все мои устройства). Вдобавок к этому я установил приоритет 2 (пометив его как экстренное уведомление), значение повторной попытки 30 секунд и значение истечения 60 секунд. Последние 2 в сочетании с приоритетом делают так, чтобы, если мой телефон не получил подтверждения, уведомление отправлялось повторно каждые 30 секунд в течение общей продолжительности 60 секунд. Для получения дополнительной информации о возможных параметрах Pushover убедитесь, что вы ознакомились с их документами по API .

И вот оно. Теперь я получу экстренное уведомление, если кто-то войдет в мою учетную запись администратора. Конечно, не очень хорошо, если многие люди могут войти в систему с этой учетной записью, но вы понимаете.

Вывод

В этом уроке я показал вам, как вы можете использовать Pushover со своего сайта Drupal для отправки уведомлений на ваш телефон, когда происходят определенные события. Я рассмотрел 2 примера, но я уверен, что вы можете найти больше. Я также хотел бы упомянуть, что я нашел модуль Drupal contrib под названием Pushover, который использует правила для отправки уведомлений Pushover. Я действительно не использовал его, но обязательно проверьте его, если вы хотите использовать Pushover, и ваш сайт уже использует модуль Rules. Или, вы знаете, вы ненавидите писать код.