• 0
Авторизация  
Alexander616

Push сообщения и Indy Tcp

Вопросы

Добрый день. У меня появилась проблема в проекте после добавления Push сообщений.
Задача состоит в следующем: нужно сделать так, чтобы можно было с одного телефона послать запрос на сервер с текстом уведомления и сервер отправил бы уведомление с этим текстом второму телефону. На оба телефона ставлю одну и туже версию тестовой программы, подключаюсь сначала одним телефоном, отправляю запрос на уведомление, всё отлично, на второй телефон оно приходит моментально. Со второго на первый также всё доходит. Проблема появляется когда к серверу подсоединяются 2 (больше не пробовал) клиента одновременно. первое сообщение доходит через несколько секунд, НО, после него сколько бы не тыкал на отправку всё молчком и через некоторое время клиент отсоединяется от сервера и выдаёт ошибку "Not connected", также на сервере заходит в обработку ивента "Disconnect". 
Для связи Client/Server использую IndyTcp. 
Систему Push сообщений собираю (в основном) по туториалу:


 

Компоненту 
IdSSLIOHandlerSocketOpenSSL1 порт прописываю 9090
IdTCPServer1 - 8989

З.ы. для первого пробовал без порта, та же самая проблема.

 

Код отправки уведомления с сервера. На данный момент после получения команды на отправку уведомления сервер посылает всем клиентам. 

procedure TForm1.SendNotification(Txt: string);
var
  AJson: TJSONObject;
  AJsonData: TJSONObject;
  ARegisterIds:TJSONArray;
  AData, AResponseContent:TSTringStream;
  I:Integer;
  const
  DevTokens :array[1..2] of string = ('DeviceToken1',
                                        'DeviceToken2');
begin
  ARegisterIds := TJSONArray.Create;
  AJson := TJSONObject.Create;
  try
    for I := Low(DevTokens) to High(DevTokens) do
    begin
      ARegisterIds.Add(DevTokens[I]);
    end;

    AJsonData := TJSONObject.Create;
    AJsonData.AddPair('id', ID.ToString());
    ID := ID + 1;

    AJsonData.AddPair('message', Txt);

    AJson.AddPair('registration_ids', ARegisterIds);
    AJson.AddPair('data', AJsonData);

    IdHTTP1.Request.ContentType := 'application/json';

    IdHTTP1.Request.CustomHeaders.AddValue('Authorization', 'key=AIzaSyDGHrZIQSx8execZvc6E-YYKFsGBvSoSGs');
    AData := TStringStream.Create(AJson.ToString, TEncoding.UTF8);
    AData.Position := 0;
    AResponseContent := TStringStream.Create('', TEncoding.UTF8);

    IdHTTP1.Post('https://android.googleapis.com/gcm/send', AData, AResponseContent);
    AResponseContent.Position := 0;
    mmo1.Lines.Add(AResponseContent.DataString);
  finally
  end;
end; 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 ответа на этот вопрос

  • 0

Эх давно это было, я не использовал SSL...не нужен он.

Код не глючил вроде.

procedure TForm1.Button1Click(Sender: TObject);
var
  vIn, vOut: TStringStream;
begin
  Memo1.Clear;
  try
    vIn := TStringStream.Create(
      '{"registration_ids":["' + Edit1.Text +
      '"],"data":{"title":"'+ 'Тест234' +'","message":"' + Edit2.Text + '"}}', TEncoding.UTF8
    );
    vOut := TStringStream.Create('',TEncoding.UTF8);
    pIdHTTP.Post('https://android.googleapis.com/gcm/send', vIn, vOut);
    Memo1.Lines.Add(vOut.DataString);
    Memo1.Lines.Add(vIn.DataString);
    if Pos('"success":1',vOut.DataString) > 0 then ShowMessage('Сообщение отправлено успешно!');
  finally
    vIn.Free;
    vOut.Free;
  end;
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  pIdHTTP.Free;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  ID := 1;
  pIdHTTP := TIdHttp.Create(Self);
  pIdHTTP.Request.ContentType := 'application/json';
  pIdHTTP.Request.CustomHeaders.AddValue('Authorization',CKey);
end;

еще можно и заголовок писать так http://fire-monkey.ru/topic/1659-gcm-push-soobscheniia-android-kak-dobavit-zagolovok/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Видимо ссл конфликтовал с tcp. Очень странно, раньше не было такой проблемы. Большое спасибо за помощь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Похожий контент

    • От FREEFAR
      Всем доброго времени суток. 
      Казалось бы. Во время разработки и перед тем как подписали приложение сертификатом Distribution, пуши приходили норм. Но после того как прошли аудит Apple пуши куда-то пропали. FCM возвращал ошибку InvalidRegistration.
      Оказалось все достаточно просто. На сервере с которого мы отправляем пуш, В php скрипте, который отправляет пуши надо выставить
      sandbox = false
      Ура! Всем удачи)
    • От Savage
      Здравствуйте!
      Второй день не получается поменять стандартный звук в 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?
      Может есть готовое решение?
    • От Rusland
      Приложение свернуто или закрыто.
      Отправляю один пуш, на телефоне в шторке появляется уведомление.
      Отправляю еще один, появляется второе уведомление и так далее. Сколько пушей, столько и уведомлений.
      Как сделать чтобы все уведомления собирались в одном уведомлении в шторке? (как делают telegram, whatsapp и т. п.)
    • От Евгений Корепов
      Наткнулся тут на изящную штуку для приложения с PUSH уведомлениями на Android и Ios. Один объект, все сам делает.
      Внедрил в одно боевое приложение с 100+ тысячами установок, полет нормальный.
      Описание тут https://delphiworlds.com/2017/04/firebase-cloud-messaging-android-ios/
      Исходный код с примером на гитхабе https://github.com/DelphiWorlds/PushClient
      Использование максимально простое:
      uses DW.PushClient; .... private FPushClient: TPushClient; procedure PushClientChangeHandler(Sender: TObject; AChange: TPushService.TChanges); procedure PushClientReceiveNotificationHandler(Sender: TObject; const ANotification: TPushServiceNotification); .... procedure TFormMain.InitPushService; begin FPushClient := TPushClient.Create; FPushClient.GCMAppID := ConstGCMAppID; FPushClient.ServerKey := ''; FPushClient.BundleID := ''; FPushClient.UseSandbox := Debug; // Change this to False for production use! FPushClient.OnChange := PushClientChangeHandler; FPushClient.OnReceiveNotification := PushClientReceiveNotificationHandler; try FPushClient.Active := True; except SendError('FPushClient.Active Exception'); end; end; procedure TFormMain.PushClientChangeHandler(Sender: TObject; AChange: TPushService.TChanges); begin if TPushService.TChange.DeviceToken in AChange then begin HDevicePushParams.DeviceID:=FPushClient.DeviceID; HDevicePushParams.DeviceToken:=FPushClient.DeviceToken; GetHTTP(CommandRegisterFCM); // Memo1.Lines.Add('DeviceID = ' + FPushClient.DeviceID); // Memo1.Lines.Add('DeviceToken = ' + FPushClient.DeviceToken); end; end; procedure TFormMain.PushClientReceiveNotificationHandler(Sender: TObject; const ANotification: TPushServiceNotification); begin // ShowMessage(ANotification.DataObject.ToString... end; Правда руки не дошли разобраться для чего ему 
        FPushClient.ServerKey := '';
        FPushClient.BundleID := '';
      Но и без этого работает.
       
    • От Равиль Зарипов (ZuBy)
      Ссылка: http://blog.rzaripov.kz/2017/02/firebase-android-ios-2.html
      Автор: Зарипов Равиль @ZuBy
      Описание: Настройка пуш уведомлении через сервис Firebase для ANDROID и IOS [Часть 2]
      В предыдущей  части , я рассказывал как сделать настройку пуш уведомления в консоли Firebase, в этой я покажу код на Delphi и серверную часть на PHP
      https://github.com/rzaripov1990/PUSHTestFCM
    • От Равиль Зарипов (ZuBy)
      Ссылка: http://blog.rzaripov.kz/2017/02/firebase-android-ios.html
      Автор: Зарипов Равиль @ZuBy
      Описание: Настройка пуш уведомлении через сервис Firebase для ANDROID и IOS
    • От dmokrushin123
      На устройство с IOS сообщения приходят и через Kinvey и через FCM (Firebase Cloud Messaging).
      На Android возвращается Token, сами уведомления НЕ приходят. 
       
       
       
       
       
       
    • От Кривяков Виталий
      Добрый день!
      Возникла необходимость отправлять уведомления в стороннюю программу. Да не абы как через сертификаты, о чем много тут статей, а через токены.

      Немного руководства от яблока.
      Нашел библиотеку для работы с JWT
      https://github.com/paolo-rossi/delphi-jose-jwt
      Но вот как подписывать токен алгоритмом  ECDSA и какие сертификаты использовать не могу понять. Кто занимался похожем вопросом? Поделитесь знаниями.
      Спасибо
    • От Равиль Зарипов (ZuBy)
      Доброго дня!
      Решил я побороть проблемку single-line в нотификациях (в частности push, т.к. локальные можно выводить в несколько строк)
      Почитал в интернете, набрел на такие статьи 
      https://mobilefirstplatform.ibmcloud.com/blog/2015/11/24/multi-line-gcm-push-notifications/ https://github.com/vivinkrishnan/multi-line-push/blob/master/MultiLineNotifications/apps/MultiLineNotifications/android/native/src/com/MultiLineNotifications/GCMIntentService.java судя по ним нужно просто подменить библиотеку com.embarcadero.gcm.notifications.GCMIntentService на измененную как статье выше
      Вроде плёвое дело, но где найти эту библиотеку и чем скомпилировать исходник?
      Если у кого есть познания в этой области, подскажите в какую сторону рыть. Нам ведь всем такое пригодится
       

      fmx.zip (Seattle, Berlin)                                                                     LocalMultiline.zip (Berlin)
      https://github.com/rzaripov1990/Multiline-Push-and-Local-Notifications
  • Последние посетители   0 пользователей онлайн

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