Advertisement
dondonondon

BFA.Admob.pas

Sep 10th, 2021
1,446
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 6.94 KB | None | 0 0
  1. unit BFA.Admob;
  2.  
  3. interface
  4.  
  5. uses
  6.   System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  7.   FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  8.   FMX.Ani, FMX.Controls.Presentation, FMX.Layouts, FMX.Objects, FMX.DialogService,
  9.   FMX.ListView.Types, FMX.ListView.Appearances, FMX.ListView.Adapters.Base, FMX.LoadingIndicator,
  10.   FMX.ListView, FMX.ScrollBox, FMX.Memo, FMX.TabControl, System.ImageList, System.Math,
  11.   FMX.ImgList, FMX.MultiView, FMXTee.Engine, FMXTee.Series, FMX.VirtualKeyboard,
  12.   FMXTee.Procs, FMXTee.Chart, REST.Types, REST.Client, Data.Bind.Components,
  13.   Data.Bind.ObjectScope, FMX.Gestures, FMX.Effects, FMX.Platform,
  14.   FMX.ListBox, FMX.Advertising, System.Threading, System.Generics.Collections
  15.   {$IF Defined(ANDROID)}
  16.     ,Androidapi.JNI.AdMob, Androidapi.Helpers, FMX.Platform.Android,
  17.     FMX.Helpers.Android, Androidapi.JNI.PlayServices, Androidapi.JNI.Os,
  18.     Androidapi.JNI.JavaTypes, Androidapi.JNIBridge, Androidapi.JNI.Embarcadero;
  19.   {$ELSEIF Defined(MSWINDOWS)}
  20.     ;
  21.   {$ENDIF}
  22.  
  23. type
  24.     HelperObject = class
  25.       public
  26.         class procedure fnClickImage(ASender : TObject);
  27.     end;
  28.   {$IFDEF ANDROID}
  29.  
  30.     TMyAdViewListener = class(TJavaLocal, JIAdListener)
  31.     private
  32.       FAD : JInterstitialAd;
  33.     public
  34.       constructor Create(AAD : JInterstitialAd);
  35.       procedure onAdClosed; cdecl;
  36.       procedure onAdFailedToLoad(errorCode : Integer); cdecl;
  37.       procedure onAdLeftApplication; cdecl;
  38.       procedure onAdOpened; cdecl;
  39.       procedure onAdLoaded; cdecl;
  40.     end;
  41.   {$ENDIF}
  42.  
  43. procedure fnLoadInterstitial(id : String);
  44. procedure fnCreateBanner(id : String; AParent : TControl; FEvent : TAdDidFailEvent = nil; FPos : Integer = 0);
  45. procedure fnDisposeBanner; overload;
  46.  
  47. const
  48.   FPosBannerClient  = 0;
  49.   FPosBannerTop     = 1;
  50.   FPosBannerBottom  = 2;
  51.   FPosBannerCenter  = 3;
  52.  
  53. var
  54.   coAds, maxCoAds : Integer;
  55.  
  56.   FLayoutBanner : TLayout;
  57.   ALabel : TLabel;
  58. {$IFDEF ANDROID}
  59.   LAdViewListener : TMyAdViewListener;
  60.   FInterStitial : JInterstitialAd;
  61.  
  62.   ABanner : TBannerAd;
  63.   APanel : TPanel;
  64. {$ENDIF}
  65.  
  66. implementation
  67.  
  68. { TMyAdViewListener }
  69.  
  70. uses BFA.Func, BFA.Main, BFA.Helper.Control, BFA.Helper.Main, BFA.OpenUrl;
  71.  
  72. procedure fnCreateBanner(id : String; AParent : TControl; FEvent : TAdDidFailEvent; FPos : Integer);
  73. var
  74.   FImage : TImage;
  75. begin
  76.   TThread.Synchronize(nil, procedure begin
  77.     if id = '' then
  78.       Exit;
  79.  
  80.     FImage := TImage.Create(nil);
  81.     FImage.Visible := False;
  82.     FImage.WrapMode := TImageWrapMode.Fit;
  83.     FImage.StyleName := 'banner_image';
  84.     FImage.HitTest := True;
  85.     FImage.OnClick := HelperObject.fnClickImage;
  86.     AParent.AddObject(FImage);
  87.  
  88.     FImage.setAnchorContent;
  89.     FImage.LoadFromLoc('banner.png');
  90.  
  91.     ALabel := TLabel.Create(nil);
  92.     ALabel.Parent := AParent;
  93.     ALabel.setAnchorContent;
  94.     ALabel.TextSettings.HorzAlign := TTextAlign.Center;
  95.     ALabel.Text := 'load advertising';
  96.     ALabel.Font.Size := 12.5;
  97.     ALabel.FontColor := $FFFFFFFF;
  98.  
  99.     ALabel.StyledSettings := [];
  100.  
  101.     FImage.BringToFront;
  102.  
  103.     {$IF DEFINED (ANDROID)}
  104.       APanel := TPanel.Create(AParent);
  105.       APanel.Parent := AParent;
  106.       APanel.ControlType := TControlType.Platform;
  107.       APanel.StyleLookup := 'pMain'; //transparent Panel style
  108.       APanel.Width := AParent.Width;
  109.       APanel.Height := 50;
  110.       APanel.Position.X := 0;
  111.  
  112.       if FPos = FPosBannerClient then begin
  113.         APanel.setAnchorContent; //align content
  114.       end else if FPos = FPosBannerTop then begin
  115.         APanel.Position.Y := 0;
  116.       end else if FPos = FPosBannerBottom then begin
  117.         APanel.Position.Y := AParent.Height - APanel.Height;
  118.       end else if FPos = FPosBannerCenter then begin
  119.         APanel.Position.Y := (AParent.Height - APanel.Height) / 2;
  120.       end;
  121.  
  122.       ABanner := TBannerAd.Create(APanel);
  123.       ABanner.Parent := APanel;
  124.       ABanner.TestMode := False;
  125.       ABanner.Align := TAlignLayout.Contents;
  126.       ABanner.AdSize := TBannerAdSize.Small;
  127.  
  128.  
  129.       ABanner.OnDidFail := FEvent;
  130.  
  131.       ABanner.AdUnitID := id;
  132.       ABanner.LoadAd;
  133.     {$ELSEIF DEFINED (MSWINDOWS)}
  134.       //ALabel.Text := 'advertising';
  135.       FImage.Visible := True;
  136.     {$ENDIF}
  137.   end);
  138.  
  139. end;
  140.  
  141. procedure fnDisposeBanner;
  142. begin
  143.  
  144.   TThread.Synchronize(nil, procedure var i : Integer; begin
  145.     if Assigned(ALabel) then begin
  146.       ALabel.DisposeOf;
  147.       ALabel := nil;
  148.     end;
  149.     {$IFDEF ANDROID}
  150.       if Assigned(APanel) then begin
  151.         for i := 0 to APanel.ControlsCount - 1 do begin
  152.           TBannerAd(APanel.Controls[i]).DisposeOf;
  153.         end;
  154.  
  155.         ABanner := nil;
  156.  
  157.         APanel.DisposeOf;
  158.         APanel := nil;
  159.       end;
  160.     {$ENDIF}
  161.   end);
  162.  
  163. end;
  164.  
  165. procedure fnLoadInterstitial(id : String);
  166. {$IFDEF ANDROID}
  167.   var
  168.     LADRequestBuilder : JAdRequest_Builder;
  169.     LadRequest : JAdRequest;
  170. {$ENDIF}
  171. begin
  172.   {$IFDEF ANDROID}
  173.     if id = '' then
  174.       Exit;
  175.  
  176.     fnLoadLoading(True, 'Load Advertising');
  177.  
  178.     coAds := maxCoAds;
  179.  
  180.     FInterStitial := TJinterstitialAd.JavaClass.init(MainActivity);
  181.     FInterStitial.setAdUnitId
  182.       (StringToJString(id));
  183.  
  184.     LADRequestBuilder := TJAdRequest_Builder.Create;
  185.  
  186.     {LADRequestBuilder.addKeyword(StringToJString('Mesothelioma Law Firm'));
  187.     LADRequestBuilder.addKeyword(StringToJString('Donate Car to Charity California'));
  188.     LADRequestBuilder.addKeyword(StringToJString('Donate Car for Tax Credit'));
  189.     LADRequestBuilder.addKeyword(StringToJString('Donate Cars in MA'));
  190.     LADRequestBuilder.addKeyword(StringToJString('Donate Your Car Sacramento'));
  191.     LADRequestBuilder.addKeyword(StringToJString('How to Donate A Car in California'));
  192.     LADRequestBuilder.addKeyword(StringToJString('software untuk mengakses internet'));
  193.     LADRequestBuilder.addKeyword(StringToJString('plasa hosting'));
  194.     LADRequestBuilder.addKeyword(StringToJString('jasa pembuatan website iklan baris'));}
  195.  
  196.     LadRequest := LADRequestBuilder.Build();
  197.  
  198.  
  199.     LAdViewListener := TMyAdViewListener.Create(FInterStitial);
  200.     CallInUIThread(
  201.     procedure
  202.     begin
  203.       FInterStitial.setAdListener(TJAdListenerAdapter.JavaClass.init
  204.       (LAdViewListener));
  205.       FInterStitial.LoadAd(LadRequest);
  206.     end
  207.     );
  208.   {$ENDIF}
  209. end;
  210.  
  211. {$IFDEF ANDROID}
  212. constructor TMyAdViewListener.Create(AAD: JInterstitialAd);
  213. begin
  214.     inherited Create;
  215.     FAD := AAD;
  216. end;
  217.  
  218. procedure TMyAdViewListener.onAdClosed;
  219. begin
  220.   fnLoadLoading(False);
  221. end;
  222.  
  223. procedure TMyAdViewListener.onAdFailedToLoad(errorCode: Integer);
  224. begin
  225.   coAds := maxCoAds - Round(0.55 * maxCoAds);
  226.   fnLoadLoading(False);
  227. end;
  228.  
  229. procedure TMyAdViewListener.onAdLeftApplication;
  230. begin
  231.  
  232. end;
  233.  
  234. procedure TMyAdViewListener.onAdLoaded;
  235. begin
  236.     FAD.Show;
  237. end;
  238.  
  239. procedure TMyAdViewListener.onAdOpened;
  240. begin
  241.  
  242. end;
  243. {$ENDIF}
  244.  
  245. { HelperObject }
  246.  
  247. class procedure HelperObject.fnClickImage(ASender: TObject);
  248. begin
  249.   OpenUrl('https://google.com');
  250. end;
  251.  
  252. end.
  253.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement