Перейти к содержанию
  • Регистрация
  • 0
Антон Емельянов

FPushService.DeviceTokenValue = nil Что делать?

Вопрос

Приложение не даёт 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

Изменено пользователем Антон Емельянов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0

добавь для проверки эти строки

    memo1.Lines.Add('FDeviceID: '+FDeviceID);
    memo1.Lines.Add('FDeviceToken: '+FDeviceToken);

 

 

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('FDeviceID: '+FDeviceID);
    memo1.Lines.Add('FDeviceToken: '+FDeviceToken);


    // тут отправляем в хранилище токенов (на сервер с БД например)
  end;
end;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

Изменено пользователем Антон Емельянов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
9 часов назад, Антон Емельянов сказал:

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

Эм...Я не вижу чтобы ты так сделал. При колбеке повторного получения у тебя ничего не происходит

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Я добавил записи что ты просил.. Я не очень понял в какой момент вызывается 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.

 

Изменено пользователем Антон Емельянов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

А нет. пардон.. процедура  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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

в процедуре оставь просто такой код и поставь точку останова. Проверь приходит в нее вообще

procedure TForm1.OnServiceConnectionChange(Sender: TObject;
  AChange: TPushService.TChanges);
begin
    FDeviceToken := FPushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken];
end;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
Только что, FREEFAR сказал:

в процедуре оставь просто такой код и поставь точку останова. Проверь приходит в нее вообще

procedure TForm1.OnServiceConnectionChange(Sender: TObject;
  AChange: TPushService.TChanges);
begin
    FDeviceToken := FPushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken];
end;

не актуально получается

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
6 минут назад, Антон Емельянов сказал:

Я пробовал на разных устройствах. результат одинаковый..
По-мо-ги-те

откуда FAndroidServerKey = '687234578278'; ???

имею ввиду сам ключ откуда. 

Изменено пользователем FREEFAR

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
Только что, FREEFAR сказал:

откуда FAndroidServerKey = '687234578278'; ???

Эм. Это из firebase... id отправителя..
или тут должен быть -длииииный id/вот что у меня есть

 

Clip2net_180227112714.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

Изменено пользователем Антон Емельянов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
3 минуты назад, Антон Емельянов сказал:

Эм. Это из firebase... id отправителя..
или тут должен быть -длииииный id/вот что у меня есть

 

Clip2net_180227112714.png

Не пойму в проекте один ключ, на скрине другой..

4286... - этот введи 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Сделал новый проект . в  нем создал новое приложение.
в программе прописал новый  id..
результат тотже покачто.

com.embarcadero.test.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

+ в проекте на FBase добавил ид приложения?

в проекте есть?

image.png.ec31e7e9a7fcb857cc18e693d5334da2.png

Изменено пользователем FREEFAR

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Receive push есть..
А по первому уточните..это где смотреть   "+ в проекте на FBase добавил ид приложения?"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
Только что, Антон Емельянов сказал:

типо  "com.embarcadero.test" ?

Clip2net_180227115452.png

да, а как написано в настрйках проекта в ембе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
Только что, FREEFAR сказал:

да, а как написано в настрйках проекта в ембе?

это где? Уточни пожалуйста

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

 еще обрати внимание на apiKey это из гугл консоли. там включаешь API GoogleCloudMessage

image.png.ca647a5a968b693ea0812a95dfd7d364.png

 

 

Изменено пользователем FREEFAR

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
6 минут назад, Антон Емельянов сказал:

Clip2net_180227115628.png

APIKey не тот вбит брат. Ходи в консоль гугловую

+ надеюсь проект test.dpr?

Изменено пользователем FREEFAR

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Так понял. А какой apikey должен быть ?  Уточни пожалуйста - из моих скриншотов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От slav_z
      Показать/скрыть сенсорную клавиатуру Windows.
      unit Lib.Keyboard; interface uses Winapi.Windows, Winapi.ActiveX, System.Win.ComObj, FMX.Forms, FMX.Platform.Win; procedure ToggleSensorKeyboard(Form: TCommonCustomForm); implementation const CLSID_UIHostNoLaunch: TGUID = '{4CE576FA-83DC-4F88-951C-9D0782B4E376}'; type ITipInvocation = interface ['{37C994E7-432B-4834-A2F7-DCE1F13B834B}'] procedure Toggle(WND: HWND); safecall; end; procedure ToggleSensorKeyboard(Form: TCommonCustomForm); var TipInvocation: ITipInvocation; begin OleCheck(CoCreateInstance( CLSID_UIHostNoLaunch,nil,CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, ITipInvocation,TipInvocation)); TipInvocation.Toggle(FormToHWND(Form)); end; end. C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe - Сенсорная клавиатура Windows. В Windows 10 простой запуск уже не работает.
      Кто как делал? Очень интересны примеры кода.
       
    • От genakust
      добрый день,
      у меня есть несколько TabItems in FMX- TabControl (как на вложенной картинке) один из которых заполняется динамически:
      FindAndDeleteItemContext; frameIndex:= GetFrameIndexByText(item); {factory} FFramesFactory:= TFramesFactory.DefaultFactory; {Index-> Frame} aktFrame:= FFramesFactory.GetFrame(frameIndex); {add to layout} aktFrame.Parent:= LyContent; aktFrame.Align:= TAlignLayout.Client; LyContent.AddObject(aktFrame); {open tab} ActionToContentTabExecute(Sender); я пытаюсь найти фрейм и удалить его только из TabItem но не как Object обследующим способом:
      procedure Txxx.FindAndDeleteItemContext; var   i: Integer; begin   for i:= 0 to Pred(LyContent.ComponentCount) do   begin     if LyContent.Controls.Items[i] is TFrame then       LyContent.RemoveObject(i);   end; end но почему- то LyContent.ComponentCount всегда равен 0.
      Подскажите пожалуйста что неправильно?
      Спасибо.

    • От genakust
      Здравствуйте,
      я создал свой ListBoxItem (FMX) который выглядит следующим образом:

      затем я добавил Items динамически в ListBox и получилось следующее:

      Когда я запускаю программу на Windows 10 и выбираю мышкой Item он селектируется, а если запускаю на Андроид- таблете, то я не могу выбрать (селектировать) Item.
      Подскажите пожалуйста, какие могут быть причины длы такого поведения.
      Заранее спасибо.
       
    • От Mohamed BEN AMMAR
      hello 
      i'm using delphi fmx for building android App
      i have this code for Activating The WI-FI icon from android device:
      This could be found here .
      =========== code ==================
      uses
        Androidapi.Helpers,
        Androidapi.JNI.JavaTypes,
        Androidapi.JNI.GraphicsContentViewText,
        Androidapi.JNIBridge,
        Androidapi.JNI.WifiManager;
        procedure SetWifiEnabled (AEnable: Boolean); var   Obj: JObject;   WifiManager: JWifiManager; begin   Obj: = SharedActivityContext.getSystemService (TJContext.JavaClass.WIFI_SERVICE);   if Obj = nil then     Exit;     WifiManager: = TJWifiManager.Wrap ((Obj as ILocalObject) .GetObjectID);   WifiManager.setWifiEnabled (AEnable); end; 
       
       My question is About Activating Android location:
        Is it possible to activate the service location icon from android device
       programatically without using the Location or TLocationSensor component ....?
      however I know exactly that google has been Deactivate this API since android "4" just for security reasons .....
      but i have seen many apps in playstore can activate the service without using 
      this code here ask the user for activate the location manually .... procedure TForm1.GPSSettings; {$IFDEF ANDROID} var Intent: JIntent; {$ENDIF} begin {$IFDEF ANDROID} Intent := TJIntent.Create; Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_LOCATION_SOURCE_SETTINGS); TAndroidHelper.Activity.startActivity(Intent); {$ENDIF} end; in other versions like lolipopup can show just the Allow Permission system dialog timer ....( Asking the user for Allowing this App to Activate the service location ......) 
      I have an android device with lolipopup version and i try to execute the location EMBARCADERO sample but 
      this one can not activate the service location ICON even  my device show me the Allow permission dialog where i choose yes allow
      with never ASK....
      Finally ,  I like the WI-FI code above .....
      and i'm wondering if someone here can do this task for me (i need a unit as the WI-FI code above which can offer me
      the option to activate the Service Location ICON )
      I'm ready to paid for that task .....
       
      Sincerelly: Brave.
    • От SIARHEI RAHOUSKI
      Создал проект там куча компонентов. Но разворачивании формы на весь экран компоненты размер не меняют:
      Прочитал про свойства align Но как только я выставлю Group box например left другим right все сбивается в кучу и поправить это не могу. 
      Как настроить align ?

    • От SIARHEI RAHOUSKI
      Как сделать форму с компонентами под все разрешения?

    • От SIARHEI RAHOUSKI
      Как сделать мозаику (drag/drop) ? Получается есть 2 прямоугольника (которые надо перетаскивать)  и есть ещё 2 прямоугольника (которые должны принимать) и ещё есть кнопка проверки. При нажатии определяет правильно ли разместили прямоугольники.
    • От AliZairov
      Привет. Я сделал новую версию YouTubeApi компоненты. Поддерживаемые VCL & FMX + Mobile.
      Никаких официальных YouTube Api компоненты. Только данные с парсинг. Пример доступен в архиве.
       
      Новый
      ===
      v1.4 - 25/02/2018
        + Устранение проблем
      YouTubeApiDelphi
    • От gresaggr
      Добрый день.
      Как под FMX в ListView сделать подчеркивание Detail в рантайме?
      Пытался делать так:
      LV.ItemAppearanceObjects.ItemObjects.Detail.Font.Style := [TFontStyle.fsUnderline]
      но не срабатывает.
      P.S. Возможно это применить не ко всем строкам, а только к некоторым?
    • От Виталий Иванов
      Ошибка при запуске программы на отладку:
       
      "
      Can't open socket: Permission denied 
      Exiting
      .
      "
       
      кто знает как побороть ? 
       
      Отладку запускаю на OnePlus3 с Android 8.0.0, драйвера Google USB переустанавливал. 

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

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