Cocos Creator 3.8 接入Taku

📅 2026/7/22 11:56:53
Cocos Creator 3.8 接入Taku
提前你的申请账号https://app.takuad.com/SDK下载中心https://app.takuad.com/m/sdk/downloadTaku SDK接入指南 1.开屏广告 开屏广告容器 FrameLayout android:idid/splash_ad_container android:layout_widthmatch_parent android:layout_heightmatch_parent / 查找到容器 mSplashContainer findViewById(R.id.splash_ad_container); mSplashContainer.setVisibility(View.GONE); 开屏广告拉取 // 注lastTime需要替换为您的开屏广告超时时间单位毫秒 ATSplashAd splashAd new ATSplashAd(context, placementId, listner, lastTime); splashAd.loadAd(); 在合适的地方显示比如onAdLoaded splashAd.entryAdScenario(AdConst.SCENARIO_ID.SPLASH_AD_SCENARIO); mSplashContainer.setVisibility(View.VISIBLE); splashAd.show(appActivity, mSplashContainer); 在合适的时候移除或者隐藏比如onAdLoadTimeoutonNoAdErroronAdDismiss if (mSplashContainer ! null) { mSplashContainer.removeAllViews(); mSplashContainer.setVisibility(View.GONE); } 2.插屏广告 插屏广告拉取 //注意广告对象必须要全局引用如果广告对象是临时变量会导致广告加载过程中有可能被回收无法接收广告事件回调 ATInterstitial mInterstitialAd; private void loadInterstitialAd() { if (mInterstitialAd null) { mInterstitialAd new ATInterstitial(this, interstitialTakuPlacementID); } mInterstitialAd.load(); } 插屏广告监听 mInterstitialAd.setAdListener(new ATInterstitialListener() {xxx}); 广告拉取需要一定的时间差在合适的时候再显示 public static void showInterstitialAd() { mInterstitialAd.entryAdScenario(AdConst.SCENARIO_ID.INTERSTITIAL_AD_SCENARIO); if (mInterstitialAd.isAdReady()) { mInterstitialAd.show(appActivity, AdConst.SCENARIO_ID.INTERSTITIAL_AD_SCENARIO); } } 插屏广告需要手动关闭 3.原生广告 原生广告容器native_selfrender_view作为自渲染的容器模板的直接放native_ad_view里面 com.anythink.nativead.api.ATNativeView android:idid/native_ad_view android:layout_widthmatch_parent android:layout_heightwrap_content android:layout_alignParentBottomtrue android:layout_centerHorizontaltrue android:layout_marginBottom0dp android:visibilityvisible tools:ignorePxUsage include android:idid/native_selfrender_view layoutlayout/layout_native_self android:visibilityvisible / /com.anythink.nativead.api.ATNativeView 查找到容器先隐藏 findViewById(R.id.native_ad_view).setVisibility(View.GONE); findViewById(R.id.native_selfrender_view).setVisibility(View.GONE); 原生广告加载不能一直拉取拉取两三次没有广告的话就是没有了 private static void loadNativeAd() { //初始化广告加载对象 ATNative atNative new ATNative(context, your placement id, new ATNativeNetworkListener() { Override public void onNativeAdLoaded() { // 重置重试加载次数 retryAttempt 0; } Override public void onNativeAdLoadFail(AdError adError) { // 加载失败回调 // 我们建议您按照指数递增的方式延长重试间隔直到达到最大延迟时间本例为 8 秒或最大重试次数本例为 3 次 if (retryAttempt 3) return; retryAttempt; long delayMillis TimeUnit.SECONDS.toMillis((long) Math.pow(2, Math.min(3, retryAttempt))); new Handler().postDelayed(new Runnable() { Override public void run() { loadNativeAd(); } }, delayMillis); } }); //发起广告请求 atNative.makeAdRequest(); } 在合适的时候调用显示 public static void showNativeAd() { if (atNative null) { return; } if (!atNative.checkAdStatus().isReady()) { return; } if (mATNativeAdView null) { mATNativeAdView appActivity.findViewById(R.id.native_ad_view); //可在xml布局定义 } if (mSelfRenderView null) { mSelfRenderView mATNativeAdView.findViewById(R.id.native_selfrender_view); //可在xml布局定义 } //6.5.80及以上 atNative.entryAdScenario(AdConst.SCENARIO_ID.NATIVE_AD_SCENARIO); NativeAd nativeAd atNative.getNativeAd(); if (nativeAd ! null) { // 销毁上一次展示的广告对象 if (mNativeAd ! null) { mNativeAd.destory(); } mNativeAd nativeAd; mNativeAd.setNativeEventListener(new ATNativeEventListener() { Override public void onAdImpressed(ATNativeAdView view, ATAdInfo adInfo) {} Override public void onAdClicked(ATNativeAdView view, ATAdInfo adInfo) {} Override public void onAdVideoStart(ATNativeAdView view) {} Override public void onAdVideoEnd(ATNativeAdView view) {} Override public void onAdVideoProgress(ATNativeAdView view, int progress) {} }); mNativeAd.setAdDownloadListener(new ATAppDownloadListener() { Override public void onDownloadStart(ATAdInfo adInfo, long totalBytes, long currBytes, String fileName, String appName) { } Override public void onDownloadUpdate(ATAdInfo adInfo, long totalBytes, long currBytes, String fileName, String appName) { } Override public void onDownloadPause(ATAdInfo adInfo, long totalBytes, long currBytes, String fileName, String appName) { } Override public void onDownloadFinish(ATAdInfo adInfo, long totalBytes, String fileName, String appName) { } Override public void onDownloadFail(ATAdInfo adInfo, long totalBytes, long currBytes, String fileName, String appName) { } Override public void onInstalled(ATAdInfo adInfo, String fileName, String appName) { } }); mNativeAd.setDislikeCallbackListener(new ATNativeDislikeListener() { Override public void onAdCloseButtonClick(ATNativeAdView view, ATAdInfo entity) { exitNativePanel(); } }); if (!mNativeAd.isNativeExpress()) { ATNativePrepareInfo nativePrepareInfo new ATNativePrepareExInfo(); SelfRenderViewUtil.bindSelfRenderView(appActivity, mNativeAd.getAdMaterial(), mSelfRenderView, nativePrepareInfo); mNativeAd.renderAdContainer(mATNativeAdView, mSelfRenderView); mNativeAd.prepare(mATNativeAdView, nativePrepareInfo); mSelfRenderView.setVisibility(View.VISIBLE); } else { //模板渲染 mNativeAd.renderAdContainer(mATNativeAdView, null); } mATNativeAdView.setVisibility(View.VISIBLE); atNative.makeAdRequest(); } } 原生广告关闭按钮监听 private static void exitNativePanel() { if (mNativeAd ! null) { mNativeAd.destory(); } if (atNative ! null) { atNative.makeAdRequest(); } if (mATNativeAdView ! null) { mATNativeAdView.setVisibility(View.GONE); } if (mSelfRenderView ! null) { mSelfRenderView.setVisibility(View.GONE); } } 4.横幅广告 横幅拉取 mBannerView new ATBannerView(BannerAdActivity.this); mBannerView.setPlacementId(bannerTakuPlacementID); mBannerView.loadAd(); 代码写的容器我这样写是加到顶部的底部的可以自己百度一下 int width getResources().getDisplayMetrics().widthPixels;//定一个宽度值比如屏幕宽度 int height (int) (width / (320 / 50f));//按照比例转换高度的值 mBannerView.setLayoutParams(new FrameLayout.LayoutParams(width, height)); mRootLayout.addView(mBannerView); 广告监听 mBannerView.setBannerAdListener(new ATBannerListener() {xxxx}) 手动关闭 Override public void onBannerClose(ATAdInfo atAdInfo) { if (mBannerView ! null mBannerView.getParent() ! null) { ((ViewGroup) mBannerView.getParent()).removeView(mBannerView); } if (mBannerView ! null) { mBannerView.destroy(); mBannerView null; } } 5.激励视频广告 //注意广告对象必须要全局引用如果广告对象是临时变量会导致广告加载过程中有可能被回收无法接收广告事件回调 ATRewardVideoAd mRewardVideoAd; private void loadRewardVideoAd() { if (mRewardVideoAd null) { mRewardVideoAd new ATRewardVideoAd(this, rewardTakuPlacementID); mRewardVideoAd.setAdListener(new ATRewardVideoListener() { Override public void onRewardedVideoAdLoaded() { } Override public void onRewardedVideoAdFailed(AdError adError) { Log.e(TAG, onRewardedVideoAdFailed: adError.getFullErrorInfo()); } Override public void onRewardedVideoAdPlayStart(ATAdInfo adInfo) { mRewardVideoAd.load(); } Override public void onRewardedVideoAdPlayEnd(ATAdInfo atAdInfo) { } Override public void onRewardedVideoAdPlayFailed(AdError adError, ATAdInfo atAdInfo) { Log.e(TAG, onRewardedVideoAdPlayFailed: adError.getFullErrorInfo()); } Override public void onRewardedVideoAdClosed(ATAdInfo atAdInfo) { } Override public void onReward(ATAdInfo atAdInfo) { //建议在此回调中下发奖励一般在onRewardedVideoAdClosed之前回调 } Override public void onRewardedVideoAdPlayClicked(ATAdInfo atAdInfo) { } }); } String userid test_userid_001; String userdata test_userdata_001; Map localMap new HashMap(); localMap.put(ATAdConst.KEY.USER_ID, userid); localMap.put(ATAdConst.KEY.USER_CUSTOM_DATA, userdata); //Load时传自定义参数在广告源填充之后自定义参数会保存起来在展示时回传。适用场景:传入会话信息做防作弊类似 mRewardVideoAd.setLocalExtra(localMap); mRewardVideoAd.load(); } 展示的时候调用 private static void showRewardVideoAd(String message) { getReward message; mRewardVideoAd.entryAdScenario(AdConst.SCENARIO_ID.REWARD_VIDEO_AD_SCENARIO); if (mRewardVideoAd.isAdReady()) { Log.e(TAG, 游戏视频广告播放回调:\n); mRewardVideoAd.show(appActivity, AdConst.SCENARIO_ID.REWARD_VIDEO_AD_SCENARIO); } else { ToastUtils.showLong(激励广告准备状态异常强稍后重试); sendRewardToJs(getReward); } }import { _decorator, Component, native, sys } from cc; import { NATIVE } from cc/env; const { ccclass, property } _decorator; ccclass(GameRun) export class GameRun extends Component { // var result native.reflection.callStaticMethod(className, methodName, arg1, arg2, .....); /** * 在 native.reflection.callStaticMethod 方法中我们通过传入 Objective-C 的类名、方法名、参数就可以直接调用 * Objective-C 的静态方法并且可以获得 Objective-C 方法的返回值。 */ showSplashAd() { if (NATIVE sys.os sys.OS.ANDROID) { native.reflection.callStaticMethod(com/cocos/game/AppActivity, showSplashAd, ()V); } } showInterstitialAd() { if (NATIVE sys.os sys.OS.ANDROID) { native.reflection.callStaticMethod(com/cocos/game/AppActivity, showInterstitialAd, ()V); } } showNativeAd() { if (NATIVE sys.os sys.OS.ANDROID) { native.reflection.callStaticMethod(com/cocos/game/AppActivity, showNativeAd, ()V); } } hideNativeAd() { if (NATIVE sys.os sys.OS.ANDROID) { native.reflection.callStaticMethod(com/cocos/game/AppActivity, hideNativeAd, ()V); } } showBannerAd() { if (NATIVE sys.os sys.OS.ANDROID) { native.reflection.callStaticMethod(com/cocos/game/AppActivity, showBannerAd, ()V); } } showRewardVideoAd() { let message: string 广告奖励ID; if (NATIVE sys.os sys.OS.ANDROID) { native.reflection.callStaticMethod(com/cocos/game/AppActivity, showRewardVideoAd, (Ljava/lang/String;)V, message); } } }