Статьи

Push-уведомления с Prowl

Push-уведомления на мобильные устройства — это быстрый и недорогой способ отправки коротких сообщений людям, где бы они ни находились — при условии, что их телефон, конечно, включен. Но чтобы отправить уведомление, обычно есть несколько переходов, через которые вы должны пройти; не в последнюю очередь, регистрация устройства, чтобы служба отправки могла ориентироваться на ваш телефон. Это понятно, конечно, поскольку существует огромный потенциал для неправильного использования.

Предположим, однако, что вам нужен быстрый и простой способ отправлять сообщения себе или избранной группе людей без необходимости регистрировать приложение в Apple и играть с различными сертификатами и процессами. Возможно, вам будет интересно узнать о Prowl.

Prowl — это клиент Growl на iOS, популярная на Apple Macs. Вы можете приобрести копию для своего телефона и «подключить» ее ко всевозможным службам и приложениям — и, возможно, самым интригующим образом использовать его API для отправки сообщений из ваших собственных приложений. Вот что мы рассмотрим в этой статье.

Начиная

Первое, что вам нужно, это приложение Prowl на вашем устройстве iOS. Вы можете скачать его из App Store, и на момент написания статьи он стоит $ 2,99.

Далее вам необходимо создать учетную запись на веб-сайте Prowl . После регистрации вы можете создавать ключи API. Ключ API — это идентификатор, используемый для таргетинга на устройства, зарегистрированные в вашей учетной записи. Вы можете настроить несколько ключей API для разных целей, но пока вам нужен только один. Все, что вам нужно знать, это то, что если вы отправите сообщение, ориентированное на один ключ API, вы получите его на всех устройствах, зарегистрированных в вашей учетной записи.

Вам также необходимо связать свою копию Prowl с вашей учетной записью. Откройте приложение на своем устройстве iOS и введите данные для входа, которые вы указали при регистрации на веб-сайте Prowl.

Когда все настроено, давайте проверим это. Войдите на веб-сайт Prowl и перейдите к «Добавить сообщение». Отправьте короткое сообщение, которое вы должны получить на своем устройстве iOS. Вы также можете установить приоритет сообщения, а также URL-адрес, который может быть открыт из уведомления.

Стоит отметить, что существует ряд других способов отправки сообщений. На сайте Prowl перечислены несколько приложений для различных платформ, некоторые из которых являются даже веб-приложениями (например, расширение Prowl Chrome, которое позволяет отправлять текущий URL-адрес на устройство прямо из браузера). Вы также могли заметить, что адрес электронной почты генерируется при добавлении ключа API в виде <api_key> @ api.prowlapp.com . Если вы отправите письмо на этот адрес, вы получите его в виде push-уведомления через Prowl.

Поскольку процесс создания ключа API немного запутан, а формат ключа не удобен для пользователя, Prowl может быть не идеальным выбором для общедоступных приложений. Одно дело попросить кого-то, кто не особо разбирается в технологиях, ввести адрес электронной почты или номер мобильного телефона, но совсем другое — ожидать, что он сгенерирует ключ, а затем скопирует и вставит его в форму. Но если вы отправляете сообщения себе или, возможно, небольшой команде, этот процесс, вероятно, не слишком беспокоит.

Кроме того, API Prowl имеет ограничение скорости — возможно, довольно щедрое — 1000 вызовов в час на IP-адрес. Если вам требуется нечто большее, вы можете создать провайдера (со страницы ключей API) и использовать его в своих вызовах API.

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

Создание ваших собственных приложений

Здесь все становится интереснее — используя API Prowl для отправки сообщений из приложения PHP! Мы собираемся использовать ProwlPHP, библиотеку PHP для взаимодействия с API — но если вы хотите испачкать руки и изучить API самостоятельно, обратитесь к онлайн-документации . Библиотека доступна на GitHub и Composer.

{ "require": { "xenji/ProwlPHP": ">=1.0.2" } } 

Чтобы отправить сообщение, сначала нужно создать экземпляр соединителя Prowl, дополнительно установить ключ поставщика и сообщить соединителю, что вы собираетесь сделать запрос POST:

 $prowl = new Prowl\Connector(); $prowl->setProviderKey('YOUR-PROVIDER-KEY'); $prowl->setIsPostRequest(true); 

Далее вам необходимо добавить фильтр. Вы можете использовать замыкание, чтобы определить фильтр для текста сообщения, например, для очистки пользовательского ввода, ограничения объема текста, добавления дополнительной информации и т. Д.

 $prowl->setFilterCallback(function ($text) { // ... do something return $text; }); 

В качестве альтернативы вы можете создать фильтр более объектно-ориентированным способом, расширив ProwlSecurityPassthroughFilterImpl и реализуя его метод filter() :

 class CustomFilter extends ProwlSecurityPassthroughFilterImpl { public function filter($sContentToFilter) { // Do something return $sContentToFilter; } } $filter = new CustomFilter(); $prowl->setFilter($filter); 

Теперь создайте экземпляр ProwlMessage :

 $msg = new ProwlMessage(); $msg->setApplication('My Prowl Application'); $msg->addApiKey('YOUR-API-KEY'); $msg->setPriority(0); $msg->setEvent($event); $msg->setDescription($description); $msg->setUrl($url); 

В addApiKey() вы указываете получателя; Вы можете вызывать это несколько раз, чтобы отправить сообщение нескольким получателям.

Приоритет, присвоенный setPriority() должен иметь одно из следующих значений:

рыскать-01

Метод setEvent() устанавливает имя события и может содержать до 1024 символов. Кроме того, вы можете установить необязательное описание события с помощью setDescription() и необязательный URL-адрес, который можно открыть непосредственно из уведомления, с помощью setUrl() .

Наконец, чтобы действительно отправить сообщение, вызовите метод push() :

 $response = $prowl->push($msg); 

Регистрация приложений с помощью Prowl

Допустим, вы создали веб-приложение, которое используется значительным числом людей. Что происходит, когда возникает критическая ошибка? Возможно, у вас настроено ведение журнала, и, возможно, сообщения заносятся в файл, базу данных или в какое-либо хранилище данных, например, Redis, но вы сразу же захотите узнать о серьезных ошибках. Что может быть лучше, отправив push-уведомление!

Многие реализации ведения журналов предоставляют возможность определять число авторов журналов и настраивать их для реагирования на различные уровни ошибок. Например, вы можете записывать информационные сообщения в файл, но отправлять критические сообщения по электронной почте. Zend_Log — одна из таких реализаций. Хотя это технически является частью Zend Framework, его также можно использовать автономно, если вы сделаете его зависимости доступными для вашего приложения. Вы можете скачать его с веб-сайта Zend Framework или установить с помощью Composer.

 { "require": { "zendframework/zend-log": "2.2.*", "xenji/ProwlPHP": ">=1.0.2" } } 

Давайте создадим собственную реализацию Zend\Log\AbstractWriter для отправки определенных сообщений журнала через Prowl. Класс должен будет:

  1. есть свойство хранить ключи Prowl
  2. принять ключи через конструктор
  3. реализовать метод doWrite()
 namespace SitePoint\Log\Writer; use Zend\Log; class Prowl extends \Zend\Log\Writer\AbstractWriter { private $apiKeys; public function __construct($apiKeys) { if (is_array($apiKeys)) { $this->apiKeys = $apiKeys; } else { $this->apiKeys = array($apiKeys); } $this->_formatter = new Log\Formatter\Simple('%message%'); } protected function doWrite(array $event) { $event = $this->_formatter->format($event); $prowl = new \Prowl\Connector(); $prowl->setFilterCallback(function ($text) { return $text; }); $prowl->setIsPostRequest(true); $msg = new \Prowl\Message(); $msg->setApplication('My Custom Logger'); $msg->setPriority(2); $msg->setEvent($event); foreach ($this->apiKeys as $key) { $msg->addApiKey($key); } $prowl->push($msg); } 

Несколько заметок о классе:

  • Я установил форматер в конструкторе, который будет просто отправлять сообщение как есть. Вы можете установить его в любой формат или изменить его позже.
  • Я делаю все — например, создание экземпляра коннектора — в doWrite() для простоты. Вы можете расширить конструктор для принятия имени приложения, ключа провайдера и т. Д.
  • Я жестко обозначил приоритет как 2 — аварийный — однако, вы можете сопоставить приоритет журнала с приоритетом Prowl, имея в виду, как мало последних (и вы, вероятно, будете использовать Prowl только для критические сообщения в любом случае).

Наконец, регистрация писателя с помощью регистратора выглядит следующим образом:

 $apiKeys = array( 'YOUR-API-KEY', 'ANOTHER-API-KEY' ); $logger = new Zend\Log\Logger(); $writer = new SitePoint\Log\Writer\Prowl($apiKeys); $writer->addFilter( new Zend\Log\Filter\Priority(Zend\Log\Logger::CRIT) ); $logger->addWriter($writer); - $apiKeys = array( 'YOUR-API-KEY', 'ANOTHER-API-KEY' ); $logger = new Zend\Log\Logger(); $writer = new SitePoint\Log\Writer\Prowl($apiKeys); $writer->addFilter( new Zend\Log\Filter\Priority(Zend\Log\Logger::CRIT) ); $logger->addWriter($writer); 

Вывод

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

  • Многофакторная аутентификация
  • Новые уведомления по электронной почте или комментарии
  • Групповые сообщения
  • Предупреждения безопасности (например, обнаружение вторжения)

Возможно, вы можете думать о большем? Позвольте мне знать в комментариях ниже!