This tutorial shows how create a custom CAF Receiver using AmpCaf.
This tutorial shows:
- Creating a basic HTML.
- Including the Cast Receiver framework.
- Including AMP & AmpCaf in your receiver.
- Creating a Config Object.
- Creating an AmpCaf instance.
- Customizing the Receiver UI.
- Using CafAds to serve client side Ads.
- Hosting your Custom Receiver
1. Creating a basic HTML
Create a basic HTML page.
<html>
<head>
<title>My CAF Receiver</title>
</head>
<body>
</body>
</html>
2. Including the Cast Receiver framework
Load the Cast Receiver Framework using a script tag in your head section and include the cast-media-player tag into the body of the HTML page.
<html>
<head>
<title>AMP CAF Receiver
<script src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
</head>
<body>
<cast-media-player></cast-media-player>
</body>
</html>
3. Including AMP & AmpCaf in your receiver
Load AMP using a script tag in your head section and then add a scrip tag in your page body. In this second script use the type "module" and import AmpCaf from AmpCafReceiver.js.
<html>
<head>
<title>AMP CAF Receiver
<script src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
<script type="text/javascript" src="https://amp.akamaized.net/hosted/1.1/player.esi?apikey=MY_AMP_KEY&version=9.0.23"></script>
</head>
<body>
<cast-media-player></cast-media-player>
<script type="module">
import AmpCaf from "AmpCafReceiver.js"
</script>
</body>
</html>
4. Creating a Config Object
As with regular AMP, AmpCaf uses a akamai.amp.PlayerConfig object. So, declare a const for the config object and add any required configuration.
<html>
<head>
<title>AMP CAF Receiver
<script src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
<script type="text/javascript" src="https://amp.akamaized.net/hosted/1.1/player.esi?apikey=MY_AMP_KEY&version=9.0.23"></script>
</head>
<body>
<cast-media-player></cast-media-player>
<script type="module">
import AmpCaf from "AmpCafReceiver.js"
const config = {
debug: false
}
</script>
</body>
</html>
5. Creating an AmpCaf instance
To create an AmpCaf instance call the AmpCaf constructor passing the config object and an event listener function as arguments.
<html>
<head>
<title>AMP CAF Receiver
<script src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
<script type="text/javascript" src="https://amp.akamaized.net/hosted/1.1/player.esi?apikey=MY_AMP_KEY&version=9.0.23"></script>
</head>
<body>
<cast-media-player></cast-media-player>
<script type="module">
import AmpCaf from "AmpCafReceiver.js"
const config = {
debug: false
}
// It is adviced to include a timeout when debugging
// to hook the chrome debugger more easily
setTimeout(function () {
window.amp = new AmpCaf(config, (event) => {
console.log("AMP CAF READY")
})
}, (config.debug) ? 3000 : 0)
</script>
</body>
</html>
6. Customizing the Receiver UI
To customize the receiver UI include a style tag at the end of the page body and add any desired css. For further information on UI styling please refer to google's documentation.
<html>
<head>
<title>AMP CAF Receiver
<script src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
<script type="text/javascript" src="https://amp.akamaized.net/hosted/1.1/player.esi?apikey=MY_AMP_KEY&version=9.0.23"></script>
</head>
<body>
<cast-media-player></cast-media-player>
<script type="module">
import AmpCaf from "AmpCafReceiver.js"
const config = {
debug: false
}
// It is adviced to include a timeout when debugging
// to hook the chrome debugger more easily
setTimeout(function () {
window.amp = new AmpCaf(config, (event) => {
console.log("AMP CAF READY")
})
}, (config.debug) ? 3000 : 0)
</script>
<style type="text/css">
cast-media-player {
--theme-hue: 210;
--splash-image: url("chromecast-bg.png");
--logo-image: url("chromecast-bg.png");
}
</style>
</body>
</html>
7. Using CafAds to serve client side Ads.
To serve client side ads, include a cafads section in the config object. The cafads section should specify the provider of the ads and the vmapAdsRequest.
<html>
<head>
<title>AMP CAF Receiver
<script src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
<script type="text/javascript" src="https://amp.akamaized.net/hosted/1.1/player.esi?apikey=MY_AMP_KEY&version=9.0.23"></script>
</head>
<body>
<cast-media-player></cast-media-player>
<script type="module">
import AmpCaf from "AmpCafReceiver.js"
const config = {
debug: false,
cafads: {
provider: "ima",
vmapAdsRequest: "https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/ad_rule_samples&ciu_szs=300x250&ad_rule=1&impl=s&gdfp_req=1&env=vp&output=vmap&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ar%3Dpremidpost&cmsid=496&vid=short_onecue&correlator=#{now}"
},
}
setTimeout(function () {
window.amp = new AmpCaf(config, (event) => {
console.log("AMP CAF READY")
})
}, (config.debug) ? 3000 : 0)
</script>
<style type="text/css">
cast-media-player {
--theme-hue: 210;
--splash-image: url("chromecast-bg.png");
--logo-image: url("chromecast-bg.png");
}
</style>
</body>
</html>
8. Hosting your Custom Receiver
The custom receiver can be hosted anywhere. To link your custom receiver to a sender application, login into your Google Cast SDK Developer Console and follow the Add New Application wizard.