Отправка Push-уведомлений

Как известно, терминал позволяет отсылать push-уведомления от служб компании MetaQuotes, самого терминала и MQL-программ на мобильное устройство с операционными системами iOS или Android. Для работы этой технологии используется MetaQuotes ID — уникальный идентификатор "пользователя" (см. врезку). MetaQuotes ID выделяется при установке мобильной версии терминала на гаджет пользователя, после чего ID следует указать в настройках терминала, на закладке Уведомления (через запятую можно задать несколько идентификаторов). После этого функционал по отправке push-уведомлений становится доступен для MQL-программ.

На самом деле MetaQuotes ID идентифицирует не пользователя, а конкретную установку мобильного терминала, которых у пользователя может быть несколько, причем ID не связан по-умолчанию с регистрацией в сообществе mql5.com, хотя такую привязку можно указать на сайте. Не следует путать регистрацию пользователя в сообществе и MetaQuotes ID. Для работы с уведомлениями пользователь терминала не обязан логиниться в сообществе.

bool SendNotification(const string text)

Функция SendNotification посылает push-уведомления с заданным текстом во все мобильные терминалы, имеющие MetaQuotes ID из настроек терминала. Длина сообщения  — не более 255 символов.

При успешной отправке уведомления из терминала функция возвращает true, а в случае ошибки — false. Возможные коды ошибок _LastError:

  • 4515 – ERR_NOTIFICATION_SEND_FAILED — проблемы со связью;
  • 4516 – ERR_NOTIFICATION_WRONG_PARAMETER — неверный параметр, например, пустая строка;
  • 4517 – ERR_NOTIFICATION_WRONG_SETTINGS — MetaQuotes ID неверно настроен или отсутствует;
  • 4518 – ERR_NOTIFICATION_TOO_FREQUENT — слишком частые вызовы функции.

При наличии соединения с сервером отправка происходит моментально, и, если устройство пользователя находится в онлайн, сообщение должно достичь адресата, однако гарантировать доставку в общем случае нельзя. Обратного уведомления программы о доставке сообщения не предусмотрено. История push-сообщений на сервере для отложенной доставки не сохраняется.

Для функции установлены ограничения на частоту использования: не более 2-х вызовов в секунду и не более 10 в минуту.

В тестере стратегий функция SendNotification не выполняется.

К книге прилагается простой скрипт NetNotification.mq5, отправляющий тестовое уведомление при наличии правильных настроек.

void OnStart()
{
   const string message = MQLInfoString(MQL_PROGRAM_NAME)
      + " runs on " + AccountInfoString(ACCOUNT_SERVER)
      + " " + (string)AccountInfoInteger(ACCOUNT_LOGIN);
   Print("Sending notification: " + message);
   PRTF(SendNotification(NULL));    // INVALID_PARAMETER(4003)
   PRTF(SendNotification(message)); // NOTIFICATION_WRONG_SETTINGS(4517) или 0 (успех)
}