-
Постов
35 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Антон Емельянов
-
-
-
пробовал менять ID на Ключ сервера. Тоже не работает..
Я там приложил весь архив с проектом.. в теме..
там в все настройки .. можешь скачать - открыть, запустить?
может проблема с sdk или ещё что. или я чтото упускаю =( -
-
Я пробовал на разных устройствах. результат одинаковый..
По-мо-ги-те -
А нет. пардон.. процедура 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;
-
Я добавил записи что ты просил.. Я не очень понял в какой момент вызывается 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.
-
Эм.. так и сделано. Я прикрепил скриншот к первому сообщению.. Там видно, что токен не выводится..
дублирую ссылкой скриншот: http://fire-monkey.ru/uploads/monthly_2018_02/5a944cc210b64_.thumb.png.6486139139dc7ad8058be958daf0854a.png -
Приложение не даёт 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
Помогите люди добрые
За помощь и консультацию отблагодарю..
FPushService.DeviceTokenValue = nil Что делать?
в Push сообщения
Опубликовано
результат после изменения