Playable ads adapter
A Plugin for Exporting Cocos Playable Ads in Multi-Channel.
ไธญๆ่ฏดๆ๏ผ็นๅป่ฟ้
If you only need to use the plugin, you can download the build package directly. The major versions are differentiated between 2.x
and 3.x
. Currently, the tested versions are 2.4.9
, 2.4.10
, and 3.x
. For other versions, please test them yourself. If you have any questions, feel free to submit an issue or pull request.
Download
Plugin download link:
https://github.com/ppgee/cocos-pnp/releases?q=playable-ads-adapter&expanded=true
Install
After downloading the plugin, extract it and place it in the corresponding plugin folder for Cocos:
-
For 2.x, the plugin folder is
packages
in the root directory of the project. -
For 3.x, the plugin folder is
extensions
in the root directory of the project.
Once installed, you can use it. If you cannot find the plugin, try restarting the project.
Using the Plugin
-
There are two ways to adapt the plugin. The first is to automatically trigger the adaptation function when building and publishing the project (select
web-mobile
orweb-desktop
as the build channel). -
In the project option bar, select ๅคๆธ ้ๆๅปบ, then click ๅผๅงๆๅปบ to start the build.
Plugin Description
Supported Channels
AppLovin | IronSource | Liftoff | Mintegral | Moloco | Pangle | Rubeex | Tiktok | Unity | |||
---|---|---|---|---|---|---|---|---|---|---|---|
>= 2.4.6 | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ |
3.8.x | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ | โ |
Extend Features
- Supports global dynamic replacement of channel names, making it easy to handle special logic for a specific channel. The placeholder for this feature is
'{{__adv_channels_adapter__}}'
, for example:
// source code
window.advChannels = '{{__adv_channels_adapter__}}' // Prevent rollup dead code elimination from omitting this code, the placeholder variable can be mounted on the global without deactivation
// Code will be replaced with Facebook channel:
window.advChannels = 'Facebook'
- Supports injecting additional scripts for each channel to configure special business logic. You need to create a
.adapterrc
file in the root directory to edit the configuration information in JSON format. An example of the configuration is as follows:
type TChannel =
| 'AppLovin'
| 'Facebook'
| 'Google'
| 'IronSource'
| 'Liftoff'
| 'Mintegral'
| 'Moloco'
| 'Pangle'
| 'Rubeex'
| 'Tiktok'
| 'Unity'
type TPlatform =
| 'web-desktop'
| 'web-mobile';
type TWebOrientations = 'portrait' | 'landscape' | 'auto'
type TAdapterRC = {
buildPlatform?: TPlatform // Cocos build platform value
orientation?: TWebOrientations // Cocos build device orientation value
exportChannels?: TChannel[] // Channels to export. If empty or not specified, export all channels.
skipBuild?: boolean // Whether to skip the build process. Default is false.
enableSplash?: boolean // Whether to set a custom splash screen. Default is true.
injectOptions?: {
[key in TChannel]: {
head: string // Appended to the head tag in HTML
body: string // Appended before all scripts in the body tag in HTML
sdkScript: string // Injects the SDK script into the corresponding channel
}
},
isZip?: boolean // // Whether to compress the package with Pako, the default is true
tinify?: boolean // Whether to compress images with Tinypng.
tinifyApiKey?: string // Tinypng API key
}
.adapterrc
file example:
{
"buildPlatform": "web-mobile",
"orientation": "auto",
"injectOptions": {
"AppLovin": {
"head": "<script>console.log('AppLovin')</script>"
},
"Google": {
"body": "<a onclick=\"ExitApi.exit()\" style=\"display: none;\"></a>"
},
"Unity": {
"body": "<script>if(mraid.getState()==='loading'){mraid.addEventListener('ready',onSdkReady)}else{onSdkReady()}function viewableChangeHandler(viewable){if(viewable){}else{}}function onSdkReady(){mraid.addEventListener('viewableChange',viewableChangeHandler);if(mraid.isViewable()){showMyAd()}}var url='ios้พๆฅ';var android='ๅฎๅ้พๆฅ';if(/android/i.test(userAgent)){url=android}function showMyAd(){mraid.open(url)}</script>",
"sdkScript": "<script src=\"./mraid.js\"></script>"
}
}
}
- Supports specifying selected channels, using the following configuration:
// .adapterrc
{
"exportChannels": ["Google", "Facebook"] // Channels to export. If empty or not specified, export all channels.
}
- Supports image compression with
Tinypng
to further reduce the package size, using the following configuration:
// .adapterrc
{
...,
"tinify": true // Whether to compress images with Tinypng
"tinifyApiKey": "YOUR_TINYPNG_API_KEY" // Tinypng API key
}
- Supports Pako compression to further reduce the package size, using the following configuration:
// .adapterrc
{
...,
"isZip": true // Whether to compress the package with Pako, the default is true
}
Plugin Development and Build Steps
Clone the Project
git clone git@github.com:ppgee/cocos-pnp.git
Development Setup and Dependency Installation
Please configure the hot update plugin directory first.
// rollup.config.js
...
const plugins = [
...,
/*
* src is the exported project in the current project
* desc is the global directory of the developer's Cocos editor
*/
cocosPluginUpdater({
src: `${__dirname}/${outputDir}`,
dest: `~/.CocosCreator/${is2xBuilder ? 'packages' : 'extensions'}/${appName}`
}),
]
...
# Install dependencies
pnpm install
# Develop version 2.4.x
pnpm watch:2x
# Develop version 3.x
pnpm watch:3x
Build the Project
# Install dependencies
pnpm install
# Build version 2.4.x
pnpm build:2x
# Build version 3.x
pnpm build:3x