http://alexbirukov.ru/?go=all/php-server-dlya-rassylki-push-na-android-i-ios/
для основы статья хорошая, но она требует доработки в плане добавления заголовка для обоих платформ.
если в android'е это делается дописыванием строчки
$message = new \push\CodeMonkeysRu\GCM\Message($tokens, array("title" => $title, "message" => $text));
то в классе для IOS нужно пару строк добавить в ApnsPHP/Message.php
переменка новая в классе class ApnsPHP_Message
// ZuBy ===
protected $_sTitle;
// === ZuBy
и два метода
// ZuBy ===
public function setTitle($sText)
{
$this->_sTitle = $sText;
}
public function getTitle()
{
return $this->_sTitle;
}
// === ZuBy
и в мотоде protected function _getPayload() нужно добавить проверку есть ли у нас Title
было примерно так (не помню уже)
$aPayload[self::APPLE_RESERVED_NAMESPACE]['alert'] = (string)$this->_sText;
заменить на такую конструкцию
// ZuBy ===
if (isset($this->_sTitle) and isset($this->_sText)){
if (!empty($this->_sTitle)){
$aPayload[self::APPLE_RESERVED_NAMESPACE]['alert']['title'] = (string)$this->_sTitle;
$aPayload[self::APPLE_RESERVED_NAMESPACE]['alert']['body'] = (string)$this->_sText;
} else {
if (isset($this->_sText)) {
$aPayload[self::APPLE_RESERVED_NAMESPACE]['alert'] = (string)$this->_sText;
}
}
}
// === ZuBy
в методе public function getPayload() нужно заменить следующее
$sJSONPayload = str_replace(
'"'.self::APPLE_RESERVED_NAMESPACE.'":[]',
'"'.self::APPLE_RESERVED_NAMESPACE.'":{}',
$sJSON);
на вот такое
// ZuBy ===
$sJSONPayload = str_replace(
['"'.self::APPLE_RESERVED_NAMESPACE.'":[]', '"alert":[]'],
['"'.self::APPLE_RESERVED_NAMESPACE.'":{}', '"alert":{}'],
$sJSON);
// === ZuBy
и теперь мы можем вызвать наш новый метод
# Устанавливаем параметры отправки сообщения
$message->setSound();
$message->setTitle($title); // ZuBy
$message->setBadge(0);
$message->setText($text);
если не ошибаюсь заголовок появился начиная в IOS 8.2