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

PUSH и Android8


gonzales

Вопрос

Доброго времени суток!

Сменил телефон и перестали приходить пуши при свернутой программе в андроид 8. На 5-ом все работает.

Подозреваю, что не стартует сервис

{$IF defined(ANDROID)}
  FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.GCM);
  FPushService.AppProps[TPushService.TAppPropNames.GCMAppID] := FAndroidServerKey;
{$ENDIF}

Может кто подскажет, в какую сторону копать?

Заранее спасибо!

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

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

  • 0
В 31.01.2019 в 15:23, gonzales сказал:

Доброго времени суток!

Сменил телефон и перестали приходить пуши при свернутой программе в андроид 8. На 5-ом все работает.

Подозреваю, что не стартует сервис


{$IF defined(ANDROID)}
  FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.GCM);
  FPushService.AppProps[TPushService.TAppPropNames.GCMAppID] := FAndroidServerKey;
{$ENDIF}

Может кто подскажет, в какую сторону копать?

Заранее спасибо!

Возможно вы стали счастливым обладателем телефона Asus, или еще какого то производителя любящего решать за пользователя. Посмотрите в настройках андроида (настройки Приложения и Оповещения) - возможно там отключено оповещение о приходящих пушах. Только вот неделю назад разбирались с пользователем с такой же проблемой.

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

Возможно вы стали счастливым обладателем телефона Asus, или еще какого то производителя любящего решать за пользователя. Посмотрите в настройках андроида (настройки Приложения и Оповещения) - возможно там отключено оповещение о приходящих пушах. Только вот неделю назад разбирались с пользователем с такой же проблемой.

К сожалению нет, или я не знаю куда копать. В настройках телефона все уведомления включены, режим энергосбережения выключил, в общем сделал все рекомендации, что нашел в инете. Причем, в открытое приложение уведомления приходят. Протестировал еще на телефоне с 7-ым андроидом - все работает. 

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

Нашел причину, в API 26 формирование уведомления строится по другому. https://startandroid.ru/ru/uroki/vse-uroki-spiskom/515-urok-190-notifications-kanaly.html

Перевел приложение на API 25 и все заработало как надо.

Подозреваю, что для работы пушей в API 26 нужно обновить саму делфу. (у меня сейчас берлин) 

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

вот засада. Google play требует api не ниже 26. Какой-то замкнутый круг(((

 

Этот замкнутый круг разорвали в Rio, переходите на последнюю версию среды и пуши будут работать.

Ссылка на комментарий
  • 0
10 часов назад, Евгений Корепов сказал:

Этот замкнутый круг разорвали в Rio, переходите на последнюю версию среды и пуши будут работать.

Спасибо. Попробую на досуге

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

Этот замкнутый круг разорвали в Rio, переходите на последнюю версию среды и пуши будут работать.

А не подскажете случайно, как работать с пушами в 10.3. Код, который работал на 10.1 тут не работает. Нужно ли получить разрешение для работы с уведомлениями?

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

А не подскажете случайно, как работать с пушами в 10.3. Код, который работал на 10.1 тут не работает. Нужно ли получить разрешение для работы с уведомлениями?

Вроде все работает. Разрешений не нужно никаких вообще. До этого ошибочно требовало доступ к учетной записи - пофиксили.

Код вроде остался прежним, вот кусок из живого проекта:

procedure TFormMain.InitPushService;
begin
  TTask.Run(
    procedure
    Var ADeviceID, ADeviceToken : String;
    begin
      FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.GCM);
      FPushService.AppProps[TPushService.TAppPropNames.GCMAppID] := ConstGCMAppID;

      if Assigned(FPushService) then
        begin
          FPushServiceConnection := TPushServiceConnection.Create(FPushService);
          FPushServiceConnection.OnChange := OnPushServiceConnectionChange;
          FPushServiceConnection.OnReceiveNotification := OnReceivePushNotificationEvent;
          FPushServiceConnection.Active := True;
          ADeviceID := FPushService.DeviceIDValue[TPushService.TDeviceIDNames.DeviceID];
          ADeviceToken := FPushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken];
          FSettings.Flags.PushServiceInited:=True;

          TThread.Synchronize(TThread.CurrentThread,
            procedure ()
            begin
              FNetwork.DeviceID:=ADeviceID;
              FNetwork.DeviceToken:=ADeviceToken;
              FNetwork.SendFCMRegistration(); // ??????????????????????????????
              Log('DeviceID: ' + FNetwork.DeviceID);
              Log('DeviceToken: ' + FNetwork.DeviceToken);

            end);
        end;
    end
  );
end;

procedure TFormMain.OnPushServiceConnectionChange(Sender: TObject; AChange: TPushService.TChanges);
begin
  TThread.Synchronize(TThread.CurrentThread,
    procedure ()
    begin
      if TPushService.TChange.DeviceToken in AChange then
      begin
        if Assigned(FNetwork) then
        begin
          FNetwork.DeviceID := FPushService.DeviceIDValue[TPushService.TDeviceIDNames.DeviceID];
          FNetwork.DeviceToken := FPushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken];
          Log('DeviceID: ' + FNetwork.DeviceID);
          Log('DeviceToken: ' + FNetwork.DeviceToken);

          FNetwork.SendFCMRegistration();
        end;
      end;
    end
  );
end;

procedure TFormMain.OnReceivePushNotificationEvent(Sender: TObject; const ANotification: TPushServiceNotification);
var AMessageSection : String;
begin
  if Assigned(ANotification.Json) then
  begin
    Log('Push Message Json');
    Log(ANotification.Json.ToString);
    if ANotification.Json.TryGetValue('message_section', AMessageSection) then
    begin
      if AMessageSection.Equals('support') then
        SetActiveTab(ConstSectionSupport);
      if AMessageSection.Equals('news') then
        SetActiveTab(ConstSectionNews);
      if AMessageSection.Equals('info') then
        SetActiveTab(ConstSectionInfo);
      if AMessageSection.Equals('services') then
        SetActiveTab(ConstSectionServices);
    end
    else
      if FSettings.CurrentSection <> ConstSectionSupport then
        SetActiveTab(ConstSectionSupport)
      else
        WebBrowserCallJS(TCallJS.SupportLoadContent);
    PlaySoundEffects(1);
  end;
end;

procedure TFormMain.CheckStartupNotifications();
var CurNotification : TPushServiceNotification;
begin
  if Length(FPushService.StartupNotifications) > 0 then
    for CurNotification in FPushService.StartupNotifications do
      if Assigned(CurNotification) then
        OnReceivePushNotificationEvent(Self, CurNotification);
  NotificationCenter.CancelAll;
end;

Метод FNetwork.SendFCMRegistration() отсылает регистрацию на мой сервер. В методе проверяется получение регистрации и факт отсылки (он может вызываться несколько раз у меня)

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

Подскажите, а есть ли возможность при получении пуша запустить программу, если она в этот момент закрыта?
Раньше для этого правились исходники и пересобирался classes.dex. В Rio что-то не получается это сделать...

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

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

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

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

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

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

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

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

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

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

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