我已在我的iOS应用中添加了Facebook受众群体网络,以进行原生广告整合。一切正常,但只有测试广告。
我添加了testDeviceKey来显示广告,如果我尝试删除它,那么没有广告显示也让我感到困惑。我的代码是 -
@implementation AdFeedsView
FBNativeAd *nativeAd;
static NSString *adPlacementId = @"xxxxxxxxx";
- (void)showNativeAd:(UIViewController *)vc
{
nativeAd = [[FBNativeAd alloc] initWithPlacementID:adPlacementId];
nativeAd.delegate = self;
NSLog(@"isTestMode1: %d",[FBAdSettings isTestMode]);
NSString *testDeviceKey = [FBAdSettings testDeviceHash];
if (testDeviceKey) {
[FBAdSettings addTestDevice:testDeviceKey];
}
[nativeAd loadAd];
}
所以我只想问一下,我需要在代码中做些哪些更改,以便除了在我的实时应用中测试广告外,我们还能看到正确的广告?
答案 0 :(得分:2)
最后我找到了解决方案。其实我已经添加了代码
NSString *testDeviceKey = [FBAdSettings testDeviceHash];
if (testDeviceKey) {
[FBAdSettings addTestDevice:testDeviceKey];
}
这使得所有有源设备都成为测试设备,因此只有测试广告。我已在实时版本中删除它并包含代码
[FBAdSettings clearTestDevices];
我们也可以
if ([FBAdSettings isTestMode]) {
[FBAdSettings clearTestDevice:[FBAdSettings testDeviceHash]];
}
我对 testmode 的看法不对。我认为当我的应用程序生效时它会是错误的,但实际上它只是说该设备已被添加为测试设备。
答案 1 :(得分:0)
Swift 3
此代码将确保您的测试广告在testflight或模拟器/设备上展示,并确保您何时向应用商店发布广告将显示为实时广告和测试设备将被清除。
如果您的广告位于很多地方,您可以将此代码放入AppDelegate
import FBAudienceNetwork
private func facebookAdsControl() {
#if RELEASE
self.clearTestDevicesForFacebookAds()
#else
self.addTestDevicesForFacebookAds()
#endif
}
///remove for live mode
private func addTestDevicesForFacebookAds(){
let key = FBAdSettings.testDeviceHash()
FBAdSettings.setLogLevel(FBAdLogLevel.Log)
FBAdSettings.addTestDevice(key)
}
///add for live mode
private func clearTestDevicesForFacebookAds() {
FBAdSettings.clearTestDevices()
}
在facebookAdsControl()
didFinishLaunchingWithOptions
您也可以在包含广告的代码中调用此代码,但请确保在adView.load()
为了使用宏,您必须在Build Settings
中将标志添加到Swift Flags中我希望这可以帮助某人,因为Facebook Docs并不像我发现的那样清晰。