安全信号是在客户端设备上收集并与所选出价方共享的编码数据。本指南介绍了如何使用 IMA SDK 收集安全信号并将其发送到 Google Ad Manager。
安全信号 API 需要使用 3.18.1 版或更高版本的 IMA SDK for iOS。
如需选择信号和出价方并启用安全信号共享功能,请参阅与出价方共享安全信号。
使用第三方信号提供商
如需使用安全信号,您必须在应用中部署信号收集器适配器类,以收集信号、对其进行编码,并将其传递给 IMA SDK。
按照第三方提供商的说明,向其设置账号,包括框架,并在应用中设置其安全信号适配器。
IMA SDK for iOS 会自动初始化每个安全信号适配器,而无需对代码进行任何额外更改。
以下示例展示了如何向项目添加安全信号适配器:
发送自定义数据
除了使用第三方信号提供商之外,您还可以收集、编码和发送包含自定义数据的信号。您必须先在 Ad Manager 中启用自定义信号,然后才能发送包含自定义数据的安全信号。
对于每个流式传输请求,请执行以下操作:
- 创建一个
IMASecureSignals
对象,其中包含以字符串形式编码的自定义数据。 - 通过设置
IMAStreamRequest.secureSignals
属性,将IMASecureSignals
对象添加到您的流式请求中:
Objective-C
app/ViewController.m
- (void)requestStream {
// Create a stream request. Use one of "Livestream request" or "VOD request",
// depending on your type of stream.
IMAStreamRequest *request;
if (kStreamType == StreamTypeLive) {
// Livestream request. Replace the asset key with your value.
request = [[IMALiveStreamRequest alloc] initWithAssetKey:kLiveStreamAssetKey
networkCode:kNetworkCode
adDisplayContainer:self.adDisplayContainer
videoDisplay:self.imaVideoDisplay
userContext:nil];
} else {
// VOD request. Replace the content source ID and video ID with your values.
request = [[IMAVODStreamRequest alloc] initWithContentSourceID:kVODContentSourceID
videoID:kVODVideoID
networkCode:kNetworkCode
adDisplayContainer:self.adDisplayContainer
videoDisplay:self.imaVideoDisplay
userContext:nil];
}
IMASecureSignals *signals =
[[IMASecureSignals alloc] initWithCustomData:@"My encoded signal string"];
request.secureSignals = signals;
[self.adsLoader requestStreamWithRequest:request];
}
Swift
app/ViewController.swift
func requestStream() {
// Create a stream request. Use one of "Livestream request" or "VOD request".
let signals = IMASecureSignals(customData: "My encoded signal string")
if ViewController.requestType == StreamType.live {
// Livestream request.
let request = IMALiveStreamRequest(
assetKey: ViewController.assetKey,
networkCode: ViewController.networkCode,
adDisplayContainer: adDisplayContainer!,
videoDisplay: imaVideoDisplay,
userContext: nil)
request.secureSignals = signals
adsLoader?.requestStream(with: request)
} else {
// VOD stream request.
let request = IMAVODStreamRequest(
contentSourceID: ViewController.contentSourceID,
videoID: ViewController.videoID,
networkCode: ViewController.networkCode,
adDisplayContainer: adDisplayContainer!,
videoDisplay: imaVideoDisplay,
userContext: nil)
request.secureSignals = signals
adsLoader?.requestStream(with: request)
}
}