Delphi Apple Push Notification не работи на iOS, докато работи на Android

Опитвам се да включа Apple Push Notifications в моето iOS приложение, следвайки този пример.

След известно отстраняване на грешки успях да разбера, че APushService е празен, когато работи на iOS, но не и на Android.

procedure TFormLogin.Button1Click(Sender: TObject);
var
    APushService           : TPushService;
begin

    APushService       := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.APS);

end;

Правя ли нещо нередно? Как можем да активираме Push Notifications за iOS на Delphi?

Всякакви идеи ще бъдат високо оценени.


person Machado    schedule 01.12.2015    source източник
comment
Какво би могло да накара GetServiceByName да не намери услугата?   -  person Machado    schedule 01.12.2015
comment
Нямам идея. Аз нямам изходния код, но ти го имаш. Опитайте да потърсите улики в System.PushNotification.pas. Може би услугата с това име не съществува. Може би вашето приложение няма достатъчно разрешение, за да види резултата.   -  person Rob Kennedy    schedule 01.12.2015


Отговори (2)


Решението беше комично просто за количеството усилия, които положихме, за да решим.

FMX.PushNotification.iOS import липсваше в кода.

Странното е, че ако премахнем PushNotifications импортирането, Delphi Seattle няма да показва никакви предупреждения.

person Machado    schedule 02.12.2015

Ето работещ код, който използвам за Android и iOS:

const
  FAndroidServerKey = '63538920422';

private
  { Private declarations }
  FDeviceID: string;
  FDeviceToken: string;

  FPushService: TPushService;
  FPushServiceConnection: TPushServiceConnection;

  procedure OnReceiveNotificationEvent(Sender: TObject; 
    const ANotification: TPushServiceNotification);
  procedure OnServiceConnectionChange(Sender: TObject; 
    AChange: TPushService.TChanges);

  procedure PushServiceRegister;

procedure TFormMain.OnReceiveNotificationEvent(Sender: TObject; 
  const ANotification: TPushServiceNotification);
const
  FCMSignature = 'gcm.notification.body';
  GCMSignature = 'message';
  APNsSignature = 'alert';
var
  aText: string;
  aObj: TJSONValue;
begin
  // this will fire when only when app is opened
{$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 TFormMain.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];
    // save token and ID to  remote db here
  end;
end;

procedure TFormMain.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; // this will fires OnChange event
  end;
end;

Ето подробна статия стъпка по стъпка за android и iOS (използвайте google translate) за C++ и Delphi код с готов за използване PHP сървърен код.

http://blog.rzaripov.kz/2017/02/firebase-android-ios.html http://blog.rzaripov.kz/2017/02/firebase-android-ios-2.html

Използвайте този форум, за да задавате въпроси (може да използвате английски) http://fire-monkey.ru/topic/1809-%D1%81%D1%82%D0%B0%D1%82%D1%8C%D1%8F-php-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80-%D0%B4%D0%BB%D1%8F-%D1%80%D0%B0%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8-push-%D0%BD%D0%B0-android-%D0%B8-ios/

person alitrun    schedule 27.05.2017