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

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


XXXXXX

Вопрос

Добрый день. У меня появилась проблема в проекте после добавления 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; 
Ссылка на комментарий

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

  • 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/

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

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

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

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

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

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

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

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

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

×
×
  • Создать...