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); } } }