krapotkin Опубликовано 28 сентября, 2015 Опубликовано 28 сентября, 2015 (изменено) Первый раз столкнулся с необходимостью слать push Пытаюсь понять логику работы. У меня есть back-end сервер на php и мобильное приложение Android на DX Мне нужно сделать оповещение конкретного пользователя о нужных ему изменениях в БД на сервере. Желательно даже когда программа в бакграунде. Я сделал тестовый пример PushEvents + ParseProvider. Все чудесно, но Поправьте меня, plz, если я неправильно понимаю концепцию 1) при запуске приложения зарегистрироваться в GCM и получить от него некий токен 2) переслать этот токен своему бак-енд серверу 3) в нужный момент сервер вызывает GCM сервис и просит передать сообщение конкретному клиенту с вот таким токеном так? Но всякие push события реализованы в TPushEvents, а реквизиты GCM - в провайдере TParseProvider. Нужен ли мне вообще ParseProvider если я все сообщения шлю от своего сервера прямо в GCM не используя parse?? По идее, мне нужен собственный провайдер?? что для этого нужно сделать? Изменено 28 сентября, 2015 пользователем krapotkin Цитата
0 Rusland Опубликовано 26 февраля, 2016 Опубликовано 26 февраля, 2016 Alex, а Вы не могли бы ссылку на статью отправить, а то не могу найти ее на сервере, может просто не понимаю какую статью искать http://alexbirukov.ru/?go=all/php-server-dlya-rassylki-push-na-android-i-ios/ Цитата
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 26 февраля, 2016 Модераторы Опубликовано 26 февраля, 2016 (изменено) Alex, а Вы не могли бы ссылку на статью отправить, а то не могу найти ее на сервере, может просто не понимаю какую статью искать 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 Изменено 26 февраля, 2016 пользователем ZuBy Rusland и enatechno 2 Цитата
0 alexbirukov Опубликовано 27 февраля, 2016 Опубликовано 27 февраля, 2016 Отличные исправления. Если не сложно, сделайте PullRequest на Гитхабе и я внесу изменения. Сам сервер в свободном доступе и любые дополнения приветствуются. Цитата
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 6 марта, 2016 Модераторы Опубликовано 6 марта, 2016 Отличные исправления. Если не сложно, сделайте PullRequest на Гитхабе и я внесу изменения. Сам сервер в свободном доступе и любые дополнения приветствуются. не сложно, но я незнаю как это сделать. можете внести изменения без PullRequest'a? нет аккаунта на Гитхабе Цитата
0 Тимур Абилов Опубликовано 16 января, 2017 Опубликовано 16 января, 2017 Здравствуйте. Не могли бы выложить простейший проект на дельфи для приема push-уведомлений? Цитата
0 Vitaldj Опубликовано 17 января, 2017 Опубликовано 17 января, 2017 8 часов назад, Тимур Абилов сказал: Здравствуйте. Не могли бы выложить простейший проект на дельфи для приема push-уведомлений? Это совсем другая тема, делайте свой новый топик. Цитата
0 Тимур Абилов Опубликовано 5 марта, 2017 Опубликовано 5 марта, 2017 (изменено) Странная проблема: при подключении по wi-fi регистрация токена выдает пустую строку. Как только переключаюсь на GSM, начинает работать. Но, когда приходит уведомление (кстати, по wi-fi приходит), строка MessageText := ANotification.DataObject.GetValue('message').Value; выдает: Project GuardMobile.apk raised exception class Segmentation fault (11). Кто-нибудь еще сталкивался с таким? Это Delphi 10 Seattle, если что. Изменено 5 марта, 2017 пользователем Тимур Абилов Цитата
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 5 марта, 2017 Модераторы Опубликовано 5 марта, 2017 38 минут назад, Тимур Абилов сказал: Странная проблема: при подключении по wi-fi регистрация токена выдает пустую строку. Как только переключаюсь на GSM, начинает работать. код показывайте, к wi-fi или мобильным данным нет привязки 39 минут назад, Тимур Абилов сказал: Project GuardMobile.apk raised exception class Segmentation fault (11). проверьте существует ли вообще ANotification, DataObject, и собственно message Цитата
0 Тимур Абилов Опубликовано 6 марта, 2017 Опубликовано 6 марта, 2017 Код взят полностью из статьи. Также как и манифест. Push отправляю с гуглоконсоли. ANotification существует, ошибка при обращении к getDataObject. При этом объекты PushService и PushServiceConnection тоже на месте и PushServiceConnection.active==true насчет wi-fi - подозреваю, мой рутер не пускает запрос с телефона во внешнюю сеть, но какой порт может быть при этом использован, понятия не имею. Цитата
Вопрос
krapotkin
Первый раз столкнулся с необходимостью слать push
Пытаюсь понять логику работы.
У меня есть back-end сервер на php и мобильное приложение Android на DX
Мне нужно сделать оповещение конкретного пользователя о нужных ему изменениях в БД на сервере. Желательно даже когда программа в бакграунде.
Я сделал тестовый пример PushEvents + ParseProvider. Все чудесно, но
Поправьте меня, plz, если я неправильно понимаю концепцию
1) при запуске приложения зарегистрироваться в GCM и получить от него некий токен
2) переслать этот токен своему бак-енд серверу
3) в нужный момент сервер вызывает GCM сервис и просит передать сообщение конкретному клиенту с вот таким токеном
так?
Но всякие push события реализованы в TPushEvents, а реквизиты GCM - в провайдере TParseProvider.
Нужен ли мне вообще ParseProvider если я все сообщения шлю от своего сервера прямо в GCM не используя parse??
По идее, мне нужен собственный провайдер??
что для этого нужно сделать?
Изменено пользователем krapotkin34 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.