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

Error "Message must be shown in the main UI thread"


toland

Вопрос

В Delphi 10 Berlin cоздаю пустое приложение, добавляю TBannerAd, настраиваю в соответсвии с Embarcodero вебсайтом описанием, ставлю True в Entitlement list и User Permissions для Internet и Access Network state, делаю TBannerAd.Align=MostBottom, TBannerAd.TestMode=true, исправляю манифест файл или не исправляю, все равно при запуске на Android TBannerAd ничего не показывает и на OnDidFail event выдает:  "Message must be shown in the main UI thread"

Где еще копать? Все перепробовал. Вот весь код приложения:

 

procedure TForm1.BannerAd1DidFail(Sender: TObject; const Error: string);
begin
  ShowMessage( Error );
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  BannerAd1.AdUnitID := 'ca-app-pub-4764996711058034/1111101905';
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  BannerAd1.LoadAd;
end;

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

 

 

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

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

  • 0

Спасибо Pax Peach, Вы правы, после замены  ShowMessage( Error );  на

CallInUiThread (
      procedure
      begin
        TJToast.JavaClass.makeText (SharedActivityContext,
            StrToJCharSequence(Msg), ToastLength).show
      end

Получаю Error в OnDidFail  "Ad failed to load: 2"  что не многим более понятно, чем предыдущее сообщение, но уже лучше

Ссылка на комментарий
  • 0
  • Модераторы
18 минут назад, toland сказал:

Спасибо Pax Peach, Вы правы, после замены  ShowMessage( Error );  на

CallInUiThread (
      procedure
      begin
        TJToast.JavaClass.makeText (SharedActivityContext,
            StrToJCharSequence(Msg), ToastLength).show
      end

Получаю Error в OnDidFail  "Ad failed to load: 2"  что не многим более понятно, чем предыдущее сообщение, но уже лучше

С соединением у вас проблемы какие то...

Подробнее тут ERROR_CODE_NETWORK_ERROR

 

Вот ещё рекомендация, всегда проверяйте подключение к интернету, перед загрузкой баннера. (в своей статье тоже забыл об этом написать...)

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

Спасибо, я нашел этот еррор код, но реальность оказалась гораздо прозаичнее - неправильная дата на моем селфоне. Исправил дату - все заработало. Если бы не комментарий какого-то товарища на просторах интернета сто лет бы еще искал причину. Гууглу и Адмобу хорошо бы более внимательно относиться к разработчикам.

Изменено пользователем toland
Ссылка на комментарий
  • 0
9 часов назад, Andrey Efimov сказал:

С соединением у вас проблемы какие то...

Подробнее тут ERROR_CODE_NETWORK_ERROR

 

Вот ещё рекомендация, всегда проверяйте подключение к интернету, перед загрузкой баннера. (в своей статье тоже забыл об этом написать...)

Andrey Efimov, как правильно это делать? Может у Вас есть готовая функция проверки наличия интернета?

Ссылка на комментарий
  • 0
40 минут назад, Pax Beach сказал:

 Может у Вас есть готовая функция проверки наличия интернета?

Может быть такой код поможет?

unit UntNetwork;

interface

function IsConnected: Boolean;

function IsWiFiConnected: Boolean;

function IsMobileConnected: Boolean;

implementation

uses
  System.SysUtils,
  Androidapi.JNIBridge,
  Androidapi.JNI.GraphicsContentViewText,
  Androidapi.JNI.JavaTypes,
  FMX.Helpers.Android, Androidapi.Helpers{, Misc};

type
  JConnectivityManager = interface;
  JNetworkInfo = interface;

  JNetworkInfoClass = interface(JObjectClass)
  ['{E92E86E8-0BDE-4D5F-B44E-3148BD63A14C}']
  end;

  [JavaSignature('android/net/NetworkInfo')]
  JNetworkInfo = interface(JObject)
  ['{6DF61A40-8D17-4E51-8EF2-32CDC81AC372}']
    {Methods}
    function isAvailable: Boolean; cdecl;
    function isConnected: Boolean; cdecl;
    function isConnectedOrConnecting: Boolean; cdecl;
  end;
  TJNetworkInfo = class(TJavaGenericImport<JNetworkInfoClass, JNetworkInfo>) end;

  JConnectivityManagerClass = interface(JObjectClass)
  ['{E03A261F-59A4-4236-8CDF-0068FC6C5FA1}']
    {Property methods}
    function _GetTYPE_WIFI: Integer; cdecl;
    function _GetTYPE_WIMAX: Integer; cdecl;
    function _GetTYPE_MOBILE: Integer; cdecl;
    {Properties}
    property TYPE_WIFI: Integer read _GetTYPE_WIFI;
    property TYPE_WIMAX: Integer read _GetTYPE_WIMAX;
    property TYPE_MOBILE: Integer read _GetTYPE_MOBILE;
  end;

  [JavaSignature('android/net/ConnectivityManager')]
  JConnectivityManager = interface(JObject)
  ['{1C4C1873-65AE-4722-8EEF-36BBF423C9C5}']
    {Methods}
    function getActiveNetworkInfo: JNetworkInfo; cdecl;
    function getNetworkInfo(networkType: Integer): JNetworkInfo; cdecl;
  end;
  TJConnectivityManager = class(TJavaGenericImport<JConnectivityManagerClass, JConnectivityManager>) end;

function GetConnectivityManager: JConnectivityManager;
var
  ConnectivityServiceNative: JObject;
begin
  ConnectivityServiceNative := SharedActivityContext.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE);
  if not Assigned(ConnectivityServiceNative) then
    raise Exception.Create('Could not locate Connectivity Service');
  Result := TJConnectivityManager.Wrap(
    (ConnectivityServiceNative as ILocalObject).GetObjectID);
  if not Assigned(Result) then
    raise Exception.Create('Could not access Connectivity Manager');
end;

function IsConnected: Boolean;
var
  ConnectivityManager: JConnectivityManager;
  ActiveNetwork: JNetworkInfo;
begin
  ConnectivityManager := GetConnectivityManager;
  ActiveNetwork := ConnectivityManager.getActiveNetworkInfo;
  Result := Assigned(ActiveNetwork) and ActiveNetwork.isConnected;
end;

function IsWiFiConnected: Boolean;
var
  ConnectivityManager: JConnectivityManager;
  WiFiNetwork: JNetworkInfo;
begin
  ConnectivityManager := GetConnectivityManager;
  WiFiNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_WIFI);
  Result := WiFiNetwork.isConnected;
end;

function IsMobileConnected: Boolean;
var
  ConnectivityManager: JConnectivityManager;
  MobileNetwork: JNetworkInfo;
begin
  ConnectivityManager := GetConnectivityManager;
  MobileNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_MOBILE);
  Result := MobileNetwork.isConnected;
end;

end.

Хотя лично мне интересно как пропинговать какой-нибудь сервер (желательно без Indy компонент)...

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

Может быть такой код поможет?

Хотя лично мне интересно как пропинговать какой-нибудь сервер (желательно без Indy компонент)...

Опрос сетевых устройств — штука полезная, спасибо. Но хотелось бы понимать, что инет есть.

Хоть пинг, хоть трасса, была бы еще полезнее.

 

Ссылка на комментарий
  • 0
  • Модераторы
В 21.07.2016 в 15:39, Pax Beach сказал:

Опрос сетевых устройств — штука полезная, спасибо. Но хотелось бы понимать, что инет есть.

Хоть пинг, хоть трасса, была бы еще полезнее.

можно воспользоваться DeviceInfo

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

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

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

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

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

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

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

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

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

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

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