sgcWebSockets ライブラリはサーバー・クライアント両側のコンポーネントで HTTP/2 プロトコルをサポートしています。Apple Push Notifications は HTTP/2 プロトコルを使用するサーバープロバイダーからのみプッシュ通知を送信できるため、以下の記事では sgcWebSockets ライブラリを使ってプッシュ通知を送信する方法を紹介します。
サーバープロバイダー(ユーザーのデバイスにプッシュ通知を送信する側)は、メッセージを配信するデバイストークンを知る必要があります。デバイストークンはデバイスとアプリケーションに関連付けられた一意の識別子です。
RAD Studio では、FMX.PushNotification.iOS ユニットを使用してデバイストークン ID を取得できます。コンセプトは非常にシンプルで、デバイスが Apple のサーバーへ新しい接続を開いて DeviceToken を取得し、サーバープロバイダーがこの DeviceToken を使用して通知を送信します。以下に Delphi でデバイストークンを取得するサンプルコードを示します。
Delphi コード
oPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.APS);
oPushConnection := TPushServiceConnection.Create(oPushService);
oPushConnection.Active := True;
oPushConnection.OnChange := OnChangeEvent;
oPushConnection.OnReceiveNotification := OnReceiveNotificationEvent;
vDeviceId := oPushService.DeviceIDValue[TPushService.TDeviceIDNames.DeviceID];
vDeviceToken := oPushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken];
procedure OnChangeEvent(Sender: TObject; AChange: TPushService.TChanges);
begin
memoLog.Lines.Add('OnChange');
end;
procedure OnReceiveNotificationEvent(Sender: TObject; const ANotification: TPushServiceNotification);
begin
memoLog.Lines.Add('DataKey=' + ANotification.DataKey);
memoLog.Lines.Add('JSON=' + ANotification.JSON.ToString);
memoLog.Lines.Add('DataObject=' + ANotification.DataObject.ToString);
end;
