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.

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

 

 

posted @ 2013-05-23 12:53  小糊涂的超级blog  阅读(678)  评论(0编辑  收藏  举报