Firebase Cloud Messaging(FCM)へandroidのPush通知を行うWindowsアプリケーションを作成する ~Delphiでお手軽プログラミング
Delphiを起動して新規作成を行う
Delphiを起動し、ファイル→新規作成→VCLフォームアプリケーション をクリックします。TButtonとTMemoをフォームにドラッグ&ドロップします。
Button1をダブルクリックするとコードエディタに切り替わります。
ソースコードを記述する
以下は指定のアプリパッケージをインストールしている指定のDeviceTokenのandroid端末にPush通知を送ることができます。unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.Net.HttpClient, System.Net.HttpClientComponent,System.Net.URLClient; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var HTTPClient: TNetHTTPClient; s1,s2:TMemoryStream; hd: TArray<TNameValuePair>; st:string; b:TBytes; begin HTTPClient:=TNetHTTPClient.Create(nil); s1:=TMemoryStream.Create; s2:=TMemoryStream.Create; try HTTPClient.ContentType:='application/json'; st:='{'+ '"to":"ここにPush送信先DEVICE TOKENを記述する"'+ '"priority":"high",'+ '"restricted_package_name":"Push通知を送るアプリのパッケージ名を記述する",'+ '"time_to_live":0,'+ '"notification":{"sound":"default","badge":"1",'+ '"title":"Pushタイトル","body":"プッシュ通知本文"}'+ '}'; setlength(hd,1); b:=TEncoding.UTF8.GetBytes(st); s1.Write(b,length(b)); s1.Position:=0; hd[0].Name:='Authorization'; hd[0].Value:='key=ここにサーバーキーを記述する'; HTTPClient.Post('https://fcm.googleapis.com/fcm/send',s1,s2,hd); s2.Position:=0; memo1.Lines.LoadFromStream(s2,TEncoding.UTF8); finally s1.Free; s2.Free; HTTPClient.Free; end; end; end.
実行する
ツールバーの実行ボタン(F9キーでも同じ)を押して実行します。(デバッガを使わずに実行でもOKです。)Button1をクリックし、Push通知の送信に成功すると
{"multicast_id":47068889804********,"success":1,"failure":0,"canonical_ids":0,
"results":[{"message_id":"0:15763105********%22dfc2a4********"}]}
のような値がMemo1に表示されます。
デバイストークンを指定せず、インストールしているすべてのデバイスに送る場合
特定のアプリパッケージをインストールしているandroid端末すべてにPush通知を送る場合は以下のように記述します。(conditionでtopicsがnothing_anytopicではないもの としています)
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
System.Net.HttpClient, System.Net.HttpClientComponent,System.Net.URLClient;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var HTTPClient: TNetHTTPClient;
s1,s2:TMemoryStream;
hd: TArray<TNameValuePair>;
st:string;
b:TBytes;
begin
HTTPClient:=TNetHTTPClient.Create(nil);
s1:=TMemoryStream.Create;
s2:=TMemoryStream.Create;
try
HTTPClient.ContentType:='application/json';
st:='{'+
'"condition":"!(''nothing_anytopic'' in topics)"'+
'"priority":"high",'+
'"restricted_package_name":"Push通知を送るアプリのパッケージ名を記述する",'+
'"time_to_live":0,'+
'"notification":{"sound":"default","badge":"1",'+
'"title":"Pushタイトル","body":"プッシュ通知本文"}'+
'}';
setlength(hd,1);
b:=TEncoding.UTF8.GetBytes(st);
s1.Write(b,length(b));
s1.Position:=0;
hd[0].Name:='Authorization';
hd[0].Value:='key=ここにサーバーキーを記述する';
HTTPClient.Post('https://fcm.googleapis.com/fcm/send',s1,s2,hd);
s2.Position:=0;
memo1.Lines.LoadFromStream(s2,TEncoding.UTF8);
finally
s1.Free;
s2.Free;
HTTPClient.Free;
end;
end;
end.
実行してButton1をクリックし、Push通知の送信に成功すると
{"message_id":2072**************}
のような値がmemo1に表示されます。