• 0
gonzales

PUSH и Android8

Вопросы

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

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

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

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

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

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

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


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

10 ответов на этот вопрос

  • 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

вот засада. Google play требует 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() отсылает регистрацию на мой сервер. В методе проверяется получение регистрации и факт отсылки (он может вызываться несколько раз у меня)

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

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