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

Savage

Пользователи
  • Постов

    12
  • Зарегистрирован

  • Посещение

  • Победитель дней

    3

Весь контент Savage

  1. Для получения инфо о доставке пуша, надо использовать 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
  2. Надо подключать еще android-support-v4.jar Вот мои файлы компиляция "C:\Program Files\Java\jdk1.8.0_60\bin\javac" -source 1.8 -target 1.8 "R:\fmx\com\embarcadero\rtl\notifications\NotificationPublisher.java" -cp "C:\Program Files (x86)\Android\android-sdk\platforms\android-17\android.jar";"C:\Program Files (x86)\Embarcadero\Studio\19.0\lib\android\debug\android-support-v4.jar" -d "r:\fmx" pause сборка echo off setlocal set JAVA="C:\Program Files\Java\jdk1.8.0_60\bin" set ANDROID_PLATFORM="C:\Program Files (x86)\Android\android-sdk\platforms\android-17" set DX_LIB="C:\Program Files (x86)\Android\android-sdk\build-tools\27.0.3\lib" set EMBO_DEX="C:\Program Files (x86)\Embarcadero\Studio\19.0\lib\android\debug\classes.dex" set FMX_JAR="C:\Program Files (x86)\Embarcadero\Studio\19.0\lib\android\debug\fmx.jar" set PROJ_DIR=%CD% set VERBOSE=0 echo. echo COPY ORIGINAL fmx.jar copy %FMX_JAR% %PROJ_DIR%\fmx.jar" echo. echo UPDATE FILE NotificationPublisher.class %JAVA%\jar uf "fmx.jar" "com\embarcadero\rtl\notifications\NotificationPublisher.class" echo. echo CONVERTING FROM jar TO dex mkdir output\dex 2> nul if x%VERBOSE% == x1 SET VERBOSE_FLAG=--verbose call %DX_LIB%\dx.jar --dex %VERBOSE_FLAG% --output=%PROJ_DIR%\output\dex\test_classes.dex --positions=lines %PROJ_DIR%\fmx.jar echo. echo MERGING dex FILES echo.com.android.dx.merge.DexMerger java -cp %DX_LIB%\dx.jar com.android.dx.merge.DexMerger %PROJ_DIR%\output\dex\classes.dex %PROJ_DIR%\output\dex\test_classes.dex %EMBO_DEX% echo. del output\dex\test_classes.dex del output\jar\test_classes.jar rmdir output\jar echo. echo Now we have the end result, which is output\dex\classes.dex pause :Exit endlocal FMX.zip
  3. Добавил многострочность в PUSH-уведомление Надо или нет пересобирать classes.dex точно не скажу. Говорят, что на 10.2.3 не надо Вначале просто подбросить в проект fmx.jar , если изменений нет, то и classes.dex NotificationPublisher.zip
  4. Да проект начал на FMX (Android & IOS) пока еще на стадии прототипа. Из того, с чем пришлось сильно бодаться это свой звук в пушах, но победил. До натягивания дизайна еще не дошел. Пока что пара своих контролов + UDP обмен.
  5. Задачу решил. Вот измененная процедура, ну и добавил вытягивание параметра sound private Builder buildNotification(String msgTitle, String msgText, String msgSound, PendingIntent contentIntent) { int icon = this.mContext.getApplicationContext().getApplicationInfo().icon; Builder mBuilder = new Builder(this.mContext); mBuilder.setSmallIcon(icon); mBuilder.setTicker(msgTitle); mBuilder.setContentTitle(msgTitle); mBuilder.setContentText(msgText); mBuilder.setContentIntent(contentIntent); // savage if (msgSound == "") { mBuilder.setSound(RingtoneManager.getDefaultUri(2)); } else { mBuilder.setSound(Uri.parse("android.resource://" + this.mContext.getPackageName() + "/raw/"+msgSound)); } // return mBuilder; } Звуковой файл надо добавить в Deployment Расположение res/raw/ При формировании push-сообщения имя файла указывается без расширения. К примеру, если звуковой файл был event1.mp3, то в пуше посылаем "sound":"event1" Во вложении патченый файл. Сборка fmx.jar и classes.dex как в этой теме NotificationPublisher.zip
  6. Нашел место, отвечающее за не правильную реализацию звука в NotificationPublisher.java private Builder buildNotification(String msgTitle, String msgText, PendingIntent contentIntent) { int icon = this.mContext.getApplicationContext().getApplicationInfo().icon; Builder mBuilder = new Builder(this.mContext); mBuilder.setSmallIcon(icon); mBuilder.setTicker(msgTitle); mBuilder.setContentTitle(msgTitle); mBuilder.setContentText(msgText); mBuilder.setContentIntent(contentIntent); mBuilder.setSound(RingtoneManager.getDefaultUri(2)); return mBuilder; } Виноват mBuilder.setSound(RingtoneManager.getDefaultUri(2)); буду править и пересобирать fmx.jar
  7. Здравствуйте! Второй день не получается поменять стандартный звук в push-уведомлении на свой. Сделал все по мануалу Гугла, https://developers.google.com/cloud-messaging/http-server-ref Добавил звуковые файлы в проект в нужное место (/res/raw/ ) Пуши летают, но звук стандартный. Такое впечатлеие, что com.embarcadero.gcm.notifications.GCMIntentService просто игнорирует параметр sound Посмотрел при помощи LogCat В конечном итоге, в NotificationService прилетает уже дефолтный звук. 04-05 23:03:34.172 V/NotificationService(1143): enqueueNotificationInternal: pkg=com.savage.pushtest id=4 notification=Notification(pri=0 contentView=null vibrate=null sound=content://settings/system/notification_sound defaults=0x0 flags=0x0 color=0x00000000 vis=PRIVATE) Неужели копать только в сторону правок com.embarcadero.gcm.notifications.GCMIntentService? Может есть готовое решение?
  8. Спасибо за труд! Ковыряю сейчас тему изменения звука в push-уведомлении. И, судя по всему, надо патчить этот же исходник.
×
×
  • Создать...