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中使用它,相同的代码可以工作)?谢谢