FBInterstitialAd showAdFromRootViewController失败

时间:2016-05-11 05:02:50

标签: ios facebook-ios-sdk

我正在开发iOS应用程序,并且最近集成了适用于iOS的Facebook SDK。 目前使用版本4.11.0,FBAdViewFBInterstitialAd用于Facebook Audience网络广告。我的应用中的实现几乎与SDK中提供的AdUnitsSample应用相同。

FBAdView横幅广告很好,但我发现FBInterstitialAd存在严重问题。第一次显示插页式广告时,它工作正常并正确解散。但是,如果用户点击广告(在应用内浏览器中显示网页或App Store页面),然后使用'取消'或者'完成'按钮返回插页式广告然后返回到应用,然后无法在后续请求中显示广告。

对于失败的请求,loadAd方法正常工作,interstitialAdDidLoad:委托方法照常被触发,但是当我调用showAdFromRootViewController:时没有任何反应,除了此警告之外控制台日志:

Warning: Attempt to present <FBInterstitialAdInternal: 0x1626fc90> on <FBInterstitialAdInternal: 0x163488d0> whose view is not in the window hierarchy!

我的应用和AdUnitsSample应用之间的唯一区别是我的应用使用基于XIB的用户界面UINavigationController,而示例应用使用了Storyboard和UITabBarController。我对showAdFromRootViewController:方法的调用将我的根视图控制器作为参数发送,这是当前屏幕上的UIViewController

根据警告,似乎Facebook插页式广告试图在之前的插页式广告(FBInterstitialAdUIViewController子类)之上展示自己,我不明白为什么。除非我能解决这个问题,否则我只需要删除插页式广告,这不是很好。

有什么想法吗?

更新

在使用AdUnitsSample应用程序之后,我意识到另一个不同之处。示例应用程序使用ARC,但我的应用程序没有。 果然,当我在示例应用程序中关闭ARC时,我得到了完全相同的故障。我不知道如何解决这个问题,因为我的应用程序依赖于一些不为ARC构建的第三方库,我无法启用ARC。

2 个答案:

答案 0 :(得分:1)

我们遇到同样的问题。

您应该在.mm文件中添加-fobjc-arc标志(使用FBInterstitialAd api)。

答案 1 :(得分:0)

这更像是一个解决方案,而不是一个真正的解决方案,但我最终创建了一个包含并显示UIViewController对象的FBInterstitialAd包装类。 我在这个文件中启用了ARC,在设置中使用-fobjc-arc标志。 起初它不起作用,使用包装器视图控制器的普通模态表示。然后,我尝试将包装器视图控制器推到导航堆栈上(因为我的应用程序在根视图上有一个导航控制器)。 它并不理想,但这种方法确实有效。