Не могу одолеть пуши при компиляции приложения в 10.4
Вот стандартный код
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, System.PushNotification, System.JSON,
System.Net.HTTPClient, System.Threading,REST.Types
{$IFDEF ANDROID}, FMX.PushNotification.Android, FMX.Memo.Types{$ENDIF}
{$IFDEF IOS}, FMX.PushNotification.IOS{$ENDIF};
type
TForm1 = class(TForm)
MemoLog: TMemo;
procedure FormCreate(Sender: TObject);
private
FDeviceID: string;
FDeviceToken: string;
FPushService: TPushService;
FPushServiceConnection: TPushServiceConnection;
procedure OnReceiveNotificationEvent(Sender: TObject; const ANotification: TPushServiceNotification);
procedure OnServiceConnectionChange(Sender: TObject; AChange: TPushService.TChanges);
procedure PushServiceRegister;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
const
FAndroidServerKey = '13648316531';
procedure TForm1.OnReceiveNotificationEvent(Sender: TObject; const ANotification: TPushServiceNotification);
const
FCMSignature = 'gcm.notification.body';
GCMSignature = 'message';
APNsSignature = 'alert';
var
aText: string;
aObj: TJSONValue;
begin
// это событие срабатывает при открытом приложении
{$IFDEF ANDROID}
aObj := ANotification.DataObject.GetValue(GCMSignature);
if aObj <> nil then
aText := aObj.Value
else
aText := ANotification.DataObject.GetValue(FCMSignature).Value;
{$ELSE}
aObj := ANotification.DataObject.GetValue(APNsSignature);
if aObj <> nil then
aText := aObj.Value;
{$ENDIF}
ShowMessage(aText);
end;
procedure TForm1.OnServiceConnectionChange(Sender: TObject; AChange: TPushService.TChanges);
begin
if (TPushService.TChange.DeviceToken in AChange) and Assigned(FPushServiceConnection) then
begin
FDeviceID := FPushService.DeviceIDValue[TPushService.TDeviceIDNames.DeviceID];
FDeviceToken := FPushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken];
MemoLog.Lines.Add('DeviceID - '+ FDeviceID);
MemoLog.Lines.Add('DeviceToken - '+ FDeviceToken);
end;
end;
procedure TForm1.PushServiceRegister;
begin
FPushService := nil;
FPushServiceConnection := nil;
{$IF defined(ANDROID)}
FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.GCM);
FPushService.AppProps[TPushService.TAppPropNames.GCMAppID] := FAndroidServerKey;
{$ENDIF}
{$IF defined(IOS) AND defined(CPUARM)}
FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.APS);
{$ENDIF}
if Assigned(FPushService) then
begin
FPushServiceConnection := TPushServiceConnection.Create(FPushService);
FPushServiceConnection.OnChange := OnServiceConnectionChange;
FPushServiceConnection.OnReceiveNotification := OnReceiveNotificationEvent;
FPushServiceConnection.Active := true;
FDeviceID := FPushService.DeviceIDValue[TPushService.TDeviceIDNames.DeviceID];
FDeviceToken := FPushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken];
MemoLog.Lines.Add('DeviceID - '+ FDeviceID);
MemoLog.Lines.Add('DeviceToken - '+ FDeviceToken);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
PushServiceRegister;
end;
end.
При регистрации пуш-сервиса строка FPushService.AppProps[TPushService.TAppPropNames.GCMAppID] := FAndroidServerKey; вызывает Segmentation Fault (11)
В 10.3 тот же самый код работает, дебаг ничего не дает, проваливаюсь в процедуру
procedure TPushService.SetAppProp(const AName, AValue: string);
begin
FAppProps.AddOrSetValue(AName, AValue);
end;
а внутрь AddOrSetValue уже не идет, сразу ошибка.
Если кто сталкивался, помогите плиз