SDK IMA giúp bạn dễ dàng tích hợp quảng cáo đa phương tiện vào trang web và ứng dụng của mình. SDK IMA có thể yêu cầu quảng cáo từ bất kỳ máy chủ quảng cáo nào tuân thủ VAST và quản lý việc phát quảng cáo trong ứng dụng của bạn. Với SDK IMA DAI, ứng dụng sẽ tạo một yêu cầu truyền phát cho quảng cáo và video nội dung – VOD hoặc nội dung trực tiếp. Sau đó, SDK sẽ trả về một luồng video kết hợp để bạn không phải quản lý việc chuyển đổi giữa quảng cáo và video nội dung trong ứng dụng.
Chọn giải pháp DAI mà bạn quan tâm
Phân phát nhóm DAI
Hướng dẫn này minh hoạ cách phát luồng phát trực tiếp hoặc VOD bằng cơ chế Phân phát nhóm DAI, sử dụng SDK IMA DAI cho iOS với trình phát video. Để xem hoặc làm theo một ví dụ tích hợp mẫu đã hoàn tất, hãy tải ví dụ về tính năng Phân phát pod cho Objective-C hoặc Swift.
Tổng quan về cơ chế Phân phát nhóm DAI của IMA
Việc triển khai tính năng Phân phát nhóm bằng SDK IMA DAI cho iOS bao gồm hai thành phần chính:
StreamRequest
: Một đối tượng xác định yêu cầu truyền trực tuyến đến máy chủ quảng cáo của Google. Phải được tạo bằngIMAPodStreamRequest
hoặcIMAPodVODStreamRequest
để bật tính năng Phân phát nhóm. Cả hai phương thức đều yêu cầu Mã mạng vàIMAPodStreamRequest
cũng cần có Khoá thành phần tuỳ chỉnh. Bạn không bắt buộc phải có Khoá API.IMAStreamManager
: Một đối tượng xử lý hoạt động giao tiếp giữa luồng video và SDK IMA DAI, chẳng hạn như kích hoạt ping theo dõi và chuyển tiếp sự kiện luồng đến nhà xuất bản.
Điều kiện tiên quyết
Trước khi bắt đầu, bạn cần có:
- Xcode 13 trở lên.
- CocoaPods (ưu tiên), Trình quản lý gói Swift hoặc bản sao đã tải xuống của SDK IMA DAI dành cho iOS.
- Một ứng dụng iOS đã được thiết lập bằng SDK IMA DAI để phát luồng video có quảng cáo DAI. Nếu chưa có ứng dụng như vậy, bạn nên sử dụng iOS DAI BasicExample làm điểm xuất phát. BasicExample có cơ sở mã được tham chiếu trong hướng dẫn này. Để biết thêm thông tin về cách triển khai SDK DAI IMA, hãy xem Hướng dẫn bắt đầu nhanh.
Thiết lập biến Phân phát nhóm
Tất cả thay đổi cần thiết cho tính năng Phân phát pod đều được thực hiện trong ViewController.swift trong Swift hoặc ViewController.m trong Objective-C. Các đoạn mã trong hướng dẫn này mặc định sử dụng ngôn ngữ Swift. Bước đầu tiên là cập nhật các biến hằng số.
Sau đây là các hằng số yêu cầu luồng nhóm quảng cáo cần thêm:
STREAM_URL
(Chỉ dùng cho sự kiện phát trực tiếp): URL của luồng video do trình điều khiển tệp kê khai hoặc đối tác bên thứ ba cung cấp bằng tính năng Phân phát nhóm. Bạn sẽ phải chèn mã luồng do SDK IMA DAI cung cấp trước khi tạo yêu cầu. Trong trường hợp này, URL luồng bao gồm một phần giữ chỗ,"[[STREAMID]]"
, được thay thế bằng mã luồng trước khi tạo yêu cầu.NETWORK_CODE
: Mã mạng cho tài khoản Ad Manager 360.CUSTOM_ASSET_KEY
(Chỉ dùng cho sự kiện phát trực tiếp): Khoá thành phần tuỳ chỉnh giúp xác định sự kiện Phân phát nhóm trong Ad Manager 360. Tệp này có thể do trình điều khiển tệp kê khai hoặc đối tác Phân phát nhóm bên thứ ba tạo.API_KEY
(Chỉ dùng cho sự kiện phát trực tiếp): Khoá API không bắt buộc có thể cần thiết để truy xuất mã luồng từ SDK IMA DAI.
Thay đổi phần biến của ví dụ để khớp với nội dung sau:
...
class ViewController:
UIViewController,
IMAAdsLoaderDelegate,
IMAStreamManagerDelegate,
AVPlayerViewControllerDelegate
{
static let streamUrl =
"https://encodersim.sandbox.google.com/masterPlaylist/9c654d63-5373-4673-8c8d-6d92b66b9d46/master.m3u8?gen-seg-redirect=true&network=51636543&event=google-sample&pids=devrel4628000,devrel896000,devrel3528000,devrel1428000,devrel2628000,devrel1928000&seg-host=dai.google.com&stream_id=[[STREAMID]]"
static let networkCode = "51636543"
static let customAssetKey = "google-sample"
static let APIKey = ""
static let backupStreamURLString =
"http://googleimadev-vh.akamaihd.net/i/big_buck_bunny/bbb-,480p,720p,1080p,.mov.csmil/master.m3u8"
var adsLoader: IMAAdsLoader?
...
Tạo yêu cầu phát trực tiếp hoặc yêu cầu phát trực tuyến nhóm quảng cáo VOD
Phân phát nhóm phát trực tiếp
Sửa đổi phương thức requestStream
để tạo yêu cầu Luồng Pod trực tiếp bằng cách tạo bản sao IMAPodStreamRequest
.
...
func requestStream() {
guard let playerViewController = self.playerViewController else return
guard let adContainerView = self.adContainerView else return
guard let adsLoader = self.adsLoader else return
self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
adDisplayContainer = IMAAdDisplayContainer(
adContainer: adContainerView, viewController: self)
// Create a podserving stream request.
request = IMAPodStreamRequest(
networkCode: self.networkCode,
customAssetKey: self.customAssetKey,
adDisplayContainer: adDisplayContainer,
videoDisplay: self.videoDisplay,
userContext: nil)
adsLoader.requestStream(with: request)
}
...
Phân phát theo nhóm luồng VOD
Sửa đổi phương thức requestStream
để tạo yêu cầu Luồng VOD Pod bằng cách tạo bản sao IMAPodVODStreamRequest
.
...
func requestStream() {
guard let playerViewController = self.playerViewController else return
guard let adContainerView = self.adContainerView else return
guard let adsLoader = self.adsLoader else return
self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
adDisplayContainer = IMAAdDisplayContainer(
adContainer: adContainerView, viewController: self)
// Create a podserving stream request.
request = IMAPodVODStreamRequest(
networkCode: self.networkCode,
adDisplayContainer: adDisplayContainer,
videoDisplay: self.videoDisplay,
userContext: nil)
adsLoader.requestStream(with: request)
}
...
Chỉnh sửa và đặt URL luồng
Phân phát nhóm phát trực tiếp
Sửa đổi các phương thức IMAAdsLoaderDelegate
, sử dụng streamManager.streamId
để lấy mã luồng. Sau đó, chèn mã nhận dạng luồng vào STREAM_URL
, thay thế
"[[STREAMID]]"
. Sau khi thực hiện thay đổi này, bạn có thể đặt URL luồng mới bằng videoDisplay.loadStream()
.
...
// MARK: - IMAAdsLoaderDelegate
func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
let streamManager = adsLoadedData.streamManager
let streamId = streamManager.streamId
let urlString = streamUrl.replacingOccurrences(of: "[[STREAMID]]", with: streamId)
let loadedStreamUrl = URL(string:urlString)
self.videoDisplay.loadStream(loadedStreamUrl, subtitles:@[])
self.videoDisplay.play()
streamManager.delegate = self
streamManager.initialize(with: nil)
self.streamManager = streamManager
}
...
Phân phát theo nhóm luồng VOD
Sửa đổi các phương thức IMAAdsLoaderDelegate
, sử dụng streamManager.streamId
để lấy mã luồng. Sau đó, hãy yêu cầu URL luồng từ đối tác công nghệ video (VTP). Sau đó, hãy gọi IMAStreamManager.loadThirdPartyStream()
để IMA tải URL luồng và mọi phụ đề do TVP trả về.
...
// MARK: - IMAAdsLoaderDelegate
func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
let streamManager = adsLoadedData.streamManager
let streamId = streamManager.streamId
// 'vtpInterface' is a place holder for your own video technology partner
// (VTP) API calls.
let streamUrl = vtpInterface.requestStreamURL(streamID)
self.streamManager.loadThirdPartyStream(streamUrl, streamSubtitles:@[])
streamManager.delegate = self
streamManager.initialize(with: nil)
self.streamManager = streamManager
}
Dọn dẹp các thành phần IMA DAI
Khi đã hoàn tất việc yêu cầu và hiển thị quảng cáo trong luồng Phân phát nhóm bằng SDK IMA DAI, bạn nên dọn dẹp mọi tài nguyên sau khi phiên Phân phát nhóm hoàn tất. Gọi IMAStreamManager.destroy()
để ngừng phát trực tuyến, ngừng tất cả hoạt động theo dõi quảng cáo và giải phóng tất cả tài sản luồng đã tải.
Để xem các ví dụ khác về việc sử dụng SDK iOS, hãy xem các mẫu trên GitHub.