• 0
Авторизация  
Alex7wrt

Исправление отображения Smart Banner, Android

Вопросы

Обнаружил, что на некоторых телефонах с вытянутым экраном не отображается Smart Banner (TBannerAD.Size = Auto). Оказалось, что причиной тому неверный расчет высоты баннера в исходниках FMX.Advertising.Android. 

Может быть, эта информация кому-нибудь поможет

 

В документации Android высота баннера должна вычисляться так:

1.PNG.7deb908fcd7d73c79db594430f070b6d.PNG

Тогда как в коде FMX.Advertising.Android она вычисляется в процедуре UpdateControlMetrics следующим образом:

const
  AdHeightPortrait = 90;
  AdHeightLandscape = 90;
  AdHeightPhonePortrait = 50;
  AdHeightPhoneLandscape = 32;
  AndroidSW600DP = 600;
  AndroidSW600DPLandscape = 552;
  AdMobBannerHeight = 50;
  AdMobFullBannerHeight = 60;
  AdMobLeaderboardHeight = 90;
begin
  if (FAdControl <> nil) and not Assigned(FAdControl.OnResize) then
  begin
    case FAdControl.AdSize of
      TBannerAdSize.Auto:
        begin
          if Screen.Size.Height > Screen.Size.Width then
            if Screen.Size.Width < AndroidSW600DP then
              FAdControl.Height := AdHeightPhonePortrait
            else
              FAdControl.Height := AdHeightPortrait
          else
            if Screen.Size.Height < AndroidSW600DPLandscape then
              FAdControl.Height := AdHeightPhoneLandscape
            else
              FAdControl.Height := AdHeightLandscape;
        end;

Также, учитывая, что на вытянутых экранах (по крайней мере на тех устройствах, на которых я тестил), Screen.Width и Screen.Height далеко не всегда дают верные значения, то более правильный код процедуры TAndroidBannerAd.UpdateControlMetrics будет таким:

procedure TAndroidBannerAd.UpdateControlMetrics;
var
  Frame: TRectF;
  Form: TCommonCustomForm;
  Disp: JDisplayMetrics;
  Window: JWindow;
  h: integer;
const
  AdHeightLandscape = 90;
  AdHeightPhoneLandscape = 32;
  AndroidSW600DP = 600;
  AndroidSW600DPLandscape = 552;
  AdMobBannerHeight = 50;
  AdMobFullBannerHeight = 60;
  AdMobLeaderboardHeight = 90;
begin
  if (FAdControl <> nil) and not Assigned(FAdControl.OnResize) then
  begin

    Disp := TJDisplayMetrics.Create;
    Window:=TJWindow.Wrap((MainActivity.getWindow as ILocalObject).GetObjectID);
    Window.getWindowManager.getDefaultDisplay.getRealMetrics(disp);
    h:=round(Disp.heightPixels/Disp.density);


    case FAdControl.AdSize of
      TBannerAdSize.Auto:
        begin
          if Screen.Size.Height > Screen.Size.Width then begin
            if h <= 400 then FAdControl.Height := 32
            else if (h>400) and (h<=720) then FAdControl.Height:=50
            else FAdControl.Height := 90
          end
          else
            if Screen.Size.Height < AndroidSW600DPLandscape then
              FAdControl.Height := AdHeightPhoneLandscape
            else
              FAdControl.Height := AdHeightLandscape;
        end;
      TBannerAdSize.Small:
        FAdControl.Height := AdMobBannerHeight;
      TBannerAdSize.Medium:
        FAdControl.Height := AdMobFullBannerHeight;
      TBannerAdSize.Large:
        FAdControl.Height := AdMobLeaderboardHeight;
    end;

    if Screen.ActiveForm <> nil then
      Form := Screen.ActiveForm
    else if Application.MainForm <> nil then
      Form := Application.MainForm
    else
      Form := nil;
    if Form <> nil then
    begin
      Frame := WindowHandleToPlatform(Form.Handle).Bounds;
      FAdControl.Width := Round(Frame.Width);
    end;
  end;
end;

 

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

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


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

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

Ответы на этот вопрос пока отсутствуют

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

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

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

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

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

Войти

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

Войти
Авторизация  

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

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