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 tuân thủ VAST nào và quản lý việc phát quảng cáo trong ứng dụng của bạn. Với SDK DAI của IMA, các ứng dụng sẽ đưa ra yêu cầu về luồng cho quảng cáo và video nội dung – có thể là 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, nhờ đó 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 của mình.
Chọn giải pháp DAI mà bạn quan tâm
DAI phân phát nhóm
Hướng dẫn này minh hoạ cách phát luồng phát trực tiếp hoặc luồng VOD Phân phát nhóm DAI bằng IMA DAI SDK cho tvOS với một trình phát video. Để xem hoặc làm theo một mẫu tích hợp hoàn chỉnh, hãy tải ứng dụng mẫu Pod Serving xuống (Obj 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 IMA DAI SDK cho tvOS bao gồm 2 thành phần chính:
StreamRequest
: Một đối tượng xác định yêu cầu truyền phát đến các 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 Khoá tài sản tuỳ chỉnh. Khoá API là không bắt buộc.IMAStreamManager
: Một đối tượng xử lý hoạt động giao tiếp giữa luồng video và SDK DAI của IMA, chẳng hạn như kích hoạt ping theo dõi và chuyển tiếp các 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ó những thông tin sau:
- 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 cho tvOS.
- Một ứng dụng tvOS đã được thiết lập bằng SDK IMA DAI để phát các 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 tvOS DAI BasicExample làm điểm bắt đầu. 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 của IMA, hãy xem Hướng dẫn bắt đầu nhanh.
Thiết lập các biến Phân phát nhóm
Tất cả các thay đổi cần thiết cho Pod Serving đều được thực hiện trong ViewController.swift
bằng Swift hoặc ViewController.m
bằng 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 luồng video do trình thao tác tệp kê khai hoặc đối tác bên thứ ba cung cấp bằng cách sử dụng tính năng Phân phát nhóm. Bạn phải chèn mã nhận dạng luồng do IMA DAI SDK cung cấp trước khi đưa ra yêu cầu. Trong trường hợp này, URL luồng phát có chứa một phần giữ chỗ,"[[STREAMID]]"
, được thay thế bằng mã nhận dạng luồng phát trước khi đưa ra yêu cầu.NETWORK_CODE
: Mã mạng cho tài khoản Ad Manager 360 của bạn.CUSTOM_ASSET_KEY
(Chỉ dùng cho sự kiện phát trực tiếp): Khoá tài sản tuỳ chỉnh dùng để xác định sự kiện Phân phát nhóm của bạn trong Ad Manager 360. Bạn có thể tạo tệp này bằng trình thao tác tệp kê khai hoặc đối tác Phân phát nhóm quảng cáo bên thứ ba.API_KEY
(Chỉ dùng cho sự kiện phát trực tiếp): Khoá API không bắt buộc. Khoá này có thể là khoá bắt buộc để truy xuất mã nhận dạng luồng phát từ IMA DAI SDK.
Thay đổi phần biến của ví dụ cho phù hợp với phần sau:
...
class ViewController:
UIViewController,
IMAAdsLoaderDelegate,
IMAStreamManagerDelegate,
AVPlayerViewControllerDelegate
{
static let streamUrl = ""
static let networkCode = ""
static let customAssetKey = ""
static let APIKey = ""
static let backupStreamURLString = ""
var adsLoader: IMAAdsLoader?
...
Tạo yêu cầu luồng nhóm trực tiếp hoặc VOD
Phân phát nhóm sự kiện phát trực tiếp
Sửa đổi phương thức requestStream
để tạo yêu cầu phát trực tiếp theo nhóm bằng cách khởi tạo 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 nhóm luồng VOD
Sửa đổi phương thức requestStream
để tạo yêu cầu luồng nhóm video theo yêu cầu bằng cách khởi tạo 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à thiết lập URL của luồng phát
Phân phát nhóm sự kiện phát trực tiếp
Sửa đổi phương thức IMAAdsLoaderDelegate
bằng cách sử dụng streamManager.streamId
để lấy mã luồng. Sau đó, hãy chèn mã nhận dạng luồng vào STREAM_URL
, thay thế "[[STREAMID]]"
. Sau khi thay đổi, bạn có thể thiết lập URL sự kiện phát trực tiếp mới bằng cách sử dụ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 nhóm luồng VOD
Sửa đổi phương thức IMAAdsLoaderDelegate
bằng cách 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) của bạn và gọi IMAStreamManager.loadThirdPartyStream()
để IMA tải URL luồng và mọi phụ đề do TVP của bạn 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 DAI của IMA
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 theo nhóm bằng SDK DAI của IMA, bạn nên dọn dẹp mọi tài nguyên sau khi phiên Phân phát theo nhóm hoàn tất. Gọi IMAStreamManager.destroy()
để dừng phát trực tuyến, dừng tất cả hoạt động theo dõi quảng cáo và giải phóng tất cả các thành phần luồng đã tải.
Để xem các ví dụ khác về cách sử dụng tvOS SDK, hãy xem các mẫu trên GitHub.