gpt4 book ai didi

ios - 未调用 Facebook Native Ads FBNativeAdsManagerDelegate 实现方法

转载 作者:可可西里 更新时间:2023-11-01 03:16:57 25 4
gpt4 key购买 nike

Facebook 原生广告中的

FBNativeAdsManagerDelegateUIViewController 类中正常工作,但在自定义 NSObject 类中使用时它不起作用,即它的委托(delegate)方法 nativeAdsLoadednativeAdsFailedToLoadWithError 没有被调用。

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 的委托(delegate)设置为

manager.delegate = self;

也用作FBNativeAdsManagerDelegate,FBNativeAdDelegate

@interface CustomFBAd ()<FBNativeAdsManagerDelegate,FBNativeAdDelegate>

并将此代码称为

    CustomFBAd *objFBAd = [[CustomFBAd alloc]init];
objFBAd.delegate = self;
[objFBAd requestNativeAd:@"my_FB_placement_Id"];

任何线索(注意:如果我在 UIViewController 中使用相同的代码,它也可以工作)?谢谢

最佳答案

在强烈引用 CustomFBAd 之后,它终于可以正常工作了(感谢@MuhammadZohaibEhsan)。所以将 CustomFBAd 初始化为

@property(nonatomic, strong) CustomFBAd * objFBAd;

并改变

    CustomFBAd *objFBAd = [[CustomFBAd alloc]init];
objFBAd.delegate = self;
[objFBAd requestNativeAd:@"my_FB_placement_Id"];

    self.objFBAd = [[CustomFBAd alloc]init];
self.objFBAd.delegate = self;
[self.objFBAd requestNativeAd:@"my_FB_placement_Id"];

关于ios - 未调用 Facebook Native Ads FBNativeAdsManagerDelegate 实现方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35746643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com