|
|
@@ -0,0 +1,297 @@
|
|
|
+package org.cocos2dx.javascript.thirdSdk.groMore.ad;
|
|
|
+
|
|
|
+import android.annotation.SuppressLint;
|
|
|
+import android.app.Activity;
|
|
|
+import android.content.Intent;
|
|
|
+import android.os.Bundle;
|
|
|
+import android.support.annotation.Nullable;
|
|
|
+import android.util.Log;
|
|
|
+import android.view.View;
|
|
|
+import android.widget.Button;
|
|
|
+
|
|
|
+import com.bytedance.ad.sdk.mediation.util.TToast;
|
|
|
+import com.bytedance.msdk.adapter.util.Logger;
|
|
|
+import com.bytedance.msdk.api.AdError;
|
|
|
+import com.bytedance.msdk.api.AdSlot;
|
|
|
+import com.bytedance.msdk.api.TTAdConstant;
|
|
|
+import com.bytedance.msdk.api.TTMediationAdSdk;
|
|
|
+import com.bytedance.msdk.api.TTSettingConfigCallback;
|
|
|
+import com.bytedance.msdk.api.TTVideoOption;
|
|
|
+import com.bytedance.msdk.api.reward.RewardItem;
|
|
|
+import com.bytedance.msdk.api.reward.TTRewardAd;
|
|
|
+import com.bytedance.msdk.api.reward.TTRewardedAdListener;
|
|
|
+import com.bytedance.msdk.api.reward.TTRewardedAdLoadCallback;
|
|
|
+import com.header.app.untext.R;
|
|
|
+
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Created by wuzejian on 2020/3/11.
|
|
|
+ */
|
|
|
+public class RewardVideoActivity extends Activity {
|
|
|
+ private static final String TAG = AppConst.TAG_PRE + "RewardVideoActivity";
|
|
|
+ private Button mLoadAd;
|
|
|
+ private Button mLoadAdVertical;
|
|
|
+ private Button mShowAd;
|
|
|
+ private TTRewardAd mttRewardAd;
|
|
|
+ private String mHorizontalCodeId;
|
|
|
+ private String mVerticalCodeId;
|
|
|
+ private boolean loadSuccess;
|
|
|
+ private boolean isVertical; //是否加载竖屏
|
|
|
+
|
|
|
+ @SuppressLint("CutPasteId")
|
|
|
+ @SuppressWarnings("RedundantCast")
|
|
|
+ @Override
|
|
|
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
|
|
|
+ super.onCreate(savedInstanceState);
|
|
|
+ setContentView(R.layout.activity_reward_video);
|
|
|
+ mLoadAd = (Button) findViewById(R.id.btn_reward_load);
|
|
|
+ mLoadAdVertical = (Button) findViewById(R.id.btn_reward_load_vertical);
|
|
|
+ mShowAd = (Button) findViewById(R.id.btn_reward_show);
|
|
|
+ TTMediationAdSdk.requestPermissionIfNecessary(this);
|
|
|
+ initAdUnitId();
|
|
|
+ initClickEvent();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void initAdUnitId() {
|
|
|
+ Intent intent = getIntent();
|
|
|
+ if (intent == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ mHorizontalCodeId = intent.getStringExtra("horizontal_adUnitId");
|
|
|
+ mVerticalCodeId = intent.getStringExtra("vertical_adUnitId");
|
|
|
+ }
|
|
|
+
|
|
|
+ private void initClickEvent() {
|
|
|
+ mLoadAd.setOnClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+ isVertical = false;
|
|
|
+ laodAdWithCallback(mHorizontalCodeId, TTAdConstant.HORIZONTAL);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ mLoadAdVertical.setOnClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+ isVertical = true;
|
|
|
+ laodAdWithCallback(mVerticalCodeId, TTAdConstant.VERTICAL);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ mShowAd.setOnClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+ if (loadSuccess && mttRewardAd != null && mttRewardAd.isReady()) {
|
|
|
+ //在获取到广告后展示,强烈建议在onRewardVideoCached回调后,展示广告,提升播放体验
|
|
|
+ //该方法直接展示广告,如果展示失败了(如过期),会回调onVideoError()
|
|
|
+ //展示广告,并传入广告展示的场景
|
|
|
+
|
|
|
+ mttRewardAd.showRewardAd(RewardVideoActivity.this, mTTRewardedAdListener);
|
|
|
+ Logger.e(AppConst.TAG, "adNetworkPlatformId: " + mttRewardAd.getAdNetworkPlatformId() + " adNetworkRitId:" + mttRewardAd.getAdNetworkRitId() + " preEcpm: " + mttRewardAd.getPreEcpm());
|
|
|
+ } else {
|
|
|
+ Log.d(TAG, "loadSuccess=" + loadSuccess + ",mttRewardAd=" + mttRewardAd + ", mttRewardAd.isReady():" + (mttRewardAd != null && mttRewardAd.isReady()));
|
|
|
+ TToast.show(RewardVideoActivity.this, "请先加载广告");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void onDestroy() {
|
|
|
+ super.onDestroy();
|
|
|
+ TTMediationAdSdk.unregisterConfigCallback(mSettingConfigCallback);
|
|
|
+ if (mttRewardAd != null) {
|
|
|
+ mttRewardAd.destroy();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * config回调
|
|
|
+ */
|
|
|
+ private TTSettingConfigCallback mSettingConfigCallback = new TTSettingConfigCallback() {
|
|
|
+ @Override
|
|
|
+ public void configLoad() {
|
|
|
+ Log.e(TAG, "load ad 在config 回调中加载广告");
|
|
|
+ if (isVertical) {
|
|
|
+ loadAd(mVerticalCodeId, TTAdConstant.VERTICAL);
|
|
|
+ } else {
|
|
|
+ loadAd(mHorizontalCodeId, TTAdConstant.HORIZONTAL);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ private void laodAdWithCallback(final String adUnitId, final int orientation) {
|
|
|
+ /**
|
|
|
+ * 判断当前是否存在config 配置 ,如果存在直接加载广告 ,如果不存在则注册config加载回调
|
|
|
+ */
|
|
|
+ if (TTMediationAdSdk.configLoadSuccess()) {
|
|
|
+ Log.e(AppConst.TAG, "load ad 当前config配置存在,直接加载广告");
|
|
|
+ loadAd(adUnitId, orientation);
|
|
|
+ } else {
|
|
|
+ Log.e(AppConst.TAG, "load ad 当前config配置不存在,正在请求config配置....");
|
|
|
+ TTMediationAdSdk.registerConfigCallback(mSettingConfigCallback); //不用使用内部类,否则在ondestory中无法移除该回调
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void loadAd(final String adUnitId, int orientation) {
|
|
|
+ /**
|
|
|
+ * 注:每次加载激励视频广告的时候需要新建一个TTRewardAd,否则可能会出现广告填充问题
|
|
|
+ * ( 例如:mttRewardAd = new TTRewardAd(this, adUnitId);)
|
|
|
+ */
|
|
|
+ mttRewardAd = new TTRewardAd(this, adUnitId);
|
|
|
+
|
|
|
+ TTVideoOption videoOption = new TTVideoOption.Builder()
|
|
|
+ .setMuted(true)//对所有SDK的激励广告生效,除需要在平台配置的SDK,如穿山甲SDK
|
|
|
+ .setAdmobAppVolume(0f)//配合Admob的声音大小设置[0-1]
|
|
|
+ .build();
|
|
|
+
|
|
|
+ Map<String, String> customData = new HashMap<>();
|
|
|
+ customData.put(AdSlot.CUSTOM_DATA_KEY_PANGLE, "pangle media_extra");
|
|
|
+ customData.put(AdSlot.CUSTOM_DATA_KEY_GDT, "gdt custom data");
|
|
|
+ customData.put(AdSlot.CUSTOM_DATA_KEY_KS, "ks custom data");
|
|
|
+ // 其他需要透传给adn的数据。
|
|
|
+
|
|
|
+ //创建广告请求参数AdSlot,具体参数含义参考文档
|
|
|
+ AdSlot.Builder adSlotBuilder = new AdSlot.Builder()
|
|
|
+ .setTTVideoOption(videoOption)
|
|
|
+ .setRewardName("金币") //奖励的名称
|
|
|
+ .setRewardAmount(3) //奖励的数量
|
|
|
+ .setUserID("user123")//用户id,必传参数
|
|
|
+ .setAdStyleType(AdSlot.TYPE_EXPRESS_AD) // 确保该聚合广告位下所有gdt代码位都是同一种类型(模版或非模版)。
|
|
|
+ .setCustomData(customData) // 激励视频开启服务端验证时,透传给adn的自定义数据。
|
|
|
+ .setOrientation(orientation);//必填参数,期望视频的播放方向:TTAdConstant.HORIZONTAL 或 TTAdConstant.VERTICAL
|
|
|
+
|
|
|
+ //请求广告
|
|
|
+ mttRewardAd.loadRewardAd(adSlotBuilder.build(), new TTRewardedAdLoadCallback() {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onRewardVideoLoadFail(AdError adError) {
|
|
|
+ loadSuccess = false;
|
|
|
+ Log.e(TAG, "load RewardVideo ad error : " + adError.code + ", " + adError.message);
|
|
|
+ // 获取本次waterfall加载中,加载失败的adn错误信息。
|
|
|
+ if (mttRewardAd != null)
|
|
|
+ Log.d(TAG, "reward ad loadinfos: " + mttRewardAd.getAdLoadInfoList());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onRewardVideoAdLoad() {
|
|
|
+ loadSuccess = true;
|
|
|
+ Log.e(TAG, "load RewardVideo ad success !" + mttRewardAd.isReady());
|
|
|
+ // 获取本次waterfall加载中,加载失败的adn错误信息。
|
|
|
+ if (mttRewardAd != null)
|
|
|
+ Log.d(TAG, "reward ad loadinfos: " + mttRewardAd.getAdLoadInfoList());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onRewardVideoCached() {
|
|
|
+ Log.d(TAG, "onRewardVideoCached....缓存成功" + mttRewardAd.isReady());
|
|
|
+ loadSuccess = true;
|
|
|
+ TToast.show(RewardVideoActivity.this, "激励视频素材缓存成功!");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 激励视频交互回调
|
|
|
+ */
|
|
|
+ private TTRewardedAdListener mTTRewardedAdListener = new TTRewardedAdListener() {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 广告的展示回调 每个广告仅回调一次
|
|
|
+ */
|
|
|
+ public void onRewardedAdShow() {
|
|
|
+ TToast.show(RewardVideoActivity.this, "激励onRewardedAdShow!");
|
|
|
+ Log.d(TAG, "onRewardedAdShow");
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * show失败回调。如果show时发现无可用广告(比如广告过期或者isReady=false),会触发该回调。
|
|
|
+ * 开发者应该结合自己的广告加载、展示流程,在该回调里进行重新加载。
|
|
|
+ * @param adError showFail的具体原因
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void onRewardedAdShowFail(AdError adError) {
|
|
|
+ int errCode = 0;
|
|
|
+ String errMsg = "";
|
|
|
+ if (adError != null) {
|
|
|
+ errCode = adError.thirdSdkErrorCode;
|
|
|
+ errMsg = adError.thirdSdkErrorMessage;
|
|
|
+ }
|
|
|
+ TToast.show(RewardVideoActivity.this, "激励onRewardedAdShowFail! errCode: " + errCode + ", errMsg: " + errMsg);
|
|
|
+ Log.d(TAG, "onRewardedAdShowFail, errCode: " + errCode + ", errMsg: " + errMsg);
|
|
|
+
|
|
|
+ // 开发者应该结合自己的广告加载、展示流程,在该回调里进行重新加载
|
|
|
+ if (isVertical) {
|
|
|
+ loadAd(mVerticalCodeId, TTAdConstant.VERTICAL);
|
|
|
+ } else {
|
|
|
+ loadAd(mHorizontalCodeId, TTAdConstant.HORIZONTAL);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 注意Admob的激励视频不会回调该方法
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void onRewardClick() {
|
|
|
+ Log.d(TAG, "onRewardClick");
|
|
|
+ TToast.show(RewardVideoActivity.this, "激励onRewardClick!");
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 广告关闭的回调
|
|
|
+ */
|
|
|
+ public void onRewardedAdClosed() {
|
|
|
+ Log.d(TAG, "onRewardedAdClosed");
|
|
|
+ TToast.show(RewardVideoActivity.this, "激励onRewardedAdClosed!");
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 视频播放完毕的回调 Admob广告不存在该回调
|
|
|
+ */
|
|
|
+ public void onVideoComplete() {
|
|
|
+ Log.d(TAG, "onVideoComplete");
|
|
|
+ TToast.show(RewardVideoActivity.this, "激励onVideoComplete!");
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 1、视频播放失败的回调
|
|
|
+ */
|
|
|
+ public void onVideoError() {
|
|
|
+ Log.d(TAG, "onVideoError");
|
|
|
+ TToast.show(RewardVideoActivity.this, "激励onVideoError!");
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 激励视频播放完毕,验证是否有效发放奖励的回调
|
|
|
+ */
|
|
|
+ public void onRewardVerify(RewardItem rewardItem) {
|
|
|
+ Map<String, Object> customData = rewardItem.getCustomData();
|
|
|
+ if (customData != null) {
|
|
|
+ String adnName = (String) customData.get(RewardItem.KEY_ADN_NAME);
|
|
|
+ switch (adnName) {
|
|
|
+ case RewardItem.KEY_GDT:
|
|
|
+ Logger.d(TAG, "rewardItem gdt: " + customData.get(RewardItem.KEY_GDT_TRANS_ID));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Log.d(TAG, "onRewardVerify");
|
|
|
+ TToast.show(RewardVideoActivity.this, "onRewardVerify!");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * - Mintegral GDT Admob广告不存在该回调
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void onSkippedVideo() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ };
|
|
|
+}
|