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

новый AdMob в Delphi XE6 приложении


Igor

Вопрос

Недавно старый AdMob от гугла заменили на новый. Со старым я не работал, а новый поднять не выходит, предполагаю, что дело может быть в том, что новый AdMob не предусмотрен в способе настройки старого, но вполне возможно, что дело не в этом.

 

На месте где баннер должен быть в общем не вижу ничего, правда программу собирал в режиме дебага и название её сменил и путь установки (иначе не давало установить, писало что-то о сертификате, насколько я понял дело в том, что у меня по тому адресу, с тем названием стояла уже прога подписанная сертификатом, скаченная с гугл плей) , т.е. по сути это уже не та прога, что на гугл плее, но должно же хоть что-то на месте баннера было появиться наверно (?)

 

 

К сути:

 

0) На странице apps.admob.com создал рекламный блок для своего уже активного приложения.

 

Используя старый проект приложения, стал добавлять нужное, а именно:

 

1) Добавил TBannerAd

2) Настроил соединение с рекламой.

  • Delphi:  BannerAd1.AdUnitID := 'YourAdUnitID';
  • В файле AndroidManifest.template добавил сразу после </activity> на линии 32:

<activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

  • В Uses Permissions включил Access network state и Internet.

3) Выставил TestMode в TBannerAd на True.

4) В "Unit1.pas", в private секции добавил:

    ActionBeginDate: TDateTime;

    WastedSeconds: Integer;

5) В uses секции прописал "System.DateUtils".

6) Определил обработчики событий с реализациями, показанными в разделе Code ниже.

  1. Выбрал форму и определил обработчик событий для её OnShow события.
  2. Выбрал баннер и определил обработчики событий для его событий OnActionCanBegin и OnActionDidFinish.
 

Источник 1

Источник 2

 

На примере:

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.Advertising, System.DateUtils;
 
type
  TForm1 = class(TForm)
    BannerAd1: TBannerAd;
    Label1: TLabel;
    procedure FormShow(Sender: TObject);
    procedure BannerAd1ActionCanBegin(Sender: TObject;
      var WillLeaveApplication: Boolean);
    procedure BannerAd1ActionDidFinish(Sender: TObject);
  private
    ActionBeginDate: TDateTime;
    WastedSeconds: Integer;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.fmx}
 
procedure TForm1.BannerAd1ActionCanBegin(Sender: TObject;
  var WillLeaveApplication: Boolean);
begin
  ActionBeginDate := Now;
end;
 
procedure TForm1.BannerAd1ActionDidFinish(Sender: TObject);
var
  Seconds: Integer;
begin
  Seconds := SecondsBetween(ActionBeginDate, Now);
  WastedSeconds := WastedSeconds + Seconds;
  Label1.Text := IntToStr(WastedSeconds) + ' seconds wasted watching ads so far.'
end;
 
procedure TForm1.FormShow(Sender: TObject);
begin
  BannerAd1.LoadAd;
end;
 
end.

У гуглов в их справке в манифест ещё просят внести мету:

<meta-data android:name="com.google.android.gms.version"
               android:value="@integer/google_play_services_version"/> 

и объявление немного отличается от того, что в справке Rad XE6:

<activity android:name="com.google.android.gms.ads.AdActivity"
             android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

но мету когда добавил ошибка вышла, а в объявлении разница состоит в "gms.", но нужен он или нет не знаю (?)

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

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

  • 0

Есть некоторые продвижения. Делаю релиз в режиме дебага (правда в новую папку), но раз релиз то может быть подписан? Во всяком случае ставится.

Добавил строку: BannerAd1.LoadAd; в FormCreate помимо FormShow

Убрал:

procedure TForm1.BannerAd1ActionCanBegin(Sender: TObject;
  var WillLeaveApplication: Boolean);
begin
  ActionBeginDate := Now;
end;
 
procedure TForm1.BannerAd1ActionDidFinish(Sender: TObject);
var
  Seconds: Integer;
begin
  Seconds := SecondsBetween(ActionBeginDate, Now);
  WastedSeconds := WastedSeconds + Seconds;
  Label1.Text := IntToStr(WastedSeconds) + ' seconds wasted watching ads so far.'
end; 

с их объявлениями и объявлениями их переменных;

отключил TestMode

заменил в манифесте строку:

<activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

на:

<activity android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

 

И появилось чёрное окошко с красными буковками, правда не на всю ширину и это не совсем баннер, но уже что-то, а написано там (то что видно):

....st have AdActivity declared in AndroidM....

                xml with configChanges.

видимо это:

You must have AdActivity declared in AndroidManifest.xml with ConfigChanges

Изменено пользователем Igor
Ссылка на комментарий
  • 0

заменяя мету:

<meta-data android:name="android.app.lib_name"
                android:value="%libNameValue%" />

на:

<meta-data android:name="com.google.android.gms.version"
               android:value="@integer/google_play_services_version"/>

получаю ошибку касательно этих строк и ссылку на справку Troubleshooting: Cannot Deploy an Application for Android

 

но чувствую заменять мету и не нужно вовсе, хоть я точно и не знаю зачем она, но предполагаю что на функционал не влияет

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

В XE7 есть некий Project > Options > Entitlement List, and select AdMob Service исходя из справки

которого нет в моём XE6, мой Entitlement List просто пуст, может SDK какой-то нужно ещё поставить?

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

насколько я понял актуальные мета и объявление такие:

<meta-data android:name="com.google.android.gms.version"
                android:value="4323000"/>
<activity android:name="com.google.android.gms.ads.AdActivity"
             android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

но видимо они работают только в купе с обновлённым (фиксом) Delphi, иначе происходит ошибка:

К сожалению, приложение ***** остановилось.

 

Так что наверное качаем данный фикс и правим при надобности манифест как написано выше. Наверное, т.к. это пока теория не проверенная на практике.

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

насколько я понял актуальные мета и объявление такие:

<meta-data android:name="com.google.android.gms.version"
                android:value="4323000"/>
<activity android:name="com.google.android.gms.ads.AdActivity"
             android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

но видимо они работают только в купе с обновлённым (фиксом) Delphi, иначе происходит ошибка:

К сожалению, приложение ***** остановилось.

 

Так что наверное качаем данный фикс и правим при надобности манифест как написано выше. Наверное, т.к. это пока теория не проверенная на практике.

Ну как? Получилось? У меня тупо не появляется баннер?

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

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

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

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

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

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

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

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

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

×
×
  • Создать...