下载SDK

首先去穿山甲官网注册账号以及创建应用点此进入官网

点击进入平台 (我的是创建完账号并且登录之后是这个样子)

进来之后是如下界面

然后依次点击流量--->应用会进入到以下界面

然后点击创建应用根据提示走即可

创建完毕之后去依次点击流量-->代码位创建广告位 根据自己的需求去创建即可

最后点击接入选择SDK下载与文档选择Android平台SDK

下载完成之后开始配置项目  按照文档把环境配好  然后开始写代码

配置完成之后创建一个SDK初始化脚本内容如下  初始化调用是在开屏界面调用 调用初始化成功之后会自动调用开屏代码

package com.unity3d.player.chuanshanjia;import android.content.Context;
import android.util.Log;import com.bytedance.sdk.openadsdk.TTAdConfig;
import com.bytedance.sdk.openadsdk.TTAdConstant;
import com.bytedance.sdk.openadsdk.TTAdManager;
import com.bytedance.sdk.openadsdk.TTAdSdk;/*** 可以用一个单例来保存TTAdManager实例,在需要初始化sdk的时候调用*/
public class TTAdManagerHolder {private static final String TAG = "TTAdManagerHolder";private static boolean sInit;private static String appid;private static String appName;private static  TTAdManagerHolder _Instance;public static TTAdManager get() {return TTAdSdk.getAdManager();}public static TTAdManagerHolder Inst(){if (_Instance == null){_Instance = new TTAdManagerHolder();}return _Instance;}public void init(final Context context,String aid,String aname) {appid = aid;appName = aname;Log.d(TAG, "TTAdManagerHolderinit aid:"+aid+" aname:"+aname);doInit(context);}//step1:接入网盟广告sdk的初始化操作,详情见接入文档和穿山甲平台说明private void doInit(Context context) {if (!sInit) {TTAdSdk.init(context, buildConfig(context), new TTAdSdk.InitCallback() {@Overridepublic void success() {Log.i(TAG, "success: " );CsjSplashActivity.Inst().loadSplashAd();}@Overridepublic void fail(int code, String msg) {Log.i(TAG, "fail:  code = " + code + " msg = " + msg);}});sInit = true;}}private TTAdConfig buildConfig(Context context) {//强烈建议在应用对应的Application#onCreate()方法中调用,避免出现content为null的异常return new TTAdConfig.Builder().appId(appid).useTextureView(true) //默认使用SurfaceView播放视频广告,当有SurfaceView冲突的场景,可以使用TextureView.appName(appName).titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)//落地页主题.allowShowNotify(true) //是否允许sdk展示通知栏提示,若设置为false则会导致通知栏不显示下载进度.debug(true) //测试阶段打开,可以通过日志排查问题,上线时去除该调用.directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI) //允许直接下载的网络状态集合,没有设置的网络下点击下载apk会有二次确认弹窗,弹窗中会披露应用信息.supportMultiProcess(false) //是否支持多进程,true支持.asyncInit(true) //是否异步初始化sdk,设置为true可以减少SDK初始化耗时。3450版本开始废弃~~//.httpStack(new MyOkStack3())//自定义网络库,demo中给出了okhttp3版本的样例,其余请自行开发或者咨询工作人员。.build();}
}

SDK集成完成之后开始接入SDK

工具类

ChuanShanJiaUtil

package com.unity3d.player.tools;import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.DisplayCutout;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.WindowInsets;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;public class ChuanShanJiaUtil {public static float getScreenWidthDp(Context context){final float scale = context.getResources().getDisplayMetrics().density;float width = context.getResources().getDisplayMetrics().widthPixels;return width / (scale <= 0 ? 1 : scale) + 0.5f;}//全面屏、刘海屏适配public static float getHeight(Activity activity) {hideBottomUIMenu(activity);float height;int realHeight = getRealHeight(activity);if (ChuanShanJiaUtil.hasNotchScreen(activity)) {height = px2dip(activity, realHeight - getStatusBarHeight(activity));}else {height = px2dip(activity, realHeight);}return height;}public static void hideBottomUIMenu(Activity activity) {if (activity == null) {return;}try {//隐藏虚拟按键,并且全屏if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower apiView v = activity.getWindow().getDecorView();v.setSystemUiVisibility(View.GONE);} else if (Build.VERSION.SDK_INT >= 19) {//for new api versions.View decorView = activity.getWindow().getDecorView();int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar//                    | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar| View.SYSTEM_UI_FLAG_IMMERSIVE;decorView.setSystemUiVisibility(uiOptions);activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);}} catch (Exception e) {e.printStackTrace();}}//获取屏幕真实高度,不包含下方虚拟导航栏public static int getRealHeight(Context context) {WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);Display display = windowManager.getDefaultDisplay();DisplayMetrics dm = new DisplayMetrics();if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {display.getRealMetrics(dm);} else {display.getMetrics(dm);}int realHeight = dm.heightPixels;return realHeight;}//获取状态栏高度public static float getStatusBarHeight(Context context) {float height = 0;int resourceId = context.getApplicationContext().getResources().getIdentifier("status_bar_height", "dimen", "android");if (resourceId > 0) {height = context.getApplicationContext().getResources().getDimensionPixelSize(resourceId);}return height;}public static int px2dip(Context context, float pxValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (pxValue / (scale <= 0 ? 1 : scale) + 0.5f);}public static int dp2px(Context context, float dp) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dp * scale + 0.5f);}/*** 判断是否是刘海屏* @return*/public static boolean hasNotchScreen(Activity activity){return isAndroidPHasNotch(activity)|| getInt("ro.miui.notch", activity) == 1|| hasNotchAtHuawei(activity)|| hasNotchAtOPPO(activity)|| hasNotchAtVivo(activity);}/*** Android P 刘海屏判断* @param activity* @return*/public static boolean isAndroidPHasNotch(Activity activity){boolean result = false;if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {DisplayCutout displayCutout = null;try {WindowInsets windowInsets = activity.getWindow().getDecorView().getRootWindowInsets();if (windowInsets != null) {displayCutout = windowInsets.getDisplayCutout();}if (displayCutout != null) {result = true;}} catch (Exception e) {e.printStackTrace();}}return result;}/*** 小米刘海屏判断.* @return 0 if it is not notch ; return 1 means notch* @throws IllegalArgumentException if the key exceeds 32 characters*/public static int getInt(String key,Activity activity) {int result = 0;if (isMiui()){try {ClassLoader classLoader = activity.getClassLoader();@SuppressWarnings("rawtypes")Class SystemProperties = classLoader.loadClass("android.os.SystemProperties");//参数类型@SuppressWarnings("rawtypes")Class[] paramTypes = new Class[2];paramTypes[0] = String.class;paramTypes[1] = int.class;Method getInt = SystemProperties.getMethod("getInt", paramTypes);//参数Object[] params = new Object[2];params[0] = new String(key);params[1] = new Integer(0);result = (Integer) getInt.invoke(SystemProperties, params);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}return result;}/*** 华为刘海屏判断* @return*/public static boolean hasNotchAtHuawei(Context context) {boolean ret = false;try {ClassLoader classLoader = context.getClassLoader();Class HwNotchSizeUtil = classLoader.loadClass("com.huawei.android.util.HwNotchSizeUtil");Method get = HwNotchSizeUtil.getMethod("hasNotchInScreen");ret = (boolean) get.invoke(HwNotchSizeUtil);} catch (ClassNotFoundException e) {} catch (NoSuchMethodException e) {} catch (Exception e) {} finally {return ret;}}public static final int VIVO_NOTCH = 0x00000020;//是否有刘海public static final int VIVO_FILLET = 0x00000008;//是否有圆角/*** VIVO刘海屏判断* @return*/public static boolean hasNotchAtVivo(Context context) {boolean ret = false;try {ClassLoader classLoader = context.getClassLoader();Class FtFeature = classLoader.loadClass("android.util.FtFeature");Method method = FtFeature.getMethod("isFeatureSupport", int.class);ret = (boolean) method.invoke(FtFeature, VIVO_NOTCH);} catch (ClassNotFoundException e) {} catch (NoSuchMethodException e) {} catch (Exception e) {} finally {return ret;}}/*** O-P-P-O刘海屏判断* @return*/public static boolean hasNotchAtOPPO(Context context) {String temp = "com.kllk.feature.screen.heteromorphism";String name = getKllkDecryptString(temp);return context.getPackageManager().hasSystemFeature(name);}public static boolean isMiui() {boolean sIsMiui = false;try {Class<?> clz = Class.forName("miui.os.Build");if (clz != null) {sIsMiui = true;//noinspection ConstantConditionsreturn sIsMiui;}} catch (Exception e) {// ignore}return sIsMiui;}/***用于o-p-p-o 版本隐私协议*/public static String getKllkDecryptString(String encryptionString) {if (TextUtils.isEmpty(encryptionString)) {return "";}String decryptTag = "";String decryptCapitalized = "O" + "P" + "P" + "O";String decrypt = "o" + "p" + "p" + "o";if (encryptionString.contains("KLLK")) {decryptTag =  encryptionString.replace("KLLK", decryptCapitalized);} else if (encryptionString.contains("kllk")) {decryptTag = encryptionString.replace("kllk", decrypt);}return decryptTag;}public static void setViewSize(View view, int width, int height) {if (view.getParent() instanceof FrameLayout) {FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) view.getLayoutParams();lp.width = width;lp.height = height;view.setLayoutParams(lp);view.requestLayout();} else if (view.getParent() instanceof RelativeLayout) {RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) view.getLayoutParams();lp.width = width;lp.height = height;view.setLayoutParams(lp);view.requestLayout();} else if (view.getParent() instanceof LinearLayout) {LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) view.getLayoutParams();lp.width = width;lp.height = height;view.setLayoutParams(lp);view.requestLayout();}}public static int getScreenWidthInPx(Context context) {DisplayMetrics dm = context.getApplicationContext().getResources().getDisplayMetrics();return dm.widthPixels;}public static int getScreenHeightInPx(Context context) {DisplayMetrics dm = context.getApplicationContext().getResources().getDisplayMetrics();return dm.heightPixels;}public static int getScreenHeight(Context context) {return (int) (getScreenHeightInPx(context) + getStatusBarHeight(context));}public static void removeFromParent(View view) {if (view != null) {ViewParent vp = view.getParent();if (vp instanceof ViewGroup) {((ViewGroup) vp).removeView(view);}}}/*** 获取全面屏宽高* @param context* @return*/public static int[] getScreenSize(Context context) {int[] size = new int[]{0,0};if (context == null){return size;}WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);Display display = windowManager.getDefaultDisplay();DisplayMetrics dm = new DisplayMetrics();if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {display.getRealMetrics(dm);} else {display.getMetrics(dm);}size[0] = dm.widthPixels;size[1] = dm.heightPixels;return size;}
}

ShowSeqUtils

package com.unity3d.player.tools;import android.os.Environment;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.text.SimpleDateFormat;
import java.util.Date;public class ShowSeqUtils {private FileReader fr;private BufferedReader br;private FileWriter fw;private BufferedWriter bw;public int loadShowSeq(){int show_seq = 1;//获取当前日期字符串SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String data = sdf.format(new Date());//读取本地缓存show_seq的文件try {String rootPath =  Environment.getExternalStorageDirectory().getPath();File file = new File(rootPath + "/Android/data/com.snssdk.api/cache/adloadSeqTemp.txt");if (!file.exists()) {file.createNewFile();return show_seq;}fr = new FileReader(file);br = new BufferedReader(fr);String line = "";while ((line = br.readLine()) != null) {String[] temp = line.split(",");if (temp[0].equals(data)){//日期相同返回字段show_seq = Integer.parseInt(temp[1]);}}return show_seq;} catch (Exception e) {e.printStackTrace();} finally {try {if(fr!=null){fr.close();}if(br!=null){br.close();}} catch (Exception e) {e.printStackTrace();}}return show_seq;}public void writeToFile(int show_seq){//获取当前日期字符串SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String data = sdf.format(new Date());String content = data+","+show_seq;//读取本地缓存show_seq的文件try {String rootPath =  Environment.getExternalStorageDirectory().getPath();File file = new File(rootPath + "/Android/data/com.snssdk.api/cache/");if (!file.exists()) {file.mkdir();}String filename = file.getAbsolutePath()+"/adloadSeqTemp.txt";file = new File(filename);if(!file.exists()){file.createNewFile();}fw = new FileWriter(file, false);fw.write(content);} catch (Exception e) {e.printStackTrace();} finally {try {if(fw!=null){fw.flush();fw.close();}} catch (Exception e) {e.printStackTrace();}}}
}

TToast

package com.unity3d.player.tools;import android.annotation.SuppressLint;
import android.content.Context;
import android.util.Log;
import android.widget.Toast;public final class TToast {private static Toast sToast;public static void show(Context context, String msg) {show(context, msg, Toast.LENGTH_SHORT);}public static void show(Context context, String msg, int duration) {Toast toast = getToast(context);if (toast != null) {toast.setDuration(duration);toast.setText(String.valueOf(msg));toast.show();} else {Log.i("TToast", "toast msg: " + String.valueOf(msg));}}@SuppressLint("ShowToast")private static Toast getToast(Context context) {if (context == null) {return sToast;}
//        if (sToast == null) {
//            synchronized (TToast.class) {
//                if (sToast == null) {sToast = Toast.makeText(context.getApplicationContext(), "", Toast.LENGTH_SHORT);
//                }
//            }
//        }return sToast;}public static void reset() {sToast = null;}
}

下一篇 接入开屏广告 传送门

Android 接入穿山甲广告相关推荐

  1. Unity接入穿山甲广告(使用Unity3D插件)

      最近要接入穿山甲广告,我把穿山甲广告相关的接入流程记录一下,说说最近踩过的坑,和怎么解决的问题.注意我们需求是只发安卓包没有iOS的需求,本篇只介绍Unity接入安卓相关的处理(帖子是2019年底 ...

  2. Unity接入穿山甲广告SDK(以及GroMoreDemo)

    Unity接入穿山甲广告SDK(以及GroMoreDemo) 下载安装 穿山甲官网SDK下载链接(https://www.csjplatform.com/union/media/union/downl ...

  3. 无需上架,接入穿山甲广告和广点通广告 sdk

    我们都知道广告是商业流量变现最重要的方式之一,所以基本所有的游戏或者app都会接入广告sdk,而我们都知道穿山甲广告sdk和广点通广告sdk是国内收益相对比较高的,但是想接入穿山甲广告sdk,你的游戏 ...

  4. CocosCreator接入穿山甲广告(IOS)

    说明 接入穿山甲广告SDK 将Cocos Creator工程打包,在手机上运行,看能否正常运行游戏,保证游戏没有问题的前提下再引入SDK所需要的各种包 根据文档引入各种包,文档地址:https://p ...

  5. Android 接入穿山甲激励视频广告步骤与错误总结

    1.先去穿山甲官网,注册登录账号 2.侧边栏->广告变现->流量->应用->新建应用 3.侧边栏->广告变现->流量->代码位->新建代码位 4. 侧边 ...

  6. Android接入穿山甲SDK并实现开屏广告

    一.穿山甲SDK的接入 0.进入官方下载地址,下载穿山甲AndroidSDK,下载的压缩包里包含.aar的sdk文件和工程demo. 1.将 SDK 压缩包内的 open_ad_sdk.aar 复制到 ...

  7. Android 如何接入穿山甲广告?

    目录 下载SDK 集成SDK AndroidManifest配置 provider配置 运行环境配置 白名单配置 工具类 下载SDK 首先去穿山甲官网注册账号以及创建应用 点击进入平台 (我的是创建完 ...

  8. CocosCreator接入穿山甲广告1-激励视频

    首先进入文档后要先去下载它文档里的sdk,这个压缩包里面含有demo,没有头绪的朋友可以进入他的工程看下,也可在模拟器上运行一下它的demo看下效果.下载完后可以进入他工程下的libs的文件夹里把两个 ...

  9. CocosCreator接入穿山甲广告总结

    最近项目开始接入国内广告变现,接的是穿山甲sdk广告,接入的过程真的是各种坎坷,我会分为激励视频,插屏广告,底部banner三部分,在后续的文章中会一点点详细的把这三部分都总结出来,给有恰好需要的朋友 ...

  10. Android接入谷歌广告 - 发现各种坑

    先前接入谷歌广告Admob,功能完成后AS能运行,打包哩不行一直报 com.android.build.api.transform.TransformException: java.util.zip. ...

最新文章

  1. 浅析Python中bytes和str区别
  2. win2008server设置问题
  3. R语言学习笔记(十一):广义线性模型
  4. apache服务器配置tls_Apache服务器配置https
  5. 他是世界首位惯性导航博士!如今101岁,依然对航天事业激情澎湃
  6. Linux利用PROMPT_COMMAND实现审计功能
  7. linux 系统盘无法ls,linux – ls:阅读目录.:输入/输出错误
  8. Java爬坑 -- 解决redis序列化java8 LocalDateTime错误的问题
  9. Linux下安装配置git
  10. 【零基础】PostgreSQL从入门到精通
  11. Stochastic Pooling简单理解
  12. 一个开源的会议管理系统,适合初学者练手(老司机请忽略)
  13. 中图分类号,文献标识码,文章编号
  14. android照片批量上传照片,一键批量上传手机照片到QQ相册功能 节省手机流量
  15. 七夕前夜,地球和月亮搭起“鹊桥”
  16. React 360 全景VR交互项目实战
  17. 在这领工资,一辈子别想取媳妇了!
  18. Excel如何统计大于某值小于某值的数量
  19. Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You hav
  20. 三星4k3d电视测试软件,说出来你可能不信:3D、4K、曲面电视慎重购买

热门文章

  1. 第24篇 研究WebRTC官网之生成工程文件
  2. 基于SpringBoot的在线学生请假管理系统的设计与实现毕业设计源码
  3. 利用云计算来实现业务转型呢,有五个步骤可以遵循
  4. 概率论的学习和整理--番外4:学习期望之前,先学习平均数(包括算术平均数,几何平均数,调和平均数等),众数,中位数等概念差别。
  5. MPU6050 加速计滤波
  6. 调整csgo画面显示FPS值
  7. html需要背的标签,html的header标签需要怎么使用
  8. CPU的后缀到底是什么意思?
  9. 如何用python打开qq_如何用python登录qq
  10. java 图形检测_使用OpenCV[Java]检测简单几何图形