字节穿山甲
官网
穿山甲申请于2017年 [3] ,2019年1月17日,“2019引擎大会”举行,正式公布字节跳动的商业品牌“巨量引擎”,穿山甲作为巨量引擎的秘密武器,系统分享了作为新一代媒体聚合视频化广告平台穿山甲的发展与愿景
广告样式
激励视频广告
通过应用内奖励吸引用户主动选择观看的全屏视频形式广告,用户获得应用内奖励的同时,开发者获得变现收益。 [9]
全屏视频广告
全屏播放的视频广告,5秒可跳过,高收益的同时兼顾用户感受。 [9]
原生信息流广告
契合应用原生环境的广告样式,提供8套通用模版,开发者可根据应用风格选择模版,并自定义调整细节设计。 [9]
沉浸式视频信息流广告
与抖音竖版视频流相似的视频信息流广告,提供沉浸式无干扰用户体验,转化率更高。 [9]
开屏广告
应用开屏黄金展示位,广告填充率、点击率更高。 [9]
插屏广告
在操作切换间弹出,充分渗透用户等待时间,拥有强信息表现力。 [9]
banner广告
可灵活选择版位的标准横幅广告,样式美观灵活,曝光率优异。 [
绑定SDK
申请应用的CodeId
请在穿山甲平台上创建好应用ID和广告位ID.
这一步必不可少,毕竟要接入到平台内。
导入aar及SDK依赖的jar包
从官网下载jar包,导入到工程内,创建文件夹libs.
并将以下代码添加到您app的build.gradle中:
repositories {
flatDir {
dirs 'libs'
}
}
depedencies {
compile(name: 'open_ad_sdk', ext: 'aar')
}
在AndroidManifest中添加权限:
AndroidManifest配置
<!--必要权限-->
<uses-permission android:name="android.permission.INTERNET" />
<!--可选权限-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<!--可选,穿山甲提供“获取地理位置权限”和“不给予地理位置权限,开发者传入地理位置参数”两种方式上报用户位置,两种方式均可不选,添加位置权限或参数将帮助投放定位广告-->
<!--请注意:无论通过何种方式提供给穿山甲用户地理位置,均需向用户声明地理位置权限将应用于穿山甲广告投放,穿山甲不强制获取地理位置信息-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 如果视频广告使用textureView播放,请务必添加,否则黑屏 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!--demo场景用到的权限,不是必须的-->
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
<!-- 穿山甲3400版本新增:建议添加“query_all_package”权限,穿山甲将通过此权限在Android R系统上判定广告对应的应用是否在用户的app上安装,避免投放错误的广告,以此提高用户的广告体验。若添加此权限,需要在您的用户隐私文档中声明! -->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
provider配置
注意:为不影响下载类型广告使用 无论APP处于任何阶段provider都需要在清单文件中正常配置
适配Anroid7.0及以上
如果您的应用需要在Anroid7.0及以上环境运行,请在AndroidManifest中添加如下代码:
<provider
android:name="com.bytedance.sdk.openadsdk.TTFileProvider"
android:authorities="${applicationId}.TTFileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
在res/xml目录下,新建一个xml文件file_paths,在该文件中添加如下代码:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<!--为了适配所有路径可以设置 path = "." -->
<external-path name="tt_external_root" path="." />
<external-path name="tt_external_download" path="Download" />
<external-files-path name="tt_external_files_download" path="Download" />
<files-path name="tt_internal_file_download" path="Download" />
<cache-path name="tt_internal_cache_download" path="Download" />
</paths>
注意:单进程或多进程都必须配置
<provider
android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider" android:authorities="${applicationId}.TTMultiProvider" android:exported="false" />
如果需要代码混淆,请看官网上说明。
初始化穿山甲
重点:
- 穿山甲SDK需要在主线程中初始化
- 多进程涉及WebView的使用,用户想要使用自己的数据路径,可以在SDK初始化之前调用WebView.setDataDirectorySuffix()
开发者需要在Application.onCreate()方法中调用以下代码来初始化穿山甲sdk。
重点: 目前SDK已支持多进程,如果明确某个进程不会使用到广告SDK,可以只针对特定进程初始化广告sdk
public class DemoApplication extends Application {
public static String PROCESS_NAME_XXXX = "process_name_xxxx";
@Override
public void onCreate() {
super.onCreate();
//强烈建议在应用对应的Application#onCreate()方法中调用,避免出现content为null的异常
TTAdSdk.init(context,
new TTAdConfig.Builder()
.appId("5001121")
.useTextureView(true) //默认使用SurfaceView播放视频广告,当有SurfaceView冲突的场景,可以使用TextureView
.appName("APP测试媒体")
.titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)//落地页主题
.allowShowNotify(true) //是否允许sdk展示通知栏提示
.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的content
//if (PROCESS_NAME_XXXX.equals(processName)) {
// TTAdSdk.init(context, config);
//}
}
}
到这里初始化部分就结束了。