Das Anfordern und Darstellen von überspringbaren Anzeigen mit dem CAF DAI SDK ist etwas komplex, da es erforderlich ist, zu ermitteln, ob die verwendete Kombination aus Sender und Empfänger in der Lage ist, eine Schaltfläche zum Überspringen anzuzeigen und mit ihr zu interagieren.
Das SDK versucht automatisch, zu erkennen, ob der aktuelle Empfänger in der Lage ist, eine Schaltfläche zum Überspringen zu rendern und direkt mit ihr zu interagieren. Der Publisher muss jedoch bestimmen, ob einer der angehängten Absender überspringbare Anzeigen ausliefern kann, indem er das Attribut imaRequestData.senderCanSkip
umstellt.
In allen Beispielen für das CAF DAI SDK wird „senderCanSkip“ direkt vom Absender als Teil des Medienobjekts übergeben. Dies ist eine bewusst vereinfachte Implementierung, die für einen einzelnen Sender gut funktioniert. In echten Anwendungen kann jedoch ein CAF-Empfänger an mehrere Sender-Apps angehängt werden und der Sender, der eine Mediendatei in die Warteschlange einreiht, ist möglicherweise nicht mehr verbunden, wenn das Medienobjekt geladen und die Streamanfrage durchgeführt wird.
Ein komplexerer Empfänger könnte nachverfolgen, welche verknüpften Sendertypen das Überspringen unterstützen und welche nicht, und würde beim Laden prüfen, ob derzeit ein überspringbarer Sender mit dem Empfänger verknüpft ist.
Beispiel (einzelner Absender):
...
let getStreamRequest = (request) => {
const imaRequestData = request.media.customData;
let streamRequest = null;
if (imaRequestData.assetKey) {
// Live stream
streamRequest = new google.ima.cast.dai.api.LiveStreamRequest();
streamRequest.assetKey = imaRequestData.assetKey;
} else if (imaRequestData.contentSourceId) {
// VOD stream
streamRequest = new google.ima.cast.dai.api.VODStreamRequest();
streamRequest.contentSourceId = imaRequestData.contentSourceId;
streamRequest.videoId = imaRequestData.videoId;
}
if (streamRequest && imarequestdata.ApiKey) {
streamRequest.ApiKey = imarequestdata.ApiKey;
}
if (streamRequest && imarequestdata.senderCanSkip) {
streamRequest.senderCanSkip = imaRequestData.senderCanSkip;
}
return streamRequest;
};
...
Beispiel (Unterstützung mehrerer Absender):
...
let getStreamRequest = (request) => {
const imaRequestData = request.media.customData;
let streamRequest = null;
if (imaRequestData.assetKey) {
// Live stream
streamRequest = new google.ima.cast.dai.api.LiveStreamRequest();
streamRequest.assetKey = imaRequestData.assetKey;
} else if (imaRequestData.contentSourceId) {
// VOD stream
streamRequest = new google.ima.cast.dai.api.VODStreamRequest();
streamRequest.contentSourceId = imaRequestData.contentSourceId;
streamRequest.videoId = imaRequestData.videoId;
}
if (streamRequest && imarequestdata.ApiKey) {
streamRequest.ApiKey = imarequestdata.ApiKey;
}
let senders = castContext.getSenders();
let senderCanSkip = (sender) => {
const skippableUserAgents = [
"iOS CastSDK",
"Android CastSDK"
];
// trim user agent to just include device
let userAgent = sender.userAgent.explode(',')[0];
return skippableUserAgents.includes(userAgent);
};
if (streamRequest && senders.some(senderCanSkip)) {
streamRequest.senderCanSkip = imarequestdata.senderCanSkip;
}
return streamRequest;
};
...
Letztendlich sind Publisher für die Außerdem ist es möglich, dass alle überspringbaren Absender die Verbindung zwischen dem Zeitpunkt der Streamanfrage und der Wiedergabe der Anzeige trennen. Deshalb sollten Sie dem STARTED
-Ereignis einen Handler hinzufügen, der prüft, ob eine Anzeige überspringbar ist und sowohl der Absender als auch der Empfänger die Überspringbarkeit nicht unterstützen. Dieser Handler könnte solche Anzeigen automatisch überspringen, wenn sie erscheinen. Eine solche erweiterte Implementierung geht jedoch über den Umfang der Unterstützung für die dynamische Anzeigenbereitstellung durch CAF hinaus.
Standardmäßig ist der Nutzer in einem solchen Grenzfall immer noch in der Lage, einen Überspringen-Vorgang einzuleiten. Dazu muss er zuerst einen Absender verbinden, der das Überspringen unterstützt, und dann auf die angezeigte Schaltfläche zum Überspringen klicken.