news 2026/7/22 11:56:51

Cocos Creator 3.8 接入Taku

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cocos Creator 3.8 接入Taku

提前你的申请账号https://app.takuad.com/

SDK下载中心https://app.takuad.com/m/sdk/download

Taku SDK接入指南 1.开屏广告 开屏广告容器 <FrameLayout android:id="@+id/splash_ad_container" android:layout_width="match_parent" android:layout_height="match_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); 在合适的时候移除或者隐藏,比如onAdLoadTimeout,onNoAdError,onAdDismiss 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:id="@+id/native_ad_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="0dp" android:visibility="visible" tools:ignore="PxUsage"> <include android:id="@+id/native_selfrender_view" layout="@layout/layout_native_self" android:visibility="visible" /> </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); } } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 11:55:13

小程序毕设选题推荐:安卓端日常健身训练打卡服务应用 健身运动数据统计与健康管理系统设计【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/7/22 11:54:57

专科生AIGC检测挑战与10款高效降重工具推荐

1. 专科生如何应对AIGC检测的挑战 最近两年&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;技术突飞猛进&#xff0c;从最初的简单文本生成&#xff0c;到现在可以写出结构完整、逻辑清晰的学术论文。但随之而来的问题是&#xff0c;各大高校和学术机构纷纷加强了对…

作者头像 李华
网站建设 2026/7/22 11:54:36

2026年多Agent协作平台深度评测:让外部开发类Agent真正落地企业业务流

我作为常年泡在各类AI工具里的技术负责人&#xff0c;过去一年几乎把市面上主流的外部开发类Agent都摸了个遍&#xff0c;Cursor写代码的补全效率、Claude Code处理大段日志的精度、Codex拉取公开数据集的速度&#xff0c;都帮我把个人产出效率提了至少三倍。但用得越久越能感受…

作者头像 李华
网站建设 2026/7/22 11:54:07

第12篇:一键对接企业微信!把知识库装进企业微信,全员开箱即用 (Java+AI落地实战系列 | 开箱即用 | 零前端成本快速落地)

第12篇:一键对接企业微信!把知识库装进企业微信,全员开箱即用 (Java+AI落地实战系列 | 开箱即用 | 零前端成本快速落地) 本文是《Java+AI落地实战 从入门到生产级》系列第12篇 往期回顾: 第1篇:Java程序员学AI/转AI全指南,从CURD到AI应用工程师(零算法,4周落地) 第…

作者头像 李华
网站建设 2026/7/22 11:52:58

创业公司的技术品牌建设:技术博客、开源项目与社区运营的协同策略

创业公司的技术品牌建设&#xff1a;技术博客、开源项目与社区运营的协同策略 一、招聘 JD 写得好不如一篇技术博客的长期价值 创业公司最大的招聘困境不是薪酬&#xff0c;而是知名度。一流工程师手握多个 Offer 时&#xff0c;选择标准往往是团队的技术实力。但"技术实…

作者头像 李华
网站建设 2026/7/22 11:51:17

2026年实用AI论文网站全解析,从开题到定稿一站式辅助写作

写期刊论文、毕业论文或职称论文的时候&#xff0c;很多学术人都会碰到不少难题。自己动手写论文时&#xff0c;面对成千上万的参考资料&#xff0c;找相关内容就像在海里捞针一样难&#xff1b;各种严格的格式要求&#xff0c;让人忙得团团转&#xff1b;而且论文的内容还要不…

作者头像 李华