Наткнулся тут на изящную штуку для приложения с PUSH уведомлениями на Android и Ios. Один объект, все сам делает.
Внедрил в одно боевое приложение с 100+ тысячами установок, полет нормальный.
Описание тут https://delphiworlds.com/2017/04/firebase-cloud-messaging-android-ios/
Исходный код с примером на гитхабе https://github.com/DelphiWorlds/PushClient
Использование максимально простое:
uses DW.PushClient;
....
private
FPushClient: TPushClient;
procedure PushClientChangeHandler(Sender: TObject; AChange: TPushService.TChanges);
procedure PushClientReceiveNotificationHandler(Sender: TObject; const ANotification: TPushServiceNotification);
....
procedure TFormMain.InitPushService;
begin
FPushClient := TPushClient.Create;
FPushClient.GCMAppID := ConstGCMAppID;
FPushClient.ServerKey := '';
FPushClient.BundleID := '';
FPushClient.UseSandbox := Debug; // Change this to False for production use!
FPushClient.OnChange := PushClientChangeHandler;
FPushClient.OnReceiveNotification := PushClientReceiveNotificationHandler;
try
FPushClient.Active := True;
except
SendError('FPushClient.Active Exception');
end;
end;
procedure TFormMain.PushClientChangeHandler(Sender: TObject; AChange: TPushService.TChanges);
begin
if TPushService.TChange.DeviceToken in AChange then
begin
HDevicePushParams.DeviceID:=FPushClient.DeviceID;
HDevicePushParams.DeviceToken:=FPushClient.DeviceToken;
GetHTTP(CommandRegisterFCM);
// Memo1.Lines.Add('DeviceID = ' + FPushClient.DeviceID);
// Memo1.Lines.Add('DeviceToken = ' + FPushClient.DeviceToken);
end;
end;
procedure TFormMain.PushClientReceiveNotificationHandler(Sender: TObject; const ANotification: TPushServiceNotification);
begin
// ShowMessage(ANotification.DataObject.ToString...
end;
Правда руки не дошли разобраться для чего ему
FPushClient.ServerKey := '';
FPushClient.BundleID := '';
Но и без этого работает.