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

Уведомление о прочитанности PUSH уведомления


FeLDMARShaL

Вопрос

Требуется как то получать информацию была ли PUSH доставлена на телефон или нет. В данном случае не важно прочитал он его или просто смахнул не обратив внимание.

Сейчас это реализовано таким образом: мы у себя на сервере храним все отправленные PUSH и когда приложение запущено (или запускается) оно обращается к этому серверу скачивает все непрочитанные сообщения (отображает их клиенту в виде сообщения программы) и параллельно у этих сообщений выставляется "флаг прочитанности" у нас на сервере. В моем реализации мы гарантируем что клиент увидел и прочитал PUSH. А если нам достаточно будет того что выставить флаг в момент когда PUSH попал на телефон, есть способ как то узнать был ли PUSH доставлен на устройстве или нет если мы используем FMX

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

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

  • 0

Интересует уведомления о прочитанности как GMS так и APN (ну или хотябы одного из них если у второго невозможно)

Я еще не перешел на FGM (Firebase) может у них есть такая штука как прочитанность сообщения?

Немного о системе отправки сообщения: рассылаю при помощи php скриптов, от сообщений остается результат отправки, в случае андроид это примерно такое: "0:1491567250774599%8983564af9fd7ecd" в случае iOS это "OK (315)" - вроде бы больше в ответе ничего нету (т.е. факт успешной отправки я фиксирую) а вот факт что пуш дошел до телефона - с этим проблема.

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

Провел тест, от гугла получаю вот такое сообщения: {"multicast_id":8869976454529784179,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1491571402569208%8983564af9fd7ecd"}]},

в нем нет информации о том было или нет доставлено до клиента 9да это и понятно, не факт что сообщение придет в момент отправки

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

Вроде это возможно при использовании XMPP Protocol, сам не пробовал. Подробнее тут https://firebase.google.com/docs/cloud-messaging/xmpp-server-ref

Если получится разобраться, поделитесь решением с сообществом.

P.S. Вот есть хорошая штука для этого https://github.com/sourc7/FCMStream

Цитата

FCMStream

FCMStream является сервер приложений для отправки и получения сообщений от Firebase Cloud Messaging (ТСМ) с использованием XMPP протокола.

Применение

FCMStream будет течь сервер Firebase Облака сообщений (ТСМ) через протокол XMPP для входящих сообщений и регистрирует функцию обратного вызова для обработки сообщений и подтверждений, когда сообщения прибывают.

вопросы

Сервер Firebase Cloud Messaging иногда задерживала вопрос о доставки сообщений на сервер приложений или клиентских приложений, так что сообщения будут получены на конечного пользователя после того, как в среднем 2 минуты.

 

Ссылка на комментарий
  • 0
23 часа назад, FeLDMARShaL сказал:

надо будет посмотреть, но сначала придется сделать переход на фсм. если получится обязательно отпишусь

Вы уже перешли на FCM, просто не знаете об этом. GCM давно уже нет и пуши работают через FCM.

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

Для получения инфо о доставке пуша, надо использовать XMPP

Вот гугломануал Firebase Cloud Messaging XMPP Protocol

ПО для отправки сообщений (комп, сервер и т.д.)     <--   обмен по протоколу XMPP   --->      Сервер гугла FCM  <------->  Андроид устройство

использовал IdTCPClient

 

  Host  fcm-xmpp.googleapis.com
  Port  5236

IdTCPClient.Connect

вот сценарий

>>> - отправка на FCM 

<<< - ответ от FCM

>>>  здороваемся  (IdTCPClient1.IOHandler.WriteLn )
<stream:stream to="gcm.googleapis.com" version="1.0" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams">

<<<  (IdTCPClient1.IOHandler.Readln)
<stream:stream from="gcm.googleapis.com" id="000000000000" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client">
<<<
<stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-OAUTH2</mechanism><mechanism>X-GOOGLE-TOKEN</mechanism><mechanism>PLAIN</mechanism></mechanisms></stream:features>

>>> логинимся
<auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">Base64Encode(sender_id@gcm.googleapis.com+ApiKey)</auth>

<<<
<success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>

>>> отправляем обязательный пакет
<stream:stream to="gcm.googleapis.com" version="1.0" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams">

<<<
<stream:stream from="gcm.googleapis.com" id="000000000000" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client">
<<<
<stream:features><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></stream:features>

>>> отправляем обязательный пакет
<iq type="set"> <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"></bind></iq>

<<<
<iq type="result"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>sender_id@gcm.googleapis.com/000000</jid></bind></iq>
 
>>> отправляем сообщение
<message><gcm xmlns="google:mobile:data">{"message_id":"20","delivery_receipt_requested":true,"to":"DeviceToken","data":{"title":"Message title","message":"Message text"}}</gcm></message>

<<<  получаем подтверждение, что гуглосервер принл сообщение от нас
<message><data:gcm xmlns:data="google:mobile:data">{"message_type":"ack","from":"DeviceToken","message_id":"20"}</data:gcm></message>

<<< получаем подтверждение, что сообщение доставлено на андроид-устройство
<message to="sender_id@gcm.googleapis.com" from="devices@gcm.googleapis.com" type="normal"><gcm xmlns="google:mobile:data">{"data":{"message_status":"MESSAGE_SENT_TO_DEVICE","device_registration_id":"DeviceToken","message_sent_timestamp":"1524141512313","original_message_id":"20"},"time_to_live":0,"from":"gcm.googleapis.com","message_id":"dr2:20","message_type":"receipt","category":"com.pushTest"}</gcm></message>

Ключ АПИ и идентификатор отправителя надо брать в консоли Firebase https://console.firebase.google.com/u/0/project

Подробно описано тут http://blog.rzaripov.kz/2017/02/firebase-android-ios.html

 

2018-04-19_170205.png

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

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

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

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

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

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

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

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

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

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

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