Перейти к содержанию
Fire Monkey от А до Я

Антон Емельянов

Пользователи
  • Постов

    35
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Антон Емельянов

  1. пробовал менять ID на Ключ сервера.  Тоже не работает..
    Я там приложил весь архив с проектом.. в теме.. 
    там в все настройки .. можешь скачать - открыть, запустить?
    может проблема с sdk или ещё что. или я чтото упускаю =(

  2. А нет. пардон.. процедура  OnServiceConnectionChange  выполняется..
    но условие которое в ней, нет.. для теста . убрал условие..  теперь так выводится

     

    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];
    
        memo1.Lines.Add('FDeviceID2: '+FDeviceID);
        memo1.Lines.Add('FDeviceToken2: '+FDeviceToken);
    
    
        // тут отправляем в хранилище токенов (на сервер с БД например)
      //end;
    end;

     

    Screenshot_2018-02-27-11-19-12.png

  3. Я добавил записи что ты просил.. Я не очень понял в какой момент вызывается OnServiceConnectionChange.. для Анроид приложения.
    Вот полный код.. И по его исполнению.. выводится только первый блок в мемо1.  А до OnServiceConnectionChange не доходит..
    Подправьте  пожалуйста код -- так как он должен быть в рабочем состоянии... Заранее благодарю!!!!!!!
     

    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.StdCtrls,
      FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo,System.PushNotification,
      FMX.PushNotification.Android,system.JSON;
    
    
    type
      TForm1 = class(TForm)
        ToolBar1: TToolBar;
        SpeedButton1: TSpeedButton;
        SpeedButton2: TSpeedButton;
        Memo1: TMemo;
        procedure SpeedButton1Click(Sender: TObject);
        procedure SpeedButton2Click(Sender: TObject);
        procedure FormShow(Sender: TObject);
      private
        { Private declarations }
         FDeviceID: string;
         FDeviceToken: string;
         FPushService: TPushService;
         FPushServiceConnection: TPushServiceConnection;
      public
        { Public declarations }
         procedure OnReceiveNotificationEvent(Sender: TObject;
         const ANotification: TPushServiceNotification);
         procedure OnServiceConnectionChange(Sender: TObject;AChange: TPushService.TChanges);
         procedure PushServiceRegister;
      end;
    
      const
      FAndroidServerKey = '687234578278';
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.fmx}
    
    
    procedure TForm1.FormShow(Sender: TObject);
    begin
    PushServiceRegister();
    
    end;
    
    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];
    
        memo1.Lines.Add('FDeviceID2: '+FDeviceID);
        memo1.Lines.Add('FDeviceToken2: '+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];
        // тут отправляем в хранилище токенов (на сервер с БД например)
        memo1.Lines.Add('FDeviceID: '+FDeviceID);
        memo1.Lines.Add('FDeviceToken: '+FDeviceToken);
      end;
    end;
    
    procedure TForm1.SpeedButton1Click(Sender: TObject);
    begin
    Form1.Close;
    end;
    
    procedure TForm1.SpeedButton2Click(Sender: TObject);
    begin
      //ghj
    
    
    end;
    
    end.

     

  4. Эм.. так и сделано. Я прикрепил скриншот к первому сообщению.. Там видно, что токен не выводится..
    дублирую ссылкой скриншот:   http://fire-monkey.ru/uploads/monthly_2018_02/5a944cc210b64_.thumb.png.6486139139dc7ad8058be958daf0854a.png

  5. Приложение не даёт DeviceToken...  ,  (DeviceID есть)
    FDeviceToken := FPushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken];

    Тест пример реализован по статье нашего замечательного модератора
    http://blog.rzaripov.kz/2017/02/firebase-android-ios-2.html

    Используется:
    Компиляция SDK Android 5.1
    Среда-разработки Delphi XE 10.2 

    Пожалуйста запустите проект на своей версии Delphi..
    Посмотрите будет  сгенерирован ТОКЕН или нет.. 
    в случае удачи ,  напишите какая у вас версия Дельфи..

    Исходник-проекта:  https://drive.google.com/open?id=1mCPvYYd0tXBALt-J_ymVuzChj_TtztC0
    Только APK: https://drive.google.com/open?id=1x8q4RyVylpGOMjcQYjlvFxFBSQaYs7NL 


    Помогите люди добрые :unsure:
    За помощь и консультацию отблагодарю..
     

    где токен.png

×
×
  • Создать...