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

Запуск приложения от PUSH-уведомления


ra.eremeev

Вопрос

Добрый день, Друзья!

 

Помогите, пожалуйста, разобраться - в голове уже каша :wacko:

Как в Delphi можно реализовать обработку поступающих на устройство PUSH-уведомлений при выгруженном или свернутом приложении?

При запущеном и активном приложении проблем нет - использую OnReceiveNotificationEvent(Sender: TObject; const ANotification: TPushServiceNotification) в связке с TNotificationCenter.

Эта процедура у меня:

1. очищает все активные уведомления; 

2. создает в TNotificationCenter последнее пришедшее, которое и отображается пользователю.

Его обработчик мной реализован.

 

"Проблемы" есть если приложение выгружено или свернуто...

Есть 2 очень похожих сценария:

Сценарий №1: Приложение выгружено из памяти. Приходит PUSH. Пользователь нажимает на него. Приложение запускается. OnReceiveNotificationEvent после запуска не отрабатывает. Как обработать событие - не знаю :(

Сценарий №2: Приложение запущено, но свернуто. Приходит PUSH. Пользователь нажимает на него. Приложение становится активным. После этого отрабатывает OnReceiveNotificationEvent: очищаются уведомления и создается новое. Пользователю надо повторно на него нажать и тогда сработает обработчик.

Вопрос: Как получить текст (или любое другое поле - не важно) ЭТОГО push-уведомления после запуска/вывода приложения из фона?

Допущение: Если ЭТО уведомление (запустившее приложение) идентифицировать нельзя, то как можно понять, что запуск произведен именно по нажатию на push?

 

Задача актуальна не только для Android, но и iOS.

Буду ОЧЕНЬ БЛАГОДАРЕН за помощь!

Ссылка на комментарий

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

  • 1
В 23.04.2017 в 18:15, ra.eremeev сказал:

Сценарий №1: Приложение выгружено из памяти. Приходит PUSH. Пользователь нажимает на него. Приложение запускается. OnReceiveNotificationEvent после запуска не отрабатывает. Как обработать событие - не знаю :(

Вопрос: Как получить текст (или любое другое поле - не важно) ЭТОГО push-уведомления после запуска/вывода приложения из фона?

Slava Marchenko подсказал что при закрытом приложении получить сам текст можно так:

procedure TFormMain.FormActivate(Sender: TObject);
var
  CurNotification : TPushServiceNotification;
begin
  if Length(fPushService.StartupNotifications) > 0 then
    for CurNotification in fPushService.StartupNotifications do      
       if Assigned(CurNotification) then
         Memo.Lines.Text := CurNotification.Json.ToJSON;
end;

 

Ссылка на комментарий
  • 0
17 часов назад, Rusland сказал:

OnReceiveNotificationEvent после запуска не отрабатывает

где он должен отрабатывать?
вы сами должны проверять список ваших пушей как показано в предыдущем посте
соответственно, получив пуш, вы тут же можете запустить любое другое приложение в помощью интента

Ссылка на комментарий
  • 0
В 23.05.2017 в 15:46, Rusland сказал:

Slava Marchenko подсказал что при закрытом приложении получить сам текст можно так:


procedure TFormMain.FormActivate(Sender: TObject);
var
  CurNotification : TPushServiceNotification;
begin
  if Length(fPushService.StartupNotifications) > 0 then
    for CurNotification in fPushService.StartupNotifications do      
       if Assigned(CurNotification) then
         Memo.Lines.Text := CurNotification.Json.ToJSON;
end;

 

Rusland, большое спасибо! 

Это именно то, что требовалось! :)

Ссылка на комментарий
  • 0
В 23.05.2017 в 17:46, Rusland сказал:

Slava Marchenko подсказал что при закрытом приложении получить сам текст можно так:


procedure TFormMain.FormActivate(Sender: TObject);
var
  CurNotification : TPushServiceNotification;
begin
  if Length(fPushService.StartupNotifications) > 0 then
    for CurNotification in fPushService.StartupNotifications do      
       if Assigned(CurNotification) then
         Memo.Lines.Text := CurNotification.Json.ToJSON;
end;

 

10.1 почему то не работает?

Ссылка на комментарий
  • 0

Не обязательно использовать этот код в OnActivate главной формы. Он работает в любой момент. У меня, например, пользователь вначале авторизуется, потом открывается следующая форма и проверяются StartupNotifications.

Изменено пользователем Тимур Абилов
Ссылка на комментарий
  • 1

Подниму тему наверх. Кто нибудь пробовал это делать в 10.3 ? Что то перестала логика работать.

Причем пуши висящие в шторке, теперь исчезают сами, при старте приложения. Толи поменялась логика работы то ли просто глюк.

function TGCMPushService.GetStartupNotifications: TArray<TPushServiceNotification>;
var
  LBundle: JBundle;
begin
  LBundle := MainActivity.getStartupGCM;
  if LBundle <> nil then
    Result := TArray<TPushServiceNotification>.Create(TGCMPushServiceNotification.Create(LBundle))
  else
    Result := nil;
end;

Вот тут MainActivity.getStartupGCM ВСЕГДА отдает NIL

Ссылка на комментарий
  • 0
В 14.12.2018 в 15:19, Евгений Корепов сказал:

Подниму тему наверх. Кто нибудь пробовал это делать в 10.3 ? Что то перестала логика работать.

Причем пуши висящие в шторке, теперь исчезают сами, при старте приложения. Толи поменялась логика работы то ли просто глюк.

function TGCMPushService.GetStartupNotifications: TArray<TPushServiceNotification>;
var
  LBundle: JBundle;
begin
  LBundle := MainActivity.getStartupGCM;
  if LBundle <> nil then
    Result := TArray<TPushServiceNotification>.Create(TGCMPushServiceNotification.Create(LBundle))
  else
    Result := nil;
end;

Вот тут MainActivity.getStartupGCM ВСЕГДА отдает NIL

решили вопрос?

Ссылка на комментарий

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

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

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

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

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

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

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

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

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

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