afors Опубликовано 19 июня, 2017 Опубликовано 19 июня, 2017 Всем привет! Пытаюсь отправлять PUSH через компонент IdHTTP //... //Var ID: Integer; //... Procedure SentPush (ServerKey, DeviceToken: String); // Uses System.JSON var AJson: TJSONObject; AJsonData: TJSONObject; ARegisterIds:TJSONArray; AData, AResponseContent:TSTringStream; Begin ARegisterIds := TJSONArray.Create; AJson := TJSONObject.Create; try ARegisterIds.Add(DeviceToken); AJsonData := TJSONObject.Create; AJsonData.AddPair('id', ID.ToString()); ID := ID + 1; AJsonData.AddPair('message', 'Привет'); AJson.AddPair('registration_ids', ARegisterIds); AJson.AddPair('data', AJsonData); fMain.IdHTTP1.Request.ContentType := 'application/json'; fMain.IdHTTP1.Request.CustomHeaders.AddValue('Authorization', 'key=' + ServerKey); AData := TStringStream.Create(AJson.ToString, TEncoding.UTF8); AData.Position := 0; AResponseContent := TStringStream.Create('', TEncoding.UTF8); fMain.IdHTTP1.Post('https://android.googleapis.com/gcm/send', AData, AResponseContent); AResponseContent.Position := 0; fMain.Memo1.Lines.Add('https://android.googleapis.com/gcm/send' + AJson.ToString); fMain.Memo1.Lines.Add(AResponseContent.DataString); finally end; End; Пример взят с На Windows работает, Push отправляются и приходят. Тот же самый код на Android не работает, выдает ошибку: Could not load SSL library. На форумах советуют обновить Indy, подсунуть недостающую библиотеку... Кто подскажет чем это лечится? (Delphi 10.1 Berlin Upd2. Android 6) Цитата
0 Модераторы Andrey Efimov Опубликовано 19 июня, 2017 Модераторы Опубликовано 19 июня, 2017 Уже давно замечены проблемы Indy с SSL на Android, вроде как, даже сама Idera рекомендовала (пруф не дам, т.к. не помню где видел это) использовать новые TNetHTTPClient и TNetHTTPRequest. Попробуйте использовать эти компоненты, с SSL работать умеют и асинхронные запросы умеют (т.е. не придётся создавать отдельный поток, достаточно изменить свойство компонента), и ещё куча всего. Основная справка с примерами тут: Using an HTTP Client Равиль Зарипов (ZuBy) 1 Цитата
0 afors Опубликовано 19 июня, 2017 Автор Опубликовано 19 июня, 2017 Спасибо, буду знакомиться с TNetHTTPClient и TNetHTTPRequest. А пока изменил HTTPS на HTTP: fMain.IdHTTP1.Post('http://android.googleapis.com/gcm/send', AData, AResponseContent); На Android 6 заработало. Только не знаю чем это грозит... Цитата
0 krapotkin Опубликовано 19 июня, 2017 Опубликовано 19 июня, 2017 грозит тем что httpS работать не будет Цитата
Вопрос
afors
Всем привет!
Пытаюсь отправлять PUSH через компонент IdHTTP
//... //Var ID: Integer; //... Procedure SentPush (ServerKey, DeviceToken: String); // Uses System.JSON var AJson: TJSONObject; AJsonData: TJSONObject; ARegisterIds:TJSONArray; AData, AResponseContent:TSTringStream; Begin ARegisterIds := TJSONArray.Create; AJson := TJSONObject.Create; try ARegisterIds.Add(DeviceToken); AJsonData := TJSONObject.Create; AJsonData.AddPair('id', ID.ToString()); ID := ID + 1; AJsonData.AddPair('message', 'Привет'); AJson.AddPair('registration_ids', ARegisterIds); AJson.AddPair('data', AJsonData); fMain.IdHTTP1.Request.ContentType := 'application/json'; fMain.IdHTTP1.Request.CustomHeaders.AddValue('Authorization', 'key=' + ServerKey); AData := TStringStream.Create(AJson.ToString, TEncoding.UTF8); AData.Position := 0; AResponseContent := TStringStream.Create('', TEncoding.UTF8); fMain.IdHTTP1.Post('https://android.googleapis.com/gcm/send', AData, AResponseContent); AResponseContent.Position := 0; fMain.Memo1.Lines.Add('https://android.googleapis.com/gcm/send' + AJson.ToString); fMain.Memo1.Lines.Add(AResponseContent.DataString); finally end; End;Пример взят с
На Windows работает, Push отправляются и приходят.
Тот же самый код на Android не работает, выдает ошибку: Could not load SSL library.
На форумах советуют обновить Indy, подсунуть недостающую библиотеку...
Кто подскажет чем это лечится?
(Delphi 10.1 Berlin Upd2. Android 6)
3 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.