자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Firemonkey restrequest, restclient를 이용한 fcm notification 보내기
2017.09.28 01:58
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 바쁜 와중에도 답변을 주시는 분들께 감사 댓글 필수
-----------------------------------------------------------------------------------------------
안녕하세요.
윈도우즈에서는 Idhttp컴포넌트를 이용하여 아래와 같이 하면 Notification을 보낼 수 있으나 firemonkey에서는 ssl 모듈을 로드하지 못하여 보낼수 없다고 합니다. restclient, restrequest, restresponse 컴포넌트를 이용한 fcm Notification 보내는 방법을 요청합니다.
아래는 오상현님께서 알려주신 윈도우즈용 어플에서 Notification 보내는 소스
unit u_mainserver;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.PushNotification,
System.JSON, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL,
IdSSLOpenSSL, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
dt_message: TEdit;
btn_sendmsg: TButton;
Memo1: TMemo;
IdHTTP1: TIdHTTP;
IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
procedure btn_sendmsgClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn_sendmsgClick(Sender: TObject);
var
AJson : TJSonObject;
AJsonData : TJSonObject;
ARegisterIds : TJsonArray;
AData, AResponseContent : TStringStream;
DeviceToken : String;
begin
ARegisterIds := TJSonArray.Create();
AJSon := TJSonObject.Create();
try
// Set Device token
// sampleapp1 DeviceToken :='APA91bGzF9sjjWusQ2b4pZjMmyTWJnZF6woK6MseaH-d_ocn1p_-sp9086tVgpjBKPhSBwOXsRURyj_lGFCM3Qnioq8eqSO5YfFJzEuYtlJ350dxnvXj1FakhW3NAMfI9VWfi8MV3SiQ';
DeviceToken :='APA91bHvDIljDGdbSp7KFpjDdlT7KMxXXMqUmGE1W0LBZjANYocimlmjRMDJ63Bz_WCL-csofnST14HnM_01aEuGLk57i8weo3FFnU8vk1usC-BWKDP8ysGkcHWoNU3tYgAsGbmrptkX';
// Set the device token
ARegisterIds.Add(DeviceToken);
// Create JSon to Send;
AJSonData := TJSonObject.Create;
AJSonData.AddPair('id','12345678');
AJSonData.AddPair('message',dt_message.Text);
// Add the information to send GCM Server
AJSon.AddPair('registration_ids', ARegisterIds);
AJson.AddPair('data',AJSonData);
// Set the Header.
IdHttp1.Request.ContentType := 'application/json';
// Set the key for server application
IdHttp1.Request.CustomHeaders.AddValue('Authorization','key=AIzaSyDRwARpsug8D5X1MjjF6wyrY3AxhGUliPM');
// Send the Notification
AData := TStringStream.Create(AJSon.ToString);
Adata.Position := 0;
AResponseContent := TStringStream.Create;
IdHttp1.Post('https://fcm.googleapis.com/fcm/send',AData,AResponseContent);
finally
Memo1.Lines.Add(AJSon.ToString);
Memo1.Lines.Add(AResponseContent.DataString);
end;
end;
end.
감사합니다.
Firemonkey restrequest, restclient를 이용한 fcm notification 보내기
2017.09.28 01:58
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 바쁜 와중에도 답변을 주시는 분들께 감사 댓글 필수
-----------------------------------------------------------------------------------------------
안녕하세요.
윈도우즈에서는 Idhttp컴포넌트를 이용하여 아래와 같이 하면 Notification을 보낼 수 있으나 firemonkey에서는 ssl 모듈을 로드하지 못하여 보낼수 없다고 합니다. restclient, restrequest, restresponse 컴포넌트를 이용한 fcm Notification 보내는 방법을 요청합니다.
아래는 오상현님께서 알려주신 윈도우즈용 어플에서 Notification 보내는 소스
unit u_mainserver;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.PushNotification,
System.JSON, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL,
IdSSLOpenSSL, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
dt_message: TEdit;
btn_sendmsg: TButton;
Memo1: TMemo;
IdHTTP1: TIdHTTP;
IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
procedure btn_sendmsgClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn_sendmsgClick(Sender: TObject);
var
AJson : TJSonObject;
AJsonData : TJSonObject;
ARegisterIds : TJsonArray;
AData, AResponseContent : TStringStream;
DeviceToken : String;
begin
ARegisterIds := TJSonArray.Create();
AJSon := TJSonObject.Create();
try
// Set Device token
// sampleapp1 DeviceToken :='APA91bGzF9sjjWusQ2b4pZjMmyTWJnZF6woK6MseaH-d_ocn1p_-sp9086tVgpjBKPhSBwOXsRURyj_lGFCM3Qnioq8eqSO5YfFJzEuYtlJ350dxnvXj1FakhW3NAMfI9VWfi8MV3SiQ';
DeviceToken :='APA91bHvDIljDGdbSp7KFpjDdlT7KMxXXMqUmGE1W0LBZjANYocimlmjRMDJ63Bz_WCL-csofnST14HnM_01aEuGLk57i8weo3FFnU8vk1usC-BWKDP8ysGkcHWoNU3tYgAsGbmrptkX';
// Set the device token
ARegisterIds.Add(DeviceToken);
// Create JSon to Send;
AJSonData := TJSonObject.Create;
AJSonData.AddPair('id','12345678');
AJSonData.AddPair('message',dt_message.Text);
// Add the information to send GCM Server
AJSon.AddPair('registration_ids', ARegisterIds);
AJson.AddPair('data',AJSonData);
// Set the Header.
IdHttp1.Request.ContentType := 'application/json';
// Set the key for server application
IdHttp1.Request.CustomHeaders.AddValue('Authorization','key=AIzaSyDRwARpsug8D5X1MjjF6wyrY3AxhGUliPM');
// Send the Notification
AData := TStringStream.Create(AJSon.ToString);
Adata.Position := 0;
AResponseContent := TStringStream.Create;
IdHttp1.Post('https://fcm.googleapis.com/fcm/send',AData,AResponseContent);
finally
Memo1.Lines.Add(AJSon.ToString);
Memo1.Lines.Add(AResponseContent.DataString);
end;
end;
end.
감사합니다.
REST Client 관련된 기술문서를 첨부합니다.
해당 기술문서로 기능 습득해보시고 천천히 진행해 보시기 바랍다.
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Rest_client
진행하며 어려운 부분을 질문해 주시기 바랍니다.
(저희가 직접 코드를 작성해 드리기 어렵습니다.)