zoukankan      html  css  js  c++  java
  • Delphi XE4 iAD Framework 支持.

    太赞了这个. 如此也证实了 IOS 的 Framework的使用方式. 定义接口文件,就可以了. 要做的就是语法的转换问题. 
    这个方法我也想过,还没有具体实施. 值得参考和扩展,其它的很多Framework 也是可以做到的. 当然还有bug// 离实际可用还有距离,
    而我上次提交的App 苹果也给Reject 了. 貌似是分辨率不能支持得很好. - 是我的问题, 我用了一个WebVIew 但加载的页面没有适应ipad.
    还有一个问题就是 我的应用太简单了. :) 等有时间再完善一下 再说.
      1     //
      2     // Delphi XE4 - iOS_Library_iAd
      3     //
      4     //  http://blog.naver.com/simonsayz
      5     //  Simon,Choi (최원식옹)
      6     //
      7     //  History
      8     //   2013.05.22 Ver 0.01  1st Release
      9     //
     10     //  Known Bug.
     11     //   - On Simulator, When press ad, Screen will be black.
     12     //     Why ?   Can't solved yet. 2013.05.22
     13     //
     14     //  Warning
     15     //   - This code is not perfect. Just guide to start to how to implement
     16     //
     17     //
     18     unit iOS_Library_iAd;
     19      
     20      
     21     interface
     22      
     23     uses Macapi.ObjectiveC,
     24          iOSapi.CocoaTypes, iOSapi.CoreGraphics, iOSapi.Foundation, iOSapi.UIKit;
     25      
     26     const
     27      libCoreiAd = '/System/Library/Frameworks/iAd.framework/iAd';
     28      
     29     Type
     30      id = Pointer;
     31      
     32      {$M+}
     33     { ADBannerView }
     34       ADBannerViewClass = interface(UIViewClass) end;
     35       ADBannerView      = interface(UIView)
     36         procedure setDelegate (newValue: id); cdecl;
     37         function delegate: id; cdecl;
     38         function isBannerLoaded: Boolean; cdecl;
     39         procedure setRequiredContentSizeIdentifiers (newValue: NSSet); cdecl;
     40         function requiredContentSizeIdentifiers: NSSet; cdecl;
     41         procedure setCurrentContentSizeIdentifier (newValue: NSString); cdecl;
     42         function currentContentSizeIdentifier: NSString; cdecl;
     43         {class} function sizeFromBannerContentSizeIdentifier
     44                          (contentSizeIdentifier: NSString): CGSize; cdecl;
     45         procedure setAdvertisingSection (newValue: NSString); cdecl;
     46         function advertisingSection: NSString; cdecl;
     47         function isBannerViewActionInProgress: Boolean; cdecl;
     48         procedure cancelBannerViewAction; cdecl;
     49       end;
     50      TADBannerView = class (TOCGenericImport<ADBannerViewClass,ADBannerView>) end;
     51      
     52      
     53     { ADBannerViewDelegate Protocol }
     54       ADBannerViewDelegate = interface(IObjectiveC)
     55         procedure bannerViewWillLoadAd(banner: ADBannerView); cdecl;
     56         procedure bannerViewDidLoadAd(banner: ADBannerView); cdecl;
     57         procedure bannerView(banner: ADBannerView; didFailToReceiveAdWithError: NSError); cdecl;
     58         function  bannerViewActionShouldBegin
     59                   (banner: ADBannerView; willLeaveApplication : Boolean): Boolean; cdecl;
     60         procedure bannerViewActionDidFinish(banner: ADBannerView); cdecl;
     61       end;
     62      
     63       //---------------------------------------------------------------------------
     64       TNotifyEvent        = Procedure (Sender : TObject) of Object;
     65       TNotifyMessageEvent = Procedure (Sender : TObject; Msg : String) of Object;
     66      
     67       //
     68       TADBannerViewDelegate = class(TOCLocal,ADBannerViewDelegate)
     69       Private
     70        FMe     : TObject;
     71        FOnLoad : TNotifyEvent;
     72        FOnFail : TNotifyEvent;
     73        FOnMsg  : TNotifyMessageEvent;
     74       public
     75        procedure bannerViewWillLoadAd(banner: ADBannerView); cdecl;
     76        procedure bannerViewDidLoadAd(banner: ADBannerView); cdecl;
     77        procedure bannerView(banner: ADBannerView; didFailToReceiveAdWithError: NSError); cdecl;
     78        function  bannerViewActionShouldBegin
     79                  (banner: ADBannerView; willLeaveApplication : Boolean): Boolean; cdecl;
     80        procedure bannerViewActionDidFinish(banner: ADBannerView); cdecl;
     81       end;
     82      
     83      //
     84      TiOSiAd = Class(TObject)
     85      Private
     86       //
     87       Function  GetOnLoad          : TNotifyEvent;
     88       Procedure SetOnLoad  ( Value : TNotifyEvent);
     89       Function  GetOnFail          : TNotifyEvent;
     90       Procedure SetOnFail  ( Value : TNotifyEvent);
     91       Function  GetOnMsg           : TNotifyMessageEvent;
     92       Procedure SetOnMsg   ( Value : TNotifyMessageEvent);
     93      Public
     94       FSelf    : TObject;
     95       FControl :  ADBannerView;
     96       FEvent   : TADBannerViewDelegate;
     97       //
     98       Constructor Create; Virtual;
     99       Destructor  Destroy; Override;
    100       Procedure   Free;
    101       //
    102       Property  OnLoad : TNotifyEvent        Read GetOnLoad Write SetOnLoad;
    103       Property  OnFail : TNotifyEvent        Read GetOnFail Write SetOnFail;
    104       Property  OnMsg  : TNotifyMessageEvent REad GetOnMsg  Write SetOnMsg;
    105      End;
    106      
    107     // exported string consts
    108      
    109     function ADErrorDomain: NSString;
    110     function ADBannerContentSizeIdentifier320x50: NSString; // deprecated 'in iOS 4.2 and later';
    111     function ADBannerContentSizeIdentifier480x32: NSString; // deprecated 'in iOS 4.2 and later';
    112     function ADBannerContentSizeIdentifierPortrait: NSString;
    113     function ADBannerContentSizeIdentifierLandscape: NSString;
    114      
    115     implementation
    116      
    117     uses
    118       Posix.Dlfcn;
    119     var
    120       iAdModule: THandle;
    121      
    122     const
    123       iAdFwk: string = '/System/Library/Frameworks/iAd.framework/iAd';
    124      
    125     function ADErrorDomain: NSString;
    126      begin
    127       Result := CocoaNSStringConst(iAdFwk, 'ADErrorDomain');
    128      end;
    129      
    130     function ADBannerContentSizeIdentifier320x50: NSString;
    131      begin
    132       Result := CocoaNSStringConst(iAdFwk, 'ADBannerContentSizeIdentifier320x50');
    133      end;
    134      
    135     function ADBannerContentSizeIdentifier480x32: NSString;
    136      begin
    137       Result := CocoaNSStringConst(iAdFwk, 'ADBannerContentSizeIdentifier480x32');
    138      end;
    139      
    140     function ADBannerContentSizeIdentifierPortrait: NSString;
    141      begin
    142       Result := CocoaNSStringConst(iAdFwk, 'ADBannerContentSizeIdentifierPortrait');
    143      end;
    144      
    145     function ADBannerContentSizeIdentifierLandscape: NSString;
    146      begin
    147       Result := CocoaNSStringConst(iAdFwk, 'ADBannerContentSizeIdentifierLandscape');
    148      end;
    149      
    150     //------------------------------------------------------------------------------
    151     //
    152     //  iOSAd  := TiOSiAd.Create(nil);
    153     //  iOSAd.Parent  := Self.View;
    154     //
    155     //------------------------------------------------------------------------------
    156      
    157     //
    158     Procedure TADBannerViewDelegate.bannerViewWillLoadAd(banner: ADBannerView);
    159      begin
    160       if Assigned(FOnLoad) then FOnLoad(FMe);
    161       if Assigned(FOnMsg ) then FOnMsg(FMe,'willLoadAd');
    162      end;
    163      
    164     //
    165     Procedure TADBannerViewDelegate.bannerView
    166               (banner: ADBannerView; didFailToReceiveAdWithError: NSError);
    167      begin
    168       if Assigned(FOnFail) then FOnFail(FMe);
    169       if Assigned(FOnMsg ) then FOnMsg(FMe,'didFailToReceiveAdWithError');
    170      end;
    171      
    172     //
    173     procedure TADBannerViewDelegate.bannerViewDidLoadAd(banner: ADBannerView); cdecl;
    174      begin
    175       if Assigned(FOnFail) then FOnFail(FMe);
    176       if Assigned(FOnMsg ) then FOnMsg(FMe,'ViewDidLoadAd');
    177      end;
    178      
    179     //
    180     function  TADBannerViewDelegate.bannerViewActionShouldBegin
    181     (banner: ADBannerView; willLeaveApplication : Boolean): Boolean; cdecl;
    182      begin
    183       if Assigned(FOnFail) then FOnFail(FMe);
    184       if Assigned(FOnMsg ) then FOnMsg(FMe,'ActionShouldBegin');
    185       Result := True;
    186      end;
    187      
    188     //
    189     procedure TADBannerViewDelegate.bannerViewActionDidFinish(banner: ADBannerView); cdecl;
    190      begin
    191       if Assigned(FOnFail) then FOnFail(FMe);
    192       if Assigned(FOnMsg ) then FOnMsg(FMe,'ActionDidFinish');
    193      end;
    194      
    195     //------------------------------------------------------------------------------
    196      
    197     //
    198     Constructor TiOSiAd.Create;
    199      begin
    200       inherited;
    201       // initialize --------------------------
    202       FEvent         := TADBannerViewDelegate.Create;
    203       FEvent.FOnLoad := nil;
    204       FEvent.FOnFail := nil;
    205       //
    206       FControl :=  TADBannerView.Wrap( TADBannerView.OCClass.alloc);
    207       FControl.initWithFrame( CGRectMake (0,480-20-50,320,50) );
    208       FControl.setCurrentContentSizeIdentifier(ADBannerContentSizeIdentifierPortrait);
    209       FControl.setDelegate(FEvent.GetObjectID);
    210       //
    211       FSelf := Self;
    212      end;
    213      
    214     Destructor TiOSiAd.Destroy;
    215      begin
    216       //
    217       FControl.release;
    218       FControl := nil;
    219       //
    220       FEvent.Free;
    221       FEvent   := nil;
    222       //
    223       inherited;
    224      end;
    225      
    226     //
    227     Procedure  TiOSiAd.Free;
    228      begin
    229             If Self <> nil then
    230              Destroy;
    231      end;
    232      
    233     //
    234     Function  TiOSiAd.GetOnLoad : TNotifyEvent;
    235      begin
    236       Result := FEvent.FOnLoad;
    237      end;
    238      
    239     //
    240     Procedure TiOSiAd.SetOnLoad ( Value : TNotifyEvent );
    241      begin
    242       FEvent.FOnLoad := Value;
    243      end;
    244      
    245     //
    246     Function  TiOSiAd.GetOnFail : TNotifyEvent;
    247      begin
    248       Result := FEvent.FOnFail;
    249      end;
    250      
    251     //
    252     Procedure TiOSiAd.SetOnFail ( Value : TNotifyEvent );
    253      begin
    254       FEvent.FOnFail := Value;
    255      end;
    256      
    257     //
    258     Function  TiOSiAd.GetOnMsg : TNotifyMessageEvent;
    259      begin
    260       Result := FEvent.FOnMsg;
    261      end;
    262      
    263     //
    264     Procedure TiOSiAd.SetOnMsg ( Value : TNotifyMessageEvent );
    265      begin
    266       FEvent.FOnMsg := Value;
    267      end;
    268      
    269     initialization
    270       iAdModule := dlopen(MarshaledAString(libCoreiAd), RTLD_LAZY);
    271      
    272     finalization
    273       dlclose(iAdModule);
    274      
    275     end.

    只需要把上述两个文件保存以后 加入工程就可以了. 

     

  • 相关阅读:
    论文复现
    20199324 2019-2020-2 《网络攻防实践》第12周作业
    20199324 2019-2020-2 《网络攻防实践》第10周作业
    20199324 2019-2020-2 《网络攻防实践》第9周作业
    Android Dalvikvm的学习笔记
    20199324 2019-2020-2 《网络攻防实践》第8周作业
    20199324 2019-2020-2 《网络攻防实践》第7周作业
    445. Add Two Numbers II
    167. Two Sum II
    643. Maximum Average Subarray I
  • 原文地址:https://www.cnblogs.com/cnsoft/p/3094658.html
Copyright © 2011-2022 走看看