Facebook Native Ads中的FBNativeAdsManagerDelegate在UIViewController类中正常工作,但在自定义NSObject类中使用时,它无法正常工作,即其委托方法nativeAdsLoaded和nativeAdsFailedToLoadWithError未被调用.
CustomFBAd.h文件
@import FBAudienceNetwork; #import <Foundation/Foundation.h> @protocol OnFBNativeAdLoadedDelegate<NSObject> - (void)onFBNativeAdLoaded:(UIView *)adView; @end @interface CustomFBAd : NSObject @property (nonatomic,weak) id <OnFBNativeAdLoadedDelegate>delegate; -(void)requestNativeAd:(NSString *)FaceBookPlacementID; @end
CustomFBAd.m文件
#import "CustomFBAd.h" @interface CustomFBAd ()<FBNativeAdsManagerDelegate,FBNativeAdDelegate> @property (nonatomic,strong) FBNativeAdsManager *manager; @property (nonatomic,weak) FBNativeAdScrollView *scrollView; @end @implementation CustomFBAd -(void)requestNativeAd:(NSString *)FaceBookPlacementID{ if(FaceBookPlacementID.length != 0){ FBNativeAdsManager *manager = [[FBNativeAdsManager alloc] initWithPlacementID:FaceBookPlacementID forNumAdsRequested:5]; manager.delegate = self; [FBAdSettings addTestDevice:@"cf1bb93becbe6e31f26fdf7d80d19b4ae225afaa"]; [manager loadAds]; self.manager = manager; } } #pragma mark - FBNativeAdDelegate implementation - (void)nativeAdDidClick:(FBNativeAd *)nativeAd { // NSLog(@"Native ad was clicked."); } - (void)nativeAdDidFinishHandlingClick:(FBNativeAd *)nativeAd { // NSLog(@"Native ad did finish click handling."); } - (void)nativeAdWillLogImpression:(FBNativeAd *)nativeAd { // NSLog(@"Native ad impression is being captured."); } #pragma mark FBNativeAdsManagerDelegate -(void)nativeAdDidLoad:(FBNativeAd *)nativeAd { } - (void)nativeAdsLoaded { NSLog(@"Native ads loaded,constructing native UI..."); if (self.scrollView) { [self.scrollView removeFromSuperview]; self.scrollView = nil; } FBNativeAdScrollView *scrollView = [[FBNativeAdScrollView alloc] initWithNativeAdsManager:self.manager withType:FBNativeAdViewTypeGenericHeight120]; scrollView.xInset = 0; scrollView.delegate = self; self.scrollView = scrollView; [self.delegate onFBNativeAdLoaded:self.scrollView]; } - (void)nativeAdsFailedToLoadWithError:(NSError *)error { NSLog(@"Native ads failed to load with error: %@",error); } @end
如上面的代码所述,我在requestNativeAd方法中设置了FBNativeAdsManager的委托
manager.delegate = self;
并且还用作FBNativeAdsManagerDelegate,FBNativeAdDelegate
@interface CustomFBAd ()<FBNativeAdsManagerDelegate,FBNativeAdDelegate>
并将此代码称为
CustomFBAd *objFBAd = [[CustomFBAd alloc]init]; objFBAd.delegate = self; [objFBAd requestNativeAd:@"my_FB_placement_Id"];
任何线索(注意:如果我在UIViewController中使用它,相同的代码可以工作)?谢谢
解决方法
如果你的委托方法是在uiviewcontroller中调用的,那么代码就会出现问题.我想你必须在你的控制器中有一个强大的CustomFBAd参考.因为其他参考文献都没有抓住您的CustomFBAd.希望能帮助到你
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。