Перейти к содержанию
Fire Monkey от А до Я
  • 0

PushEvents без Provider


krapotkin

Вопрос

Первый раз столкнулся с необходимостью слать push

Пытаюсь понять логику работы.

 

У меня есть back-end сервер на php и мобильное приложение Android на DX

Мне нужно сделать оповещение конкретного пользователя о нужных ему изменениях в БД на сервере. Желательно даже когда программа в бакграунде.

Я сделал тестовый пример PushEvents + ParseProvider. Все чудесно, но

 

Поправьте меня, plz, если я неправильно понимаю концепцию

1) при запуске приложения зарегистрироваться в GCM и получить от него некий токен

2) переслать этот токен своему бак-енд серверу

3) в нужный момент сервер вызывает GCM сервис и просит передать сообщение конкретному клиенту с вот таким токеном

так?

 

Но всякие push события реализованы в TPushEvents, а реквизиты GCM - в провайдере TParseProvider.

Нужен ли мне вообще ParseProvider если я все сообщения шлю от своего сервера прямо в GCM не используя parse??

По идее, мне нужен собственный провайдер??

что для этого нужно сделать?

Изменено пользователем krapotkin
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Alex, а Вы не могли бы ссылку на статью отправить, а то не могу найти ее на сервере, может просто не понимаю какую статью искать

 

http://alexbirukov.ru/?go=all/php-server-dlya-rassylki-push-na-android-i-ios/

Ссылка на комментарий
  • 0
  • Модераторы

 

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

Изменено пользователем ZuBy
Ссылка на комментарий
  • 0

Отличные исправления. Если не сложно, сделайте PullRequest на Гитхабе и я внесу изменения. Сам сервер в свободном доступе и любые дополнения приветствуются.

Ссылка на комментарий
  • 0
  • Модераторы

Отличные исправления. Если не сложно, сделайте PullRequest на Гитхабе и я внесу изменения. Сам сервер в свободном доступе и любые дополнения приветствуются.

не сложно, но я незнаю как это сделать. можете внести изменения без PullRequest'a?

нет аккаунта на Гитхабе

Ссылка на комментарий
  • 0
8 часов назад, Тимур Абилов сказал:

Здравствуйте.

Не могли бы выложить простейший проект на дельфи для приема push-уведомлений?

Это совсем другая тема, делайте свой новый топик.

Ссылка на комментарий
  • 0

Странная проблема: при подключении по wi-fi регистрация токена выдает пустую строку. Как только переключаюсь на GSM, начинает работать.

Но, когда приходит уведомление (кстати, по wi-fi приходит), строка 

MessageText := ANotification.DataObject.GetValue('message').Value;

выдает:

Project GuardMobile.apk raised exception class Segmentation fault (11).

Кто-нибудь еще сталкивался с таким? Это Delphi 10 Seattle, если что.

Изменено пользователем Тимур Абилов
Ссылка на комментарий
  • 0
  • Модераторы
38 минут назад, Тимур Абилов сказал:

Странная проблема: при подключении по wi-fi регистрация токена выдает пустую строку. Как только переключаюсь на GSM, начинает работать.

код показывайте, к wi-fi или мобильным данным нет привязки

39 минут назад, Тимур Абилов сказал:

Project GuardMobile.apk raised exception class Segmentation fault (11).

проверьте существует ли вообще ANotification, DataObject, и собственно message

Ссылка на комментарий
  • 0

Код взят полностью из статьи. Также как и манифест. Push отправляю с гуглоконсоли. ANotification существует, ошибка при обращении к getDataObject. При этом объекты PushService и PushServiceConnection тоже на месте и

PushServiceConnection.active==true 

насчет wi-fi - подозреваю, мой рутер не пускает запрос с телефона во внешнюю сеть, но какой порт может быть при этом использован, понятия не имею.

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...