我正在开发iOS应用程序,并且最近集成了适用于iOS的Facebook SDK。
目前使用版本4.11.0,FBAdView
和FBInterstitialAd
用于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插页式广告试图在之前的插页式广告(FBInterstitialAd
是UIViewController
子类)之上展示自己,我不明白为什么。除非我能解决这个问题,否则我只需要删除插页式广告,这不是很好。
有什么想法吗?
更新
在使用AdUnitsSample应用程序之后,我意识到另一个不同之处。示例应用程序使用ARC,但我的应用程序没有。 果然,当我在示例应用程序中关闭ARC时,我得到了完全相同的故障。我不知道如何解决这个问题,因为我的应用程序依赖于一些不为ARC构建的第三方库,我无法启用ARC。
答案 0 :(得分:1)
我们遇到同样的问题。
您应该在.mm文件中添加-fobjc-arc标志(使用FBInterstitialAd api)。
答案 1 :(得分:0)
这更像是一个解决方案,而不是一个真正的解决方案,但我最终创建了一个包含并显示UIViewController
对象的FBInterstitialAd
包装类。
我在这个文件中启用了ARC,在设置中使用-fobjc-arc标志。
起初它不起作用,使用包装器视图控制器的普通模态表示。然后,我尝试将包装器视图控制器推到导航堆栈上(因为我的应用程序在根视图上有一个导航控制器)。
它并不理想,但这种方法确实有效。