监控广告缓冲事件
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
本指南介绍了如何根据广告缓冲状态采取行动。
在应用中使用缓冲区事件
您可以在 IMAAdsManagerDelegate
上使用以下委托方法,在广告暂停缓冲时向应用添加 activity 指示器:
- (void)adsManagerAdDidStartBuffering(IMAAdsManager *)adsManager
:在已开始播放的广告停止缓冲时调用。
- (void)adsManager:(IMAAdsManager *)adsManager adDidBufferToMediaTime:(NSTimeInterval)mediaTime
:被称为广告缓冲区。只要广告正在缓冲,系统就会反复调用此方法。
- (void)adsManagerAdPlaybackReady:(IMAAdsManager *)adsManager
:当当前广告有足够的缓冲区,以致广告播放不太可能超出缓冲区时调用。
示例
所有新增内容均基于 IMA SDK 高级示例(适用于 iOS 和 tvOS):
@interface VideoViewController () <IMAAdsManagerDelegate,...>
...
@end
@implementation VideoViewController
...
- (void)adsManagerAdDidStartBuffering:(IMAAdsManager *)adsManager {
// Show your activity indicator above the video player - ad playback has
// stopped to buffer.
}
- (void)adsManagerAdPlaybackReady:(IMAAdsManager *)adsManager {
// Hide your activity indicator - as playback resumes.
}
常见问题解答
我可以在广告开始播放前显示活动指示器吗?
可以,但我们建议您针对该用例使用不同的代理方法。您可以在调用 [adsManager start]
时显示 activity 指示器,并在 - (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event
中捕获 kIMAAdEvent_STARTED
时隐藏 activity 指示器。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-08-31。
[null,null,["最后更新时间 (UTC):2025-08-31。"],[[["\u003cp\u003eThis guide provides instructions on how to leverage ad buffer events to display an activity indicator during ad buffering.\u003c/p\u003e\n"],["\u003cp\u003eDevelopers can utilize the \u003ccode\u003eIMAAdsManagerDelegate\u003c/code\u003e methods, such as \u003ccode\u003eadsManagerAdDidStartBuffering\u003c/code\u003e, \u003ccode\u003eadsManager:adDidBufferToMediaTime:\u003c/code\u003e, and \u003ccode\u003eadsManagerAdPlaybackReady\u003c/code\u003e, to manage the activity indicator's visibility based on the ad's buffering state.\u003c/p\u003e\n"],["\u003cp\u003eThe provided code example demonstrates how to integrate these methods into an iOS or tvOS application, using the IMA SDK Advanced Sample as a basis.\u003c/p\u003e\n"],["\u003cp\u003eWhile displaying an activity indicator before ad playback is possible, it's recommended to use different delegate methods and events like \u003ccode\u003e[adsManager start]\u003c/code\u003e and \u003ccode\u003ekIMAAdEvent_STARTED\u003c/code\u003e for that purpose.\u003c/p\u003e\n"]]],[],null,["# Monitor ad buffering events\n\nThis guide explains how to take action based on ad buffering state.\n\nUsing buffer events in your app\n-------------------------------\n\nYou can use the following delegate methods on `IMAAdsManagerDelegate` to add an\nactivity indicator to your app when ads pause to buffer:\n\n- `- (void)adsManagerAdDidStartBuffering(IMAAdsManager *)adsManager`: Called when an ad that already started playing has stopped to buffer.\n- `- (void)adsManager:(IMAAdsManager *)adsManager adDidBufferToMediaTime:(NSTimeInterval)mediaTime`: Called as an ad buffers. This method is called repeatedly as long as an ad is buffering.\n- `- (void)adsManagerAdPlaybackReady:(IMAAdsManager *)adsManager`: Called when the current ad is sufficiently buffered such that ad playback is not likely to outrun the buffer.\n\n### Example\n\nAll additions are based on the\n[IMA SDK Advanced Sample](//github.com/googleads/googleads-ima-ios/tree/master/Objective-C/AdvancedExample)\n(for both iOS and tvOS): \n\n```objective-c\n @interface VideoViewController () \u003cIMAAdsManagerDelegate,...\u003e\n\n ...\n\n @end\n\n @implementation VideoViewController\n\n ...\n\n - (void)adsManagerAdDidStartBuffering:(IMAAdsManager *)adsManager {\n // Show your activity indicator above the video player - ad playback has\n // stopped to buffer.\n }\n\n - (void)adsManagerAdPlaybackReady:(IMAAdsManager *)adsManager {\n // Hide your activity indicator - as playback resumes.\n }\n```\n\nFAQ\n---\n\n### Can I show an activity indicator before my ad starts playing?\n\nYes, but we recommend relying on different delegate methods for that\nuse case. You can show the activity indicator when you call `[adsManager start]`,\nand hide the activity indicator when you catch `kIMAAdEvent_STARTED` in\n`- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event`."]]