Android端集成穿山甲SDK

SDK接入

穿山甲平臺(tái)上創(chuàng)建測試狀態(tài)的應(yīng)用ID和廣告位ID (ps:測試集成完畢后再把應(yīng)用及對(duì)應(yīng)的代碼位改成正式狀態(tài))(ps:應(yīng)用ID和代碼位ID是對(duì)應(yīng)關(guān)系 一個(gè)應(yīng)用可以對(duì)應(yīng)多個(gè)代碼位ID)應(yīng)用ID 對(duì)應(yīng)demo中的APPID廣告位ID 對(duì)應(yīng)demo中的CodeId?





1.導(dǎo)入 aar 及 SDK 依賴的 jar 包

將本 SDK 壓縮包內(nèi)的 open_ad_sdk.aar 復(fù)制到 Application Module/libs 文件夾(沒有的話須手動(dòng)創(chuàng)建), 并將以下代碼添加到您 app 的

android{

repositories {

? ? flatDir {

? ? ? ? dirs 'libs'

? ? }

}

depedencies {

? ? //穿山甲SDK

implementation(name:'open_ad_sdk',ext:'aar')

}



2.添加權(quán)限

穿山甲SDK建議您添加下述權(quán)限藕施,并建議在您的隱私協(xié)議中向開發(fā)者聲明穿山甲SDK會(huì)獲取下述權(quán)限并應(yīng)用于廣告投放谈为。

<!--必要權(quán)限-->

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!--可選權(quán)限-->

<uses-permission android:name="android.permission.READ_PHONE_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"/>

<!--可選越败,穿山甲提供“獲取地理位置權(quán)限”和“不給予地理位置權(quán)限,開發(fā)者傳入地理位置參數(shù)”兩種方式上報(bào)用戶位置,兩種方式均可不選,添加位置權(quán)限或參數(shù)將幫助投放定位廣告-->

<!--請(qǐng)注意:無論通過何種方式提供給穿山甲用戶地理位置倦逐,均需向用戶聲明地理位置權(quán)限將應(yīng)用于穿山甲廣告投放,穿山甲不強(qiáng)制獲取地理位置信息-->

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<!-- 如果有視頻相關(guān)的廣告且使用textureView播放宫补,請(qǐng)務(wù)必添加檬姥,否則黑屏 -->

<uses-permission android:name="android.permission.WAKE_LOCK" />

注意:穿山甲SDK不強(qiáng)制獲取以上權(quán)限,即使沒有獲取可選權(quán)限SDK也能正常運(yùn)行粉怕;獲取以上權(quán)限將幫助穿山甲優(yōu)化投放廣告精準(zhǔn)度和用戶的交互體驗(yàn)健民,提高eCPM。

適配 Android7.0 及以上

如果您的應(yīng)用需要在 Android7.0 及以上環(huán)境運(yùn)行贫贝,請(qǐng)?jiān)?AndroidManifest 中添加如下代碼:

(加入到清單application中就可以)

<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>


3.在 res/xml 目錄下秉犹,新建一個(gè) xml 文件 file_paths,在該文件中添加如下代碼:

<?xml version="1.0" encoding="utf-8"?>

<paths xmlns:android="http://schemas.android.com/apk/res/android">

? ? <!--為了適配所有路徑可以設(shè)置 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>


4.provider 配置(在清單中加入到第2步下邊就可以? )

注意:單進(jìn)程或多進(jìn)程都必須配置

<provider

? ? android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"

? ? android:authorities="${applicationId}.TTMultiProvider"

? ? android:exported="false" />

SDK中使用的so文件支持五種架構(gòu):x86,x86_64,armeabi,armeabi-v7a,arm64-v8a 如果您應(yīng)用中支持的架構(gòu)超出這 五種稚晚,請(qǐng)?jiān)赽uild.gradle中使用abiFilters選擇支持的架構(gòu)崇堵。

android {

????defaultConfig {

????????????ndk{????

????????????????// 設(shè)置支持的 SO 庫構(gòu)架,注意這里要根據(jù)你的實(shí)際情況來設(shè)置?

????????????????abiFilters'armeabi-v7a','arm64-v8a','x86','x86_64','armeabi'

????????????????????}

????????????}

????}

5.初始化SDK(這是一個(gè)類)

/**

* 可以用一個(gè)單例來保存TTAdManager實(shí)例客燕,在需要初始化sdk的時(shí)候調(diào)用

*/

public class TTAdManagerHolder {

? ? private static boolean sInit;

? ? public static TTAdManager get() {

? ? ? ? if (!sInit) {

? ? ? ? ? ? throw new RuntimeException("TTAdSdk is not init, please check.");

? ? ? ? }

? ? ? ? return TTAdSdk.getAdManager();

? ? }

? ? public static void init(Context context) {

? ? ? ? doInit(context);

? ? }

? ? //step1:接入網(wǎng)盟廣告sdk的初始化操作鸳劳,詳情見接入文檔和穿山甲平臺(tái)說明

? ? private static void doInit(Context context) {

? ? ? ? if (!sInit) {

? ? ? ? ? ? TTAdSdk.init(context, buildConfig(context));

? ? ? ? ? ? sInit = true;

? ? ? ? }

? ? }

// 1. 初始化SDK時(shí)需要包含APPID,播放器幸逆,appname棍辕,通知欄提示暮现,debug狀態(tài)还绘,網(wǎng)絡(luò)狀態(tài)等信息

// 2. 如果是多進(jìn)程的話楚昭,需要在每個(gè)請(qǐng)求廣告的子進(jìn)程都進(jìn)行初始化設(shè)置

? ? private static TTAdConfig buildConfig(Context context) {

? ? ? ? return new TTAdConfig.Builder()

? ? ? ? ? ? ? ? .appId("5001121")

? ? ? ? ? ? ? ? .useTextureView(true) //使用TextureView控件播放視頻,默認(rèn)為SurfaceView,當(dāng)有SurfaceView沖突的場景,可以使用TextureView

? ? ? ? ? ? ? ? .appName("應(yīng)用id")

? ? ? ? ? ? ? ? .titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)

? ? ? ? ? ? ? ? .allowShowNotify(true) //是否允許sdk展示通知欄提示

? ? ? ? ? ? ? ? .allowShowPageWhenScreenLock(true) //是否在鎖屏場景支持展示廣告落地頁

? ? ? ? ? ? ? ? .debug(true) //測試階段打開拍顷,可以通過日志排查問題抚太,上線時(shí)去除該調(diào)用

? ? ? ? ? ? ? ? .directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //允許直接下載的網(wǎng)絡(luò)狀態(tài)集合

? ? ? ? ? ? ? ? .supportMultiProcess(false)//是否支持多進(jìn)程

? ? ? ? ? ? ? ? //.httpStack(new MyOkStack3())//自定義網(wǎng)絡(luò)庫,demo中給出了okhttp3版本的樣例昔案,其余請(qǐng)自行開發(fā)或者咨詢工作人員尿贫。

? ? ? ? ? ? ? ? .build();

? ? }

}

在Application中調(diào)用

public class MyApp extends Application {

? ? @Override

? ? public void onCreate() {

? ? ? ? super.onCreate();

? ? ? ? // 穿山甲SDK初始化

? ? ? ? // 強(qiáng)烈建議在應(yīng)用對(duì)應(yīng)的Application#onCreate()方法中調(diào)用,避免出現(xiàn)content為null的異常

? ? ? ? TTAdManagerHolder.init(this);

? ? ? ? //如果明確某個(gè)進(jìn)程不會(huì)使用到廣告SDK踏揣,可以只針對(duì)特定進(jìn)程初始化廣告SDK的content

? ? ? ? //if (PROCESS_NAME_XXXX.equals(processName)) {

? ? ? ? //? TTAdManagerHolder.init(this)

? ? ? ? //}

? ? }

}

6.展示廣告(激勵(lì)視頻TTRewardVideoAd)

TTAdManager ttAdManager = TTAdManagerHolder.get();

TTAdNative mTTAdNative = ttAdManager.createAdNative(getApplicationContext());

AdSlot adSlot =new AdSlot.Builder()

.setCodeId("廣告位id")

.setSupportDeepLink(true)

.setAdCount(2)

//個(gè)性化模板廣告需要設(shè)置期望個(gè)性化模板廣告的大小,單位dp,激勵(lì)視頻場景庆亡,只要設(shè)置的值大于0即可。僅模板廣告需要設(shè)置此參數(shù)

? ? ? ? .setExpressViewAcceptedSize(500, 500)

.setImageAcceptedSize(1080, 1920)

.setRewardName("金幣")//獎(jiǎng)勵(lì)的名稱

? ? ? ? .setRewardAmount(3)//獎(jiǎng)勵(lì)的數(shù)量

? ? ? ? //必傳參數(shù)捞稿,表來標(biāo)識(shí)應(yīng)用側(cè)唯一用戶又谋;若非服務(wù)器回調(diào)模式或不需sdk透傳

? ? ? ? //可設(shè)置為空字符串

? ? ? ? .setUserID("user123")

.setMediaExtra("media_extra")//用戶透傳的信息,可不傳

? ? ? ? .build();

7.視頻回調(diào)

mTTAdNative.loadRewardVideoAd(adSlot, new TTAdNative.RewardVideoAdListener() {

@Override

? ? ? ? ? public void onError(int i, String s) {

//開屏廣告請(qǐng)求失敗

? ? ? ? ? }

@Override

? ? ? ? ? public void onRewardVideoAdLoad(TTRewardVideoAd ttRewardVideoAd) {

ttRewardVideoAd.setRewardAdInteractionListener(new TTRewardVideoAd.RewardAdInteractionListener() {

@Override

? ? ? ? ? ? ? ? ? public void onAdShow() {

showToast("播放完視屏即可簽到領(lǐng)獎(jiǎng)");

? ? ? ? ? ? ? ? ? }

@Override

? ? ? ? ? ? ? ? ? public void onAdVideoBarClick() {

showToast("開始下載");

? ? ? ? ? ? ? ? ? }

@Override

? ? ? ? ? ? ? ? ? public void onAdClose() {

showToast("關(guān)閉廣告");

? ? ? ? ? ? ? ? ? }

@Override

? ? ? ? ? ? ? ? ? public void onVideoComplete() {

showToast("視頻完成");

? ? ? ? ? ? ? ? ? }

@Override

? ? ? ? ? ? ? ? ? public void onVideoError() {

//? ? ? ? ? ? ? ? ? ? ? showToast("視頻錯(cuò)誤");

? ? ? ? ? ? ? ? ? }

@Override

? ? ? ? ? ? ? ? ? public void onRewardVerify(boolean b, int i, String s) {

//? ? ? ? ? ? ? ? ? ? ? showToast("視頻異常");

? ? ? ? ? ? ? ? ? }

@Override

? ? ? ? ? ? ? ? ? public void onSkippedVideo() {

showToast("跳過視頻");

? ? ? ? ? ? ? ? ? }

});

? ? ? ? ? ? ? ttRewardVideoAd.showRewardVideoAd(FoundSignActivity.this);

? ? ? ? ? }

@Override

? ? ? ? ? public void onRewardVideoCached() {

}

});



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末娱局,一起剝皮案震驚了整個(gè)濱河市彰亥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌衰齐,老刑警劉巖任斋,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異耻涛,居然都是意外死亡废酷,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門抹缕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锦积,“玉大人,你說我怎么就攤上這事歉嗓》峤椋” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵鉴分,是天一觀的道長哮幢。 經(jīng)常有香客問我,道長志珍,這世上最難降的妖魔是什么橙垢? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮伦糯,結(jié)果婚禮上柜某,老公的妹妹穿的比我還像新娘嗽元。我一直安慰自己,他們只是感情好喂击,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布剂癌。 她就那樣靜靜地躺著,像睡著了一般翰绊。 火紅的嫁衣襯著肌膚如雪佩谷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天监嗜,我揣著相機(jī)與錄音谐檀,去河邊找鬼。 笑死裁奇,一個(gè)胖子當(dāng)著我的面吹牛桐猬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刽肠,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼溃肪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了五垮?” 一聲冷哼從身側(cè)響起乍惊,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎放仗,沒想到半個(gè)月后润绎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诞挨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年莉撇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惶傻。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡棍郎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出银室,到底是詐尸還是另有隱情涂佃,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布蜈敢,位于F島的核電站辜荠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏抓狭。R本人自食惡果不足惜伯病,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望否过。 院中可真熱鬧午笛,春花似錦惭蟋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至与涡,卻和暖如春惹谐,著一層夾襖步出監(jiān)牢的瞬間持偏,已是汗流浹背驼卖。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸿秆,地道東北人酌畜。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像卿叽,于是被迫代替她去往敵國和親桥胞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359