<title>Cocos 接入穿山甲广告 SDK</title>
<link>https://layfz.com/posts/cocos-chuanshanjia-insert/</link>
<guid isPermaLink="true">https://layfz.com/posts/cocos-chuanshanjia-insert/</guid>
<description>Cocos 接入穿山甲广告 SDK实现广告变现</description>
<pubDate>Tue, 06 Aug 2024 00:00:00 GMT</pubDate>
<content:encoded><h1 id="cocos-接入穿山甲广告-sdk">Cocos 接入穿山甲广告 SDK</h1>
<p>在这个教程中,我将详细介绍如何在 Cocos 引擎中接入穿山甲广告 SDK。我们将分步介绍如何在 Cocos 项目中集成穿山甲Android SDK,包括环境配置、代码实现和测试等内容。</p>
<h2 id="目录">目录</h2>
<ol>
<li><a href="#%E5%89%8D%E6%8F%90%E6%9D%A1%E4%BB%B6">前提条件</a></li>
<li><a href="#%E8%8E%B7%E5%8F%96%E7%A9%BF%E5%B1%B1%E7%94%B2-sdk">获取穿山甲 SDK</a></li>
<li><a href="#%E9%9B%86%E6%88%90-sdk">集成 SDK</a></li>
<li><a href="#%E9%85%8D%E7%BD%AE%E7%A9%BF%E5%B1%B1%E7%94%B2%E5%B9%BF%E5%91%8A">配置穿山甲广告</a></li>
</ol>
<h2 id="前提条件">前提条件</h2>
<p>在开始之前,请确保你具备以下条件:</p>
<ul>
<li>已安装 Cocos Creator 或 Cocos2d-x。</li>
<li>已创建一个 Cocos 项目。</li>
</ul>
<h2 id="注意事项">注意事项:</h2>
<ul>
<li>
<p>由于Android平台更新迭代非常快,开发者很容易陷入版本冲突以及兼容问题,若要使用该教程,请使用<strong>推荐的的版本配置</strong>:</p>
<ul>
<li>Gradle:8.0.2</li>
<li>Gradle Plugin:8.0.2</li>
<li>Android NDK: 21.3.6528147</li>
<li>Android SDK: 29</li>
<li>Cocos Creator: 2.4.13</li>
</ul>
</li>
</ul>
<h2 id="获取穿山甲-sdk">获取穿山甲 SDK</h2>
<ol>
<li><strong>访问穿山甲官网</strong>:前往 <a href="https://www.csjplatform.com/union/media/union/download/pangle">穿山甲</a> 并登录你的账户。</li>
<li><strong>下载 SDK</strong>:在开发者中心找到Android SDK,下载并解压缩。
<img src="/images/csj/csj.png"></li>
</ol>
<h2 id="集成-sdk">集成 SDK</h2>
<h3 id="1-集成-android-sdk">1. 集成 Android SDK</h3>
<ol>
<li>
<p><strong>导入 SDK 文件</strong>:</p>
<ul>
<li>将下载的 Android SDK 文件(<code>.aar</code> 或 <code>.jar</code> 文件)放入 Cocos 项目的 <code>assets</code> 目录下的 <code>Plugins/Android</code> 文件夹中。</li>
</ul>
</li>
<li>
<p><strong>配置 Gradle 文件</strong>:</p>
<ul>
<li>打开 Cocos 项目的 <code>proj.android-studio/app/build.gradle</code> 文件。</li>
<li>在 <code>dependencies</code> 部分添加穿山甲 SDK 的依赖:</li>
</ul>
<pre class="astro-code monokai" style="background-color:#272822;color:#F8F8F2; overflow-x: auto;" tabindex="0"><code><span class="line"><span>implementation 'com.android.support:appcompat-v7:28.0.0'</span></span>
<span class="line"><span>//融合基础包,必须引入</span></span>
<span class="line"><span>implementation "com.pangle.cn:mediation-sdk:6.2.1.7"</span></span>
<span class="line"><span>implementation "com.alibaba:fastjson:1.2.83"</span></span></code></pre>
</li>
<li>
<p><strong>更新 AndroidManifest.xml</strong>:</p>
<ul>
<li>
<p>在 <code>proj.android-studio/app/src/main/AndroidManifest.xml</code> 中添加穿山甲所需的权限和服务:
<code>xml <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!-- 所需权限 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /></code>
application部分:
```xml
<application android:allowbackup="true" android:label="@string/app_name" android:usescleartexttraffic="true" android:icon="@mipmap/ic_launcher">
<!-- Tell Cocos2dxActivity the name of our .so -->
<meta-data android:name="android.app.lib_name" android:value="cocos2djs"></meta-data></application></p>
<pre class="astro-code monokai" style="background-color:#272822;color:#F8F8F2; overflow-x: auto;" tabindex="0"><code><span class="line"><span> <activity</span></span>
<span class="line"><span> android:name="org.cocos2dx.javascript.AppActivity"</span></span>
<span class="line"><span> android:screenOrientation="portrait"</span></span>
<span class="line"><span> android:configChanges="orientation|keyboardHidden|screenSize|screenLayout|uiMode"</span></span>
<span class="line"><span> android:label="@string/app_name"</span></span>
<span class="line"><span> android:theme="@android:style/Theme.NoTitleBar.Fullscreen"</span></span>
<span class="line"><span> android:launchMode="singleTask"</span></span>
<span class="line"><span> android:exported="true"></span></span>
<span class="line"><span> <intent-filter></span></span>
<span class="line"><span> <action android:name="android.intent.action.MAIN" /></span></span>
<span class="line"><span></span></span>
<span class="line"><span> <category android:name="android.intent.category.LAUNCHER" /></span></span>
<span class="line"><span> </intent-filter></span></span>
<span class="line"><span> </activity></span></span>
<span class="line"><span> <!-- 穿山甲 start================== --></span></span>
<span class="line"><span> <provider</span></span>
<span class="line"><span> android:name="com.bytedance.sdk.openadsdk.TTFileProvider"</span></span>
<span class="line"><span> android:authorities="${applicationId}.TTFileProvider"</span></span>
<span class="line"><span> android:exported="false"</span></span>
<span class="line"><span> android:grantUriPermissions="true"></span></span>
<span class="line"><span> <meta-data</span></span>
<span class="line"><span> android:name="android.support.FILE_PROVIDER_PATHS"</span></span>
<span class="line"><span> android:resource="@xml/file_paths" /></span></span>
<span class="line"><span> </provider></span></span>
<span class="line"><span></span></span>
<span class="line"><span> <provider</span></span>
<span class="line"><span> android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"</span></span>
<span class="line"><span> android:authorities="${applicationId}.TTMultiProvider"</span></span>
<span class="line"><span> android:exported="false" /></span></span>
<span class="line"><span> <!-- 穿山甲 end================== --></span></span>
<span class="line"><span> </application></span></span>
<span class="line"><span> ```</span></span></code></pre>
<p>4.<strong>添加xml文件</strong>:
在res目录下添加文件file_paths.xml
<img src="/images/csj/paths.png"></p>
</li>
</ul>
</li>
</ol>
<pre class="astro-code monokai" style="background-color:#272822;color:#F8F8F2; overflow-x: auto;" tabindex="0"><code><span class="line"><span><?xml version="1.0" encoding="utf-8"?></span></span>
<span class="line"><span><paths></span></span>
<span class="line"><span> <external-path name="tt_external_root" path="." /></span></span>
<span class="line"><span> <external-path name="tt_external_download" path="Download" /></span></span>
<span class="line"><span> <external-files-path name="tt_external_files_download" path="Download" /></span></span>
<span class="line"><span> <files-path name="tt_internal_file_download" path="Download" /></span></span>
<span class="line"><span> <cache-path name="tt_internal_cache_download" path="Download" /></span></span>
<span class="line"><span></paths></span></span></code></pre>
<ol>
<li><strong>创建广告处理类</strong>
结构如下,<mark>创建并放到任意包下</mark>:
<img src="/images/csj/classes.png"></li>
</ol>
<p>Const.java:</p>
<pre class="astro-code monokai" style="background-color:#272822;color:#F8F8F2; overflow-x: auto;" tabindex="0"><code><span class="line"><span>public class Const {</span></span>
<span class="line"><span> public static String TAG = "TTSdkComponent";</span></span>
<span class="line"><span>}</span></span></code></pre>
<p>TTAdManagerHolder.java:</p>
<pre class="astro-code monokai" style="background-color:#272822;color:#F8F8F2; overflow-x: auto;" tabindex="0"><code><span class="line"><span>public class TTAdManagerHolder {</span></span>
<span class="line"><span></span></span>
<span class="line"><span> // 公共方法,封装了对私有方法的调用</span></span>
<span class="line"><span> public void initialize(Context context, String appId) {</span></span>
<span class="line"><span> initMediationAdSdk(context, appId);</span></span>
<span class="line"><span> // 可以添加其他初始化逻辑或检查</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> //初始化聚合sdk</span></span>
<span class="line"><span> private void initMediationAdSdk(Context context, String appId) {</span></span>
<span class="line"><span> TTAdSdk.init(context, buildConfig(context, appId));</span></span>
<span class="line"><span> TTAdSdk.start(new TTAdSdk.Callback() {</span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void success() {</span></span>
<span class="line"><span> System.out.println("初始化成功1");</span></span>
<span class="line"><span> //初始化成功</span></span>
<span class="line"><span> //在初始化成功回调之后进行广告加载"</span></span>
<span class="line"><span>// JsbBridge.sendToScript("onInit", "true");</span></span>
<span class="line"><span> // 一定要在 GL 线程中执行</span></span>
<span class="line"><span> runOnGLThread(new Runnable() {</span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void run() {</span></span>
<span class="line"><span> Cocos2dxJavascriptJavaBridge.evalString("Ad.onNative(\"onInit\", \"true\")");</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> });</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void fail(int i, String s) {</span></span>
<span class="line"><span> //初始化失败</span></span>
<span class="line"><span> System.out.println("初始化失败");</span></span>
<span class="line"><span>// JsbBridge.sendToScript("onInit", "false");</span></span>
<span class="line"><span> // 一定要在 GL 线程中执行</span></span>
<span class="line"><span> runOnGLThread(new Runnable() {</span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void run() {</span></span>
<span class="line"><span> Cocos2dxJavascriptJavaBridge.evalString("Ad.onNative(\"onInit\", \"false\")");</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> });</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> });</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> private static TTAdConfig buildConfig(Context context, String appId) {</span></span>
<span class="line"><span></span></span>
<span class="line"><span> return new TTAdConfig.Builder()</span></span>
<span class="line"><span> /**</span></span>
<span class="line"><span> * 注:需要替换成在媒体平台申请的appID ,切勿直接复制</span></span>
<span class="line"><span> */</span></span>
<span class="line"><span> .appId(appId)</span></span>
<span class="line"><span> .appName("APP测试媒体")</span></span>
<span class="line"><span> /**</span></span>
<span class="line"><span> * 上线前需要关闭debug开关,否则会影响性能</span></span>
<span class="line"><span> */</span></span>
<span class="line"><span> .debug(false)</span></span>
<span class="line"><span> /**</span></span>
<span class="line"><span> * 使用聚合功能此开关必须设置为true,默认为false</span></span>
<span class="line"><span> */</span></span>
<span class="line"><span> .useMediation(true)</span></span>
<span class="line"><span>// .customController(getTTCustomController()) //如果您需要设置隐私策略请参考该api</span></span>
<span class="line"><span>// .setMediationConfig(new MediationConfig.Builder() //可设置聚合特有参数详细设置请参考该api</span></span>
<span class="line"><span>// .setMediationConfigUserInfoForSegment(getUserInfoForSegment())//如果您需要配置流量分组信息请参考该api</span></span>
<span class="line"><span>// .build())</span></span>
<span class="line"><span> .build();</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span>}</span></span></code></pre>
<p>TTSdkBannerAd.java:</p>
<pre class="astro-code monokai" style="background-color:#272822;color:#F8F8F2; overflow-x: auto;" tabindex="0"><code><span class="line"><span>public class TTSdkBannerAd {</span></span>
<span class="line"><span> TTAdNative adNativeLoader;</span></span>
<span class="line"><span> AdSlot adSlot;</span></span>
<span class="line"><span> TTNativeExpressAd mBannerAd;</span></span>
<span class="line"><span> FrameLayout mBannerContainer;</span></span>
<span class="line"><span> Activity activity;</span></span>
<span class="line"><span> float left, top;</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public TTSdkBannerAd(Activity activity, String codeId, float left, float top, int width, int height) {</span></span>
<span class="line"><span> activity = activity;</span></span>
<span class="line"><span> this.left = left;</span></span>
<span class="line"><span> this.top = top;</span></span>
<span class="line"><span> adNativeLoader = TTAdSdk.getAdManager().createAdNative(activity);</span></span>
<span class="line"><span> adSlot = new AdSlot.Builder()</span></span>
<span class="line"><span> .setCodeId(codeId)</span></span>
<span class="line"><span> .setImageAcceptedSize(width, height) // 单位px</span></span>
<span class="line"><span> .build();</span></span>
<span class="line"><span> mBannerContainer = (FrameLayout) activity.findViewById(android.R.id.content).getRootView();</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> private void loadBannerExpressAd() {</span></span>
<span class="line"><span> adNativeLoader.loadBannerExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() {</span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onError(int i, String s) {</span></span>
<span class="line"><span> Log.d(Const.TAG, "banner load fail: errCode: " + i + ", errMsg: " + s);</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onNativeExpressAdLoad(List<TTNativeExpressAd> list) {</span></span>
<span class="line"><span> if (list != null && list.size() > 0) {</span></span>
<span class="line"><span> Log.d(Const.TAG, "banner load success");</span></span>
<span class="line"><span> destroyBannerAd();</span></span>
<span class="line"><span> mBannerAd = list.get(0);</span></span>
<span class="line"><span> mBannerAd.setSlideIntervalTime(30 * 1000);</span></span>
<span class="line"><span> if (mBannerAd != null) {</span></span>
<span class="line"><span> showBannerAd();</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> } else {</span></span>
<span class="line"><span> Log.d(Const.TAG, "banner load success, but list is null");</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> });</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public void showBannerAd() {</span></span>
<span class="line"><span> if (mBannerAd != null) {</span></span>
<span class="line"><span> mBannerAd.setExpressInteractionListener(new</span></span>
<span class="line"><span> TTNativeExpressAd.ExpressAdInteractionListener() {</span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onAdClicked(View view, int i) {</span></span>
<span class="line"><span> Log.d(Const.TAG, "banner clicked");</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onAdShow(View view, int i) {</span></span>
<span class="line"><span> Log.d(Const.TAG, "banner showed");</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onRenderFail(View view, String s, int i) {</span></span>
<span class="line"><span> Log.d(Const.TAG, "banner renderFail, errCode" + i + ", errMsg: " + s);</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onRenderSuccess(View view, float v, float v1) {</span></span>
<span class="line"><span> Log.d(Const.TAG, "banner render success");</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> });</span></span>
<span class="line"><span> mBannerAd.setDislikeCallback(activity, new</span></span>
<span class="line"><span> TTAdDislike.DislikeInteractionCallback() {</span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onShow() {</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onSelected(int i, String s, boolean b) {</span></span>
<span class="line"><span> Log.d(Const.TAG, "banner closed");</span></span>
<span class="line"><span> destroyBannerAd();</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onCancel() {</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> });</span></span>
<span class="line"><span> View bannerView = mBannerAd.getExpressAdView();</span></span>
<span class="line"><span> if (bannerView != null && mBannerContainer != null) {</span></span>
<span class="line"><span> mBannerContainer.addView(bannerView);</span></span>
<span class="line"><span> bannerView.setX(left);</span></span>
<span class="line"><span> bannerView.setY(top);</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> } else {</span></span>
<span class="line"><span>// Log.d(Const.TAG, "请先加载广告或等待广告加载完毕后再展示广告");</span></span>
<span class="line"><span> loadBannerExpressAd();</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public void destroyBannerAd() {</span></span>
<span class="line"><span> if (mBannerAd != null) {</span></span>
<span class="line"><span> mBannerAd.destroy();</span></span>
<span class="line"><span> mBannerAd = null;</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span>}</span></span></code></pre>
<p>TTSdkComponent.java:</p>
<pre class="astro-code monokai" style="background-color:#272822;color:#F8F8F2; overflow-x: auto;" tabindex="0"><code><span class="line"><span>public class TTSdkComponent {</span></span>
<span class="line"><span></span></span>
<span class="line"><span> TTSdkBannerAd mTTBannerAd = null;</span></span>
<span class="line"><span> TTSdkRewardedVideoAd mTTRewardedVideoAd = null;</span></span>
<span class="line"><span> TTSdkFullScreenVideoAd mTTSdkFullScreenVideoAd = null;</span></span>
<span class="line"><span> TTSdkSplashAd mTTSdkSplashAd = null;</span></span>
<span class="line"><span></span></span>
<span class="line"><span> Activity activity;</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> public static TTSdkComponent mTTSdkComponent;</span></span>
<span class="line"><span></span></span>
<span class="line"><span></span></span>
<span class="line"><span> public TTSdkComponent(Activity activity) {</span></span>
<span class="line"><span> this.activity = activity;</span></span>
<span class="line"><span> TTSdkComponent.mTTSdkComponent = this;</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public static void sendToNative(String arg0, String arg1){</span></span>
<span class="line"><span> Log.d(Const.TAG, "banner load success, but list is null" + arg0 +"?" +arg1);</span></span>
<span class="line"><span> TTSdkComponent.mTTSdkComponent.onScript(arg0,arg1);</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public void onScript(String arg0, String arg1){</span></span>
<span class="line"><span> JSONObject jsonObject = JSON.parseObject(arg1);</span></span>
<span class="line"><span> Activity activity = this.activity;</span></span>
<span class="line"><span> if (arg0.equals("showToast")) {</span></span>
<span class="line"><span> String content = jsonObject.getString("content");</span></span>
<span class="line"><span> activity.runOnUiThread(new Runnable() {</span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void run() {</span></span>
<span class="line"><span> Toast.makeText(activity, content,</span></span>
<span class="line"><span> Toast.LENGTH_SHORT).show();</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> });</span></span>
<span class="line"><span> } else if (arg0.equals("init")) {</span></span>
<span class="line"><span> TTAdManagerHolder ttAdManagerHolder = new TTAdManagerHolder();</span></span>
<span class="line"><span> String appId = jsonObject.getString("appId");</span></span>
<span class="line"><span> ttAdManagerHolder.initialize(activity, appId);</span></span>
<span class="line"><span> } else if (arg0.equals("showBannerAd")) {</span></span>
<span class="line"><span> if (mTTBannerAd == null) {</span></span>
<span class="line"><span> String codeId = jsonObject.getString("codeId");</span></span>
<span class="line"><span> float left = jsonObject.getFloatValue("left");</span></span>
<span class="line"><span> float top = jsonObject.getFloatValue("top");</span></span>
<span class="line"><span> int width = jsonObject.getIntValue("width");</span></span>
<span class="line"><span> int height = jsonObject.getIntValue("height");</span></span>
<span class="line"><span> mTTBannerAd = new TTSdkBannerAd(activity, codeId, left, top, width, height);</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> if (mTTBannerAd != null) {</span></span>
<span class="line"><span> boolean isShow = jsonObject.getBooleanValue("isShow");</span></span>
<span class="line"><span> if (isShow) {</span></span>
<span class="line"><span> mTTBannerAd.showBannerAd();</span></span>
<span class="line"><span> } else {</span></span>
<span class="line"><span> mTTBannerAd.destroyBannerAd();</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> } else if (arg0.equals("showRewardVideoAd")) {</span></span>
<span class="line"><span> if (mTTRewardedVideoAd == null) {</span></span>
<span class="line"><span> String codeId = jsonObject.getString("codeId");</span></span>
<span class="line"><span> mTTRewardedVideoAd = new TTSdkRewardedVideoAd(activity, codeId);</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> if (mTTRewardedVideoAd != null) {</span></span>
<span class="line"><span> mTTRewardedVideoAd.showRewardVideoAd();</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> } else if (arg0.equals("showSplashAd")) {</span></span>
<span class="line"><span> if (mTTSdkSplashAd == null) {</span></span>
<span class="line"><span> String codeId = jsonObject.getString("codeId");</span></span>
<span class="line"><span> int width = jsonObject.getIntValue("width");</span></span>
<span class="line"><span> int height = jsonObject.getIntValue("height");</span></span>
<span class="line"><span> mTTSdkSplashAd = new TTSdkSplashAd(activity, codeId, width, height);</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> mTTSdkSplashAd.showSplashAd(null);</span></span>
<span class="line"><span> } else if (arg0.equals("showFullScreenVideoAd")) {</span></span>
<span class="line"><span> if (mTTSdkFullScreenVideoAd == null) {</span></span>
<span class="line"><span> String codeId = jsonObject.getString("codeId");</span></span>
<span class="line"><span> mTTSdkFullScreenVideoAd = new TTSdkFullScreenVideoAd(activity, codeId);</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> mTTSdkFullScreenVideoAd.showFullScreenVideoAd();</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span>}</span></span></code></pre>
<p>TTSdkFullScreenVideoAd.java:</p>
<pre class="astro-code monokai" style="background-color:#272822;color:#F8F8F2; overflow-x: auto;" tabindex="0"><code><span class="line"><span>public class TTSdkFullScreenVideoAd {</span></span>
<span class="line"><span></span></span>
<span class="line"><span> TTAdNative adNativeLoader;</span></span>
<span class="line"><span> AdSlot adSlot;</span></span>
<span class="line"><span> TTFullScreenVideoAd mTTFullScreenVideoAd;</span></span>
<span class="line"><span> Activity activity;</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public TTSdkFullScreenVideoAd(Activity activity, String codeId) {</span></span>
<span class="line"><span> this.activity = activity;</span></span>
<span class="line"><span> adNativeLoader = TTAdSdk.getAdManager().createAdNative(activity);</span></span>
<span class="line"><span> adSlot = new AdSlot.Builder()</span></span>
<span class="line"><span> .setCodeId(codeId)</span></span>
<span class="line"><span> .setOrientation(TTAdConstant.ORIENTATION_VERTICAL)//设置横竖屏方向</span></span>
<span class="line"><span>// .setMediationAdSlot(new MediationAdSlot.Builder()</span></span>
<span class="line"><span>// .setMuted(true)//是否静音</span></span>
<span class="line"><span>// .setVolume(0.7f)//设置音量</span></span>
<span class="line"><span>// .setBidNotify(true)//竞价结果通知</span></span>
<span class="line"><span>// .build())</span></span>
<span class="line"><span> .build();</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public void loadFullScreenVideoAd(boolean isShow) {</span></span>
<span class="line"><span> adNativeLoader.loadFullScreenVideoAd(adSlot, new TTAdNative.FullScreenVideoAdListener() {</span></span>
<span class="line"><span> public void onError(int code, String message) {</span></span>
<span class="line"><span> Log.d(Const.TAG, "InterstitialFull onError code = " + code + " msg = " + message);</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public void onFullScreenVideoAdLoad(TTFullScreenVideoAd ad) {</span></span>
<span class="line"><span> Log.d(Const.TAG, "InterstitialFull onFullScreenVideoLoaded");</span></span>
<span class="line"><span> mTTFullScreenVideoAd = ad;</span></span>
<span class="line"><span>// Log.d("sada",""+isShow);</span></span>
<span class="line"><span> if (isShow) {</span></span>
<span class="line"><span> showFullScreenVideoAd();</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public void onFullScreenVideoCached() {</span></span>
<span class="line"><span> Log.d(Const.TAG, "InterstitialFull onFullScreenVideoCached");</span></span>
<span class="line"><span> Log.d("5785785727","57587575875");</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public void onFullScreenVideoCached(TTFullScreenVideoAd ad) {</span></span>
<span class="line"><span> Log.d("sasasdasd","sadasda");</span></span>
<span class="line"><span> Log.d(Const.TAG, "InterstitialFull onFullScreenVideoCached");</span></span>
<span class="line"><span> mTTFullScreenVideoAd = ad;</span></span>
<span class="line"><span> if (isShow) {</span></span>
<span class="line"><span> showFullScreenVideoAd();</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> });</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public void showFullScreenVideoAd() {</span></span>
<span class="line"><span>// Log.d("mm", ""+(mTTFullScreenVideoAd==null));</span></span>
<span class="line"><span> if (mTTFullScreenVideoAd == null) {</span></span>
<span class="line"><span> loadFullScreenVideoAd(true);</span></span>
<span class="line"><span> return;</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> // 展示广告</span></span>
<span class="line"><span> this.mTTFullScreenVideoAd.setFullScreenVideoAdInteractionListener(new TTFullScreenVideoAd.FullScreenVideoAdInteractionListener() {</span></span>
<span class="line"><span> public void onAdShow() {</span></span>
<span class="line"><span> Log.d(Const.TAG, "InterstitialFull onAdShow");</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public void onAdVideoBarClick() {</span></span>
<span class="line"><span> Log.d(Const.TAG, "InterstitialFull onAdVideoBarClick");</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public void onAdClose() {</span></span>
<span class="line"><span> Log.d(Const.TAG, "InterstitialFull onAdClose");</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public void onVideoComplete() {</span></span>
<span class="line"><span> Log.d(Const.TAG, "InterstitialFull onVideoComplete");</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public void onSkippedVideo() {</span></span>
<span class="line"><span> Log.d(Const.TAG, "InterstitialFull onSkippedVideo");</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> });</span></span>
<span class="line"><span> this.mTTFullScreenVideoAd.showFullScreenVideoAd(activity);</span></span>
<span class="line"><span> this.mTTFullScreenVideoAd = null;</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span>}</span></span></code></pre>
<p>TTSdkRewardedVideoAd.java:</p>
<pre class="astro-code monokai" style="background-color:#272822;color:#F8F8F2; overflow-x: auto;" tabindex="0"><code><span class="line"><span>public class TTSdkRewardedVideoAd {</span></span>
<span class="line"><span> TTAdNative adNativeLoader;</span></span>
<span class="line"><span> AdSlot adSlot;</span></span>
<span class="line"><span> TTRewardVideoAd mTTRewardVideoAd;</span></span>
<span class="line"><span> Activity activity;</span></span>
<span class="line"><span> public boolean mIsRewardValid;</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public TTSdkRewardedVideoAd(Activity activity, String codeId) {</span></span>
<span class="line"><span> activity = activity;</span></span>
<span class="line"><span> adNativeLoader = TTAdSdk.getAdManager().createAdNative(activity);</span></span>
<span class="line"><span> adSlot = new AdSlot.Builder()</span></span>
<span class="line"><span> .setCodeId(codeId)</span></span>
<span class="line"><span> .setOrientation(TTAdConstant.VERTICAL)//横竖屏设置</span></span>
<span class="line"><span>// .setMediationAdSlot(new MediationAdSlot</span></span>
<span class="line"><span>// .Builder()</span></span>
<span class="line"><span>// .setExtraObject(MediationConstant.ADN_PANGLE, "pangleRewardCustomData")//服务端奖励验证透传参数</span></span>
<span class="line"><span>// .setExtraObject(MediationConstant.ADN_GDT, "gdtRewardCustomData")</span></span>
<span class="line"><span>// .setExtraObject(MediationConstant.ADN_BAIDU, "baiduRewardCustomData")</span></span>
<span class="line"><span>// .build())</span></span>
<span class="line"><span> .build();</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> private void loadRewardVideoAd(boolean isShow) {</span></span>
<span class="line"><span> adNativeLoader.loadRewardVideoAd(adSlot, new TTAdNative.RewardVideoAdListener() {</span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onError(int i, String s) {</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onRewardVideoAdLoad(TTRewardVideoAd ttRewardVideoAd) {</span></span>
<span class="line"><span> mTTRewardVideoAd = ttRewardVideoAd;</span></span>
<span class="line"><span> if (isShow) {</span></span>
<span class="line"><span> showRewardVideoAd();</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onRewardVideoCached() {</span></span>
<span class="line"><span></span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onRewardVideoCached(TTRewardVideoAd ttRewardVideoAd) {</span></span>
<span class="line"><span> mTTRewardVideoAd = ttRewardVideoAd;</span></span>
<span class="line"><span> if (isShow) {</span></span>
<span class="line"><span> showRewardVideoAd();</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> });</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public void showRewardVideoAd() {</span></span>
<span class="line"><span> mIsRewardValid = false;</span></span>
<span class="line"><span> if (mTTRewardVideoAd == null) {</span></span>
<span class="line"><span> loadRewardVideoAd(true);</span></span>
<span class="line"><span> return;</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> mTTRewardVideoAd.setRewardAdInteractionListener(new TTRewardVideoAd.RewardAdInteractionListener() {</span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onAdShow() {</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onAdVideoBarClick() {</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onAdClose() {</span></span>
<span class="line"><span>// JsbBridge.sendToScript("onRewardAdCallback", mIsRewardValid ? "true" : "false");</span></span>
<span class="line"><span> // 一定要在 GL 线程中执行</span></span>
<span class="line"><span> runOnGLThread(new Runnable() {</span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void run() {</span></span>
<span class="line"><span> String success = mIsRewardValid ? "true" : "false";</span></span>
<span class="line"><span> Cocos2dxJavascriptJavaBridge.evalString("Ad.onNative(\"onRewardAdCallback\", \""+success+"\")");</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> });</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onVideoComplete() {</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onVideoError() {</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> //已废弃,请使用onRewardArrived方法</span></span>
<span class="line"><span> public void onRewardVerify(boolean rewardVerify, int rewardAmount, String rewardName, int errorCode, String errorMsg) {</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onRewardArrived(boolean isRewardValid, int rewardType, Bundle extraInfo) {//奖励是否发放请依据isRewardValid</span></span>
<span class="line"><span> // 当用户的观看行为满足了奖励条件</span></span>
<span class="line"><span> mIsRewardValid = isRewardValid;</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onSkippedVideo() {</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> });</span></span>
<span class="line"><span> mTTRewardVideoAd.showRewardVideoAd(activity);</span></span>
<span class="line"><span> mTTRewardVideoAd = null;</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span>}</span></span></code></pre>
<p>TTSdkSplashAd.java:</p>
<pre class="astro-code monokai" style="background-color:#272822;color:#F8F8F2; overflow-x: auto;" tabindex="0"><code><span class="line"><span>public class TTSdkSplashAd {</span></span>
<span class="line"><span></span></span>
<span class="line"><span> TTAdNative adNativeLoader;</span></span>
<span class="line"><span> AdSlot adSlot;</span></span>
<span class="line"><span> Activity activity;</span></span>
<span class="line"><span> FrameLayout mSplashContainer;</span></span>
<span class="line"><span> CSJSplashAd mCsjSplashAd;</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public TTSdkSplashAd(Activity activity, String codeId, int width, int height) {</span></span>
<span class="line"><span> activity = activity;</span></span>
<span class="line"><span> adNativeLoader = TTAdSdk.getAdManager().createAdNative(activity);</span></span>
<span class="line"><span> adSlot = new AdSlot.Builder()</span></span>
<span class="line"><span> .setCodeId(codeId)</span></span>
<span class="line"><span> .setImageAcceptedSize(width, height)//单位px</span></span>
<span class="line"><span> .build();</span></span>
<span class="line"><span> mSplashContainer = (FrameLayout) activity.findViewById(android.R.id.content).getRootView();</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public void loadSplashAd(boolean isShow) {</span></span>
<span class="line"><span> adNativeLoader.loadSplashAd(adSlot, new TTAdNative.CSJSplashAdListener() {</span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onSplashRenderSuccess(CSJSplashAd csjSplashAd) {</span></span>
<span class="line"><span> Log.d("SplashAd","onSplashRenderSuccess");</span></span>
<span class="line"><span> /** 渲染成功后,展示广告 */</span></span>
<span class="line"><span> if (isShow)</span></span>
<span class="line"><span> showSplashAd(csjSplashAd);</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onSplashLoadSuccess(CSJSplashAd csjSplashAd) {</span></span>
<span class="line"><span> Log.d("SplashAd","onSplashLoadSuccess");</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onSplashLoadFail(CSJAdError csjAdError) {</span></span>
<span class="line"><span> Log.d("SplashAd","onSplashLoadFail:"+csjAdError.getMsg());</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onSplashRenderFail(CSJSplashAd csjSplashAd, CSJAdError csjAdError) {</span></span>
<span class="line"><span> Log.d("SplashAd","onSplashRenderFail:"+csjAdError.getMsg());</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> }, 3500);</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public void showSplashAd(CSJSplashAd csjSplashAd) {</span></span>
<span class="line"><span> if (csjSplashAd == null) {</span></span>
<span class="line"><span> loadSplashAd(true);</span></span>
<span class="line"><span> return;</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> csjSplashAd.setSplashAdListener(new CSJSplashAd.SplashAdListener() {</span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onSplashAdShow(CSJSplashAd csjSplashAd) {</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onSplashAdClick(CSJSplashAd csjSplashAd) {</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> public void onSplashAdClose(CSJSplashAd csjSplashAd, int i) {</span></span>
<span class="line"><span> // 广告关闭后,销毁广告页面</span></span>
<span class="line"><span> finish();</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> });</span></span>
<span class="line"><span> mCsjSplashAd = csjSplashAd;</span></span>
<span class="line"><span> View splashView = csjSplashAd.getSplashView();</span></span>
<span class="line"><span>// UIUtils.removeFromParent(splashView);</span></span>
<span class="line"><span>// mSplashContainer.removeAllViews();</span></span>
<span class="line"><span> mSplashContainer.addView(splashView);</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> public void finish() {</span></span>
<span class="line"><span> if (mCsjSplashAd != null && mCsjSplashAd.getMediationManager() != null) {</span></span>
<span class="line"><span> mSplashContainer.removeView(mCsjSplashAd.getSplashView());</span></span>
<span class="line"><span> mCsjSplashAd.getMediationManager().destroy();</span></span>
<span class="line"><span> mCsjSplashAd = null;</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span>}</span></span></code></pre>
<ol start="6">
<li><strong>初始化组件</strong>
在AppActivity初始化组件</li>
</ol>
<pre class="astro-code monokai" style="background-color:#272822;color:#F8F8F2; overflow-x: auto;" tabindex="0"><code><span class="line"><span>public class AppActivity extends Cocos2dxActivity {</span></span>
<span class="line"><span></span></span>
<span class="line"><span> @Override</span></span>
<span class="line"><span> protected void onCreate(Bundle savedInstanceState) {</span></span>
<span class="line"><span> super.onCreate(savedInstanceState);</span></span>
<span class="line"><span> // DO OTHER INITIALIZATION BELOW</span></span>
<span class="line"><span> SDKWrapper.getInstance().init(this);</span></span>
<span class="line"><span> // 初始化组件</span></span>
<span class="line"><span> new TTSdkComponent(this);</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span>}</span></span></code></pre>
<p><strong>至此安卓的初始化就完成了,穿山甲不愧是大平台,接入就是如此丝滑</strong></p>
<h2 id="配置穿山甲广告">配置穿山甲广告</h2>
<h3 id="1-初始化-sdk">1. 初始化 SDK</h3>
<p>在 Cocos 项目的主脚本中,初始化穿山甲 SDK:
首先创建如下TS脚本,如果采用js请自行转换。
<img src="/images/csj/cocosscript.png">
Ad.ts:</p>
<pre class="astro-code monokai" style="background-color:#272822;color:#F8F8F2; overflow-x: auto;" tabindex="0"><code><span class="line"><span>const { ccclass, property } = cc._decorator;</span></span>
<span class="line"><span> </span></span>
<span class="line"><span>@ccclass("AdConfigBase")</span></span>
<span class="line"><span>class AdConfigBase {</span></span>
<span class="line"><span> @property({ displayName: "广告Id" })</span></span>
<span class="line"><span> codeId: string = "";</span></span>
<span class="line"><span>};</span></span>
<span class="line"><span> </span></span>
<span class="line"><span>@ccclass("RewardedVideoAdConfig")</span></span>
<span class="line"><span>class RewardedVideoAdConfig extends AdConfigBase {</span></span>
<span class="line"><span>};</span></span>
<span class="line"><span> </span></span>
<span class="line"><span>@ccclass("BannerAdConfig")</span></span>
<span class="line"><span>class BannerAdConfig extends AdConfigBase {</span></span>
<span class="line"><span> @property({ displayName: "宽度" })</span></span>
<span class="line"><span> width: number = 500;</span></span>
<span class="line"><span> @property({ displayName: "高度" })</span></span>
<span class="line"><span> height: number = 300;</span></span>
<span class="line"><span>};</span></span>
<span class="line"><span> </span></span>
<span class="line"><span>@ccclass("InterstitialAdConfig")</span></span>
<span class="line"><span>class InterstitialAdConfig extends AdConfigBase {</span></span>
<span class="line"><span>};</span></span>
<span class="line"><span> </span></span>
<span class="line"><span>@ccclass("SplashAdConfig")</span></span>
<span class="line"><span>class SplashAdConfig extends AdConfigBase {</span></span>
<span class="line"><span>};</span></span>
<span class="line"><span> </span></span>
<span class="line"><span>@ccclass("Ad")</span></span>
<span class="line"><span>export class Ad {</span></span>
<span class="line"><span> @property({ displayName: "应用appId" })</span></span>
<span class="line"><span> appId: string = "";</span></span>
<span class="line"><span> @property({ type: BannerAdConfig, displayName: "Banner广告" })</span></span>
<span class="line"><span> bannerAdConfig: BannerAdConfig = new BannerAdConfig();</span></span>
<span class="line"><span> @property({ type: RewardedVideoAdConfig, displayName: "激励视频广告" })</span></span>
<span class="line"><span> rewardedVideoAdConfig: RewardedVideoAdConfig = new RewardedVideoAdConfig();</span></span>
<span class="line"><span> @property({ type: SplashAdConfig, displayName: "开屏广告" })</span></span>
<span class="line"><span> splashAdConfig: SplashAdConfig = new SplashAdConfig();</span></span>
<span class="line"><span> @property({ type: InterstitialAdConfig, displayName: "插屏广告" })</span></span>
<span class="line"><span> interstitialAdConfig: InterstitialAdConfig = new InterstitialAdConfig();</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> private rewardAdCallback: any;</span></span>
<span class="line"><span> private rewardAdCallbackObj: any;</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> private static onNativeCallback: any;</span></span>
<span class="line"><span> private static onNativeCallbackObj: any;</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> sendToNative(arg0: string, arg1?: string) {</span></span>
<span class="line"><span> // native.bridge.sendToNative(arg0, arg1);</span></span>
<span class="line"><span> jsb.reflection.callStaticMethod("com/yiyuancoder/ttsdk/TTSdkComponent", "sendToNative", "(Ljava/lang/String;Ljava/lang/String;)V", arg0, arg1);</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> public static onNative(arg0: string, arg1: string) {</span></span>
<span class="line"><span> if (this.onNativeCallback != null) {</span></span>
<span class="line"><span> this.onNativeCallback.call(this.onNativeCallbackObj, arg0, arg1);</span></span>
<span class="line"><span> this.onNativeCallback = null;</span></span>
<span class="line"><span> this.onNativeCallbackObj = null;</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> async init() {</span></span>
<span class="line"><span> return new Promise((resolve, reject) => {</span></span>
<span class="line"><span> // native.bridge.onNative = (arg0: string, arg1: string): void => {</span></span>
<span class="line"><span> // if (arg0 == 'onInit') {</span></span>
<span class="line"><span> // resolve(arg1 == "true");</span></span>
<span class="line"><span> // }</span></span>
<span class="line"><span> // }</span></span>
<span class="line"><span> Ad.onNativeCallbackObj = this;</span></span>
<span class="line"><span> Ad.onNativeCallback = (arg0: string, arg1: string) => {</span></span>
<span class="line"><span> if (arg0 == 'onInit') {</span></span>
<span class="line"><span> resolve(arg1 == "true");</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> this.sendToNative("init", JSON.stringify({ appId: this.appId }));</span></span>
<span class="line"><span> })</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> /**</span></span>
<span class="line"><span> * 显示Banner广告</span></span>
<span class="line"><span> */</span></span>
<span class="line"><span> showBannerAd(show: boolean): void {</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> let width = this.bannerAdConfig.width;</span></span>
<span class="line"><span> let height = this.bannerAdConfig.height;</span></span>
<span class="line"><span> let left = screen.width / 2 - width / 2;</span></span>
<span class="line"><span> let top = screen.height - height;</span></span>
<span class="line"><span> this.sendToNative("showBannerAd", JSON.stringify({ isShow: show, codeId: this.bannerAdConfig.codeId, left: left, top: top, width: width, height: height }));</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> /**</span></span>
<span class="line"><span> * 播放激励视频广告</span></span>
<span class="line"><span> */</span></span>
<span class="line"><span> showRewardedVideoAd(rewardAdCallback: Function, rewardAdCallbackObj: any): void {</span></span>
<span class="line"><span> this.rewardAdCallback = rewardAdCallback;</span></span>
<span class="line"><span> this.rewardAdCallbackObj = rewardAdCallbackObj;</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> let that = this;</span></span>
<span class="line"><span> // native.bridge.onNative = (arg0: string, arg1: string): void => {</span></span>
<span class="line"><span> // if (arg0 == 'onRewardAdCallback') {</span></span>
<span class="line"><span> // that.onRewardAdCallback(arg1 == "true");</span></span>
<span class="line"><span> // }</span></span>
<span class="line"><span> // }</span></span>
<span class="line"><span> Ad.onNativeCallbackObj = this;</span></span>
<span class="line"><span> Ad.onNativeCallback = (arg0: string, arg1: string) => {</span></span>
<span class="line"><span> if (arg0 == 'onRewardAdCallback') {</span></span>
<span class="line"><span> that.onRewardAdCallback(arg1 == "true");</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> this.sendToNative("showRewardVideoAd", JSON.stringify({ codeId: this.rewardedVideoAdConfig.codeId }));</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> /**</span></span>
<span class="line"><span> * 激励视频广告回调</span></span>
<span class="line"><span> */</span></span>
<span class="line"><span> onRewardAdCallback(success: boolean) {</span></span>
<span class="line"><span> if (this.rewardAdCallback) {</span></span>
<span class="line"><span> this.rewardAdCallback.call(this.rewardAdCallbackObj, success);</span></span>
<span class="line"><span> this.rewardAdCallback = null;</span></span>
<span class="line"><span> this.rewardAdCallbackObj = null;</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> /**</span></span>
<span class="line"><span> * 显示开屏广告</span></span>
<span class="line"><span> */</span></span>
<span class="line"><span> showSplashAd(): void {</span></span>
<span class="line"><span> this.sendToNative("showSplashAd", JSON.stringify({ codeId: this.splashAdConfig.codeId, width: screen.width, height: screen.height }));</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> /**</span></span>
<span class="line"><span> * 显示插屏广告</span></span>
<span class="line"><span> */</span></span>
<span class="line"><span> showFullScreenVideoAd() {</span></span>
<span class="line"><span> // 在适合的场景显示插屏广告</span></span>
<span class="line"><span> this.sendToNative("showFullScreenVideoAd", JSON.stringify({ codeId: this.interstitialAdConfig.codeId }));</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span>};</span></span>
<span class="line"><span> </span></span>
<span class="line"><span>window.Ad = Ad;</span></span></code></pre>
<p>TTSdkComponent.ts:</p>
<pre class="astro-code monokai" style="background-color:#272822;color:#F8F8F2; overflow-x: auto;" tabindex="0"><code><span class="line"><span>import { Ad } from "./Ad";</span></span>
<span class="line"><span> </span></span>
<span class="line"><span>const { ccclass, property } = cc._decorator;</span></span>
<span class="line"><span> </span></span>
<span class="line"><span>declare var wx: any;</span></span>
<span class="line"><span> </span></span>
<span class="line"><span>@ccclass</span></span>
<span class="line"><span>export default class TTSdkComponent extends cc.Component {</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> @property({ type: Ad, displayName: "广告模块" })</span></span>
<span class="line"><span> ad: Ad = new Ad();</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> sendToNative(arg0: string, arg1?: string) {</span></span>
<span class="line"><span> jsb.reflection.callStaticMethod("com/yiyuancoder/ttsdk/TTSdkComponent", "sendToNative", "(Ljava/lang/String;Ljava/lang/String;)V", arg0, arg1);</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> showToast(content: string) {</span></span>
<span class="line"><span> this.sendToNative('showToast', JSON.stringify({ content: content }));</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span>}</span></span></code></pre>
<p>Main.ts:</p>
<pre class="astro-code monokai" style="background-color:#272822;color:#F8F8F2; overflow-x: auto;" tabindex="0"><code><span class="line"><span>//获取穿山甲Sdk组件</span></span>
<span class="line"><span>let ttSdkComponent = cc.find("TTSdkComponent").getComponent(TTSdkComponent);</span></span>
<span class="line"><span>//初始化</span></span>
<span class="line"><span>let inited = await ttSdkComponent.ad.init();</span></span>
<span class="line"><span>console.log(inited);</span></span>
<span class="line"><span>if (!inited) {</span></span>
<span class="line"><span> ttSdkComponent.showToast("广告组件初始化失败");</span></span>
<span class="line"><span> return;</span></span>
<span class="line"><span>}</span></span></code></pre>
<p>以上Main.ts文件主要用于初始化脚本。</p>
<h3 id="2-挂载脚本">2. 挂载脚本</h3>
<p>在你的cocos场景中新建节点,并挂载脚本文件:
<img src="/images/csj/model.png">
如上,填上你在平台申请的信息。</p>
<h3 id="3-调用广告">3. 调用广告</h3>
<pre class="astro-code monokai" style="background-color:#272822;color:#F8F8F2; overflow-x: auto;" tabindex="0"><code><span class="line"><span style="color:#F92672">import</span><span style="color:#F8F8F2"> TTSdkComponent </span><span style="color:#F92672">from</span><span style="color:#E6DB74"> "./TTSdkComponent"</span><span style="color:#F8F8F2">;</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic">const</span><span style="color:#F8F8F2"> { ccclass, property } </span><span style="color:#F92672">=</span><span style="color:#F8F8F2"> cc._decorator;</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:#F8F8F2">async </span><span style="color:#A6E22E">start</span><span style="color:#F8F8F2">(){</span></span>
<span class="line"><span style="color:#88846F"> // banner</span></span>
<span class="line"><span style="color:#F8F8F2"> ttSdkComponent.ad.</span><span style="color:#A6E22E">showBannerAd</span><span style="color:#F8F8F2">(bannerAdFlag);</span></span>
<span class="line"><span style="color:#88846F"> // reward</span></span>
<span class="line"><span style="color:#F8F8F2"> ttSdkComponent.ad.</span><span style="color:#A6E22E">showRewardedVideoAd</span><span style="color:#F8F8F2">((</span><span style="color:#FD971F;font-style:italic">success</span><span style="color:#F92672">:</span><span style="color:#66D9EF;font-style:italic"> boolean</span><span style="color:#F8F8F2">) </span><span style="color:#66D9EF;font-style:italic">=></span><span style="color:#F8F8F2"> {</span></span>
<span class="line"><span style="color:#F8F8F2"> ttSdkComponent.</span><span style="color:#A6E22E">showToast</span><span style="color:#F8F8F2">(success </span><span style="color:#F92672">?</span><span style="color:#E6DB74"> "恭喜获得奖励"</span><span style="color:#F92672"> :</span><span style="color:#E6DB74"> "完整观看视频才能获得奖励哦"</span><span style="color:#F8F8F2">);</span></span>
<span class="line"><span style="color:#F8F8F2"> }, </span><span style="color:#FD971F">this</span><span style="color:#F8F8F2">);</span></span>
<span class="line"><span style="color:#88846F"> // 开屏</span></span>
<span class="line"><span style="color:#F8F8F2"> ttSdkComponent.ad.</span><span style="color:#A6E22E">showSplashAd</span><span style="color:#F8F8F2">();</span></span>
<span class="line"><span style="color:#88846F"> //插屏</span></span>
<span class="line"><span style="color:#F8F8F2"> ttSdkComponent.ad.</span><span style="color:#A6E22E">showFullScreenVideoAd</span><span style="color:#F8F8F2">();</span></span>
<span class="line"><span style="color:#F8F8F2">}</span></span></code></pre>
<p>以上仅为示例代码,在你的具体业务中请一定要初始化以后再调用方法。</p>
<p><strong>至此你就可以接入穿山甲实现广告变现</strong></p></content:encoded>
<enclosure url="https://layfz.com/images/uploads/csj.png" length="0" type="image/jpeg"/>