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.
Plugin download link:
https://github.com/ppgee/cocos-pnp/releases?q=playable-ads-adapter&expanded=true
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.
-
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.
AppLovin | IronSource | Liftoff | Mintegral | Moloco | Pangle | Rubeex | Tiktok | Unity | |||
---|---|---|---|---|---|---|---|---|---|---|---|
>= 2.4.6 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
3.8.x | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
- 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
}
git clone git@github.com:ppgee/cocos-pnp.git
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
# Install dependencies
pnpm install
# Build version 2.4.x
pnpm build:2x
# Build version 3.x
pnpm build:3x