Xử lý nhiều yêu cầu quảng cáo
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Hầu hết các trường hợp sử dụng SDK IMA chỉ yêu cầu quản lý một yêu cầu quảng cáo tại một thời điểm. Tuy nhiên, một số trường hợp triển khai đặc biệt (chẳng hạn như tải trước dữ liệu quảng cáo trước khi người dùng chọn một video) có thể yêu cầu thực hiện nhiều yêu cầu đồng thời. Vì các yêu cầu quảng cáo được thực hiện không đồng bộ, nên việc đảm bảo liên kết đúng trình quản lý quảng cáo với đúng ngữ cảnh có vẻ như là một nhiệm vụ khó khăn.
Để đơn giản hoá quá trình phân biệt nhiều trình quản lý quảng cáo, SDK IMA dành cho iOS cho phép nhà xuất bản truyền bất kỳ giá trị hoặc đối tượng nào vào trường UserContext của bất kỳ yêu cầu quảng cáo nào. Sau đó, bạn có thể truy xuất giá trị hoặc đối tượng này trong hàm uỷ quyền AdsLoader:AdsLoadedWithData, thông qua thuộc tính userContext của đối tượng IMAAdsLoadedData.
Ví dụ:
...
adsLoader = IMAAdsLoader(settings: nil)
adsLoader.delegate = self
let userContextA = {id: "Request A", element: videoElementA}
let userContextB = {id: "Request B", element: videoElementB}
let requestA = IMAAdsRequest(
adTagUrl: ViewController.AdTagURLString,
adDisplayContainer: adDisplayContainer,
contentPlayhead: contentPlayhead,
userContext: userContextA)
let requestB = IMAAdsRequest(
adTagUrl: ViewController.AdTagURLString,
adDisplayContainer: adDisplayContainer,
contentPlayhead: contentPlayhead,
userContext: userContextB)
adsLoader.requestAds(with: requestA)
adsLoader.requestAds(with: requestB)
...
// MARK: - IMAAdsLoaderDelegate
func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
let userContext = adsLoadedData.userContext
print("Loaded ads for ID: " + userContext.id)
adsManager = adsLoadedData.adsManager
adsManager.initialize(with: nil)
}
func adsLoader(_ loader: IMAAdsLoader!, failedWith adErrorData: IMAAdLoadingErrorData!) {
let userContext = adsLoadingErrorData.userContext
print("Error loading ads for ID: " + userContext.id)
}
...
Trừ phi có lưu ý khác, nội dung của trang này được cấp phép theo Giấy phép ghi nhận tác giả 4.0 của Creative Commons và các mẫu mã lập trình được cấp phép theo Giấy phép Apache 2.0. Để biết thông tin chi tiết, vui lòng tham khảo Chính sách trang web của Google Developers. Java là nhãn hiệu đã đăng ký của Oracle và/hoặc các đơn vị liên kết với Oracle.
Cập nhật lần gần đây nhất: 2025-08-31 UTC.
[null,null,["Cập nhật lần gần đây nhất: 2025-08-31 UTC."],[[["\u003cp\u003eThe IMA SDK for iOS allows publishers to manage multiple concurrent ad requests, especially useful for preloading ads.\u003c/p\u003e\n"],["\u003cp\u003ePublishers can utilize the \u003ccode\u003eUserContext\u003c/code\u003e field in \u003ccode\u003eIMAAdsRequest\u003c/code\u003e to associate a custom identifier with each ad request, simplifying differentiation.\u003c/p\u003e\n"],["\u003cp\u003eThe provided \u003ccode\u003euserContext\u003c/code\u003e value can be retrieved later in the \u003ccode\u003eadsLoader:adsLoadedWithData\u003c/code\u003e or \u003ccode\u003eadsLoader:failedWithAdErrorData\u003c/code\u003e delegate methods through the \u003ccode\u003eIMAAdsLoadedData\u003c/code\u003e or \u003ccode\u003eIMAAdLoadingErrorData\u003c/code\u003e object, respectively.\u003c/p\u003e\n"],["\u003cp\u003eThis approach helps ensure the correct ad manager is linked to its corresponding context, streamlining ad management in complex scenarios.\u003c/p\u003e\n"]]],[],null,["Most uses of the IMA SDK only require managing a single ad request at a time. However some edge case implementations, such as preloading ad data before the user selects a video, may require making multiple concurrent requests. Since ad requests are made asynchronously, ensuring the proper ad manager is associated with the correct context can seem to be a daunting task.\n\nTo simplify the process of differentiating multiple ad managers, the IMA SDK for iOS allows publishers to pass in any value or object to the [UserContext](https://developers.google.com/interactive-media-ads/docs/sdks/ios/client-side/reference/Classes/IMAAdsRequest#-initwithadtagurl:addisplaycontainer:avplayervideodisplay:pictureinpictureproxy:usercontext:) field of any ad request. This value or object can then be retrieved in the [AdsLoader:AdsLoadedWithData](https://developers.google.com/interactive-media-ads/docs/sdks/ios/client-side/reference/Protocols/IMAAdsLoaderDelegate#-adsloader:adsloadedwithdata:) delegate function, via the [IMAAdsLoadedData](https://developers.google.com/interactive-media-ads/docs/sdks/ios/client-side/reference/Classes/IMAAdsLoadedData) object's [userContext](https://developers.google.com/interactive-media-ads/docs/sdks/ios/client-side/reference/Classes/IMAAdsLoadedData#usercontext) attribute.\n\nExample \n\n ...\n adsLoader = IMAAdsLoader(settings: nil)\n adsLoader.delegate = self\n\n let userContextA = {id: \"Request A\", element: videoElementA}\n let userContextB = {id: \"Request B\", element: videoElementB}\n let requestA = IMAAdsRequest(\n adTagUrl: ViewController.AdTagURLString,\n adDisplayContainer: adDisplayContainer,\n contentPlayhead: contentPlayhead,\n userContext: userContextA)\n let requestB = IMAAdsRequest(\n adTagUrl: ViewController.AdTagURLString,\n adDisplayContainer: adDisplayContainer,\n contentPlayhead: contentPlayhead,\n userContext: userContextB)\n adsLoader.requestAds(with: requestA)\n adsLoader.requestAds(with: requestB)\n\n ...\n\n // MARK: - IMAAdsLoaderDelegate\n\n func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {\n let userContext = adsLoadedData.userContext\n print(\"Loaded ads for ID: \" + userContext.id)\n adsManager = adsLoadedData.adsManager\n adsManager.initialize(with: nil)\n }\n\n func adsLoader(_ loader: IMAAdsLoader!, failedWith adErrorData: IMAAdLoadingErrorData!) {\n let userContext = adsLoadingErrorData.userContext\n print(\"Error loading ads for ID: \" + userContext.id)\n }\n\n ..."]]