Android端穿山甲SDK集成
SDK接入
- 穿山甲平臺上建立測試狀態的應用ID和廣告位ID (ps:測試集成完畢後再把應用及對應的代碼位改爲正式狀態)
(ps:應用ID和代碼位ID是對應關係 一個應用能夠對應多個代碼位ID)
應用ID 對應demo中的APPID
廣告位ID 對應demo中的CodeId
- 將本SDK壓縮包內的open_ad_sdk.aar添加到build.gradle中:
repositories { flatDir { dirs 'libs' } } depedencies { compile(name: 'open_ad_sdk', ext: ‘aar') }
- 添加權限
<!--必要權限--> <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" />
- 適配Anroid7.0及以上
注:主要是涉及到廣告下載
<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,在該文件中添加以下代碼:android
<?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>
爲了適配下載和安裝相關功能,在工程中引用的包 com.android.support:support-v4:24.2.0
使用24.2.0以及以上版本
express
- 運行環境配置
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="24" />
-
NDK配置
注:可根據本身的需求進行導入
SDK中使用的so文件支持五種架構:x86,x86_64,armeabi,armeabi-v7a,arm64-v8a 若是您應用中支持的架構超出這 五種,請在build.gradle中使用abiFilters選擇支持的架構。以下所示: ndk { // 設置支持的 SO 庫構架,注意這裏要根據你的實際狀況來設置 abiFilters ‘armeabi-v7a’, ‘arm64-v8a’, ‘x86’, ‘x86_64’, ‘armeabi’ }
json -
初始化SDK
在Application#onCreate()方法中調用如下代碼來初始化穿山甲SDK。 SDK已支持多進程,若是明確某個進程不會使用到廣告SDK,能夠只針對特定進程初始化廣告SDK
注:TTAdManagerHolder保證處於單例狀態
緩存
private static TTAdConfig buildConfig(Context context) { return new TTAdConfig.Builder() .appId("5001121") .useTextureView(true) //使用TextureView控件播放視頻,默認爲SurfaceView,當有SurfaceView衝突的場景,可使用TextureView .appName("APP測試媒體") .titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK) .allowShowNotify(true) //是否容許sdk展現通知欄提示 .allowShowPageWhenScreenLock(true) //是否在鎖屏場景支持展現廣告落地頁 .debug(true) //測試階段打開,能夠經過日誌排查問題,上線時去除該調用 .directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //容許直接下載的網絡狀態集合 .supportMultiProcess(true)//是否支持多進程 .needClearTaskReset() //.httpStack(new MyOkStack3())//自定義網絡庫,demo中給出了okhttp3版本的樣例,其他請自行開發或者諮詢工做人員。 .build(); }
- appId是帳號下申請的應用ID(ps:以5開頭7位)
- useTextureView有SurfaceView衝突的場景,可使用TextureView(ps:若是出現黑屏
1.能夠檢查一下清單文件中最後一條權限部分
2.嘗試更換TextureView進行加載視頻
3.嘗試開啓硬件加速android:hardwareAccelerated=「true」) - appName(ps:可隨意填寫不爲空的字符串)
- titleBarTheme(ps:主題 若是不存在衝突可以使用默認主題)
- allowShowNotify(ps:涉及到下載通知欄部分)
- allowShowPageWhenScreenLock(ps:鎖屏廣告顯示部分)
- directDownloadNetworkType(ps:可根據具體的產品需求填寫 目前支持WiFi和4G及任何狀況下均可以彈出二次彈窗 若是須要任何狀況下都彈窗 ()裏直接寫空就能夠了)
- supportMultiProcess(ps:是否支持多進程)
1.若是項目是多進程 須要設置true 多進程中若是每一個進程中都須要展現廣告 必須每一個進程都進行SDK的初始化
2.若是項目是單進程必須更改成false
加載廣告
注:加載和展現廣告都須要放到主線程中bash
- 構建TTAdManager對象
TTAdManager對象爲整個SDK的入口接口,可用於廣告獲取、權限請求、版本號獲取
TTAdManager ttAdManager = TTAdManagerHolder.get();
- 申請部分權限 (建議每次廣告對象加載以後都須要申請一次 ps:開屏視頻不須要)
TTAdManagerHolder.get().requestPermissionIfNecessary(this);
- 建立TTAdNative對象(用於調用廣告請求接口)
TTAdNative mTTAdNative = ttAdManager.createAdNative(getApplicationContext());
構建AdSlot對象
注:AdSlot中的參數一旦在代碼中填寫 會以代碼中填寫的爲主服務器
AdSlot adSlot = new AdSlot.Builder() // 必選參數 設置您的CodeId .setCodeId(「900486272") // 必選參數 設置廣告圖片的最大尺寸及指望的圖片寬高比,單位Px // 注:必填字段,指望的圖片尺寸,返回尺寸可能有差別 .setImageAcceptedSize(640, 320) //模板廣告須要設置指望個性化模板廣告的大小,單位dp,代碼位是否屬於個性化模板廣告,請在穿山甲平臺查看 .setExpressViewAcceptedSize(expressViewWidth, expressViewHeight) // 可選參數 設置是否支持deeplink .setSupportDeepLink(true) // 可選參數,針對信息流廣告設置每次請求的廣告返回個數,最多支持3個 .setAdCount(1) //請求原生廣告時候須要設置,參數爲TYPE_BANNER或TYPE_INTERACTION_AD .setNativeAdType(AdSlot.TYPE_BANNER) //激勵視頻獎勵的名稱,針對激勵視頻參數 .setRewardName("金幣") //激勵視頻獎勵個數 .setRewardAmount(3) //用戶ID,使用激勵視頻必傳參數 //表來標識應用側惟一用戶;若非服務器回調模式或不需sdk透傳,可設置爲空字符串 .setUserID("user123") //設置指望視頻播放的方向,爲TTAdConstant.HORIZONTAL或TTAdConstant.VERTICAL .setOrientation(orientation) //激勵視頻獎勵透傳參數,字符串,若是用json對象,必須使用序列化爲String類型,可爲空 .setMediaExtra("media_extra") .build();
- setCodeId是帳號下申請的應用ID(ps:以9開頭9位)
- setImageAcceptedSize(單位px ps:開屏廣告尺寸動態獲取屏幕寬高)
- setExpressViewAcceptedSize(單位dp ps:模板類型的廣告能夠填寫 以代碼中填寫的爲主 激勵視頻和全屏視頻必須填寫這個部分)
廣告類型
注:模板和非模板代碼位的區分
可根據截圖部分在平臺上查看建立的代碼位是不是模板 使用不一樣的方法獲取廣告
注:如下部分都是SDK直接返回一個view 不支持獲取view的信息 開發者直接展現view
網絡
注:模板類型的代碼位在設置AdSlot廣告對象的時候必定要設置該方法setExpressViewAcceptedSize架構
注:在廣告加載展現完畢後 在Activity的onDestroy方法中把廣告對象置爲nullapp
- 個性化模板信息流 方法:loadNativeExpressAd
使用方法:
mTTAdNative.loadNativeExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() { @Override public void onError(int code, String message) { } @Override public void onNativeExpressAdLoad(List<TTNativeExpressAd> ads) { mTTAd.render(); } });
onNativeExpressAdLoad回調直接返回的是一個集合
在請求的時候建議最多請求3條 SDK最多返回3條
render直接放到廣告返回成功的回調中
ide
- 個性化模板banner 方法:loadBannerExpressAd
mTTAdNative.loadBannerExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() { @Override public void onError(int code, String message) { } @Override public void onNativeExpressAdLoad(List<TTNativeExpressAd> ads) { mTTAd.render(); } });
setSlideIntervalTime設置輪播的時間
render直接放到廣告返回成功的回調中
- 個性化模板插屏 方法:loadInteractionExpressAd
mTTAdNative.loadInteractionExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() { @Override public void onError(int code, String message) { } @Override public void onNativeExpressAdLoad(List<TTNativeExpressAd> ads) { mTTAd.render(); } });
render直接放到廣告返回成功的回調中
- 全屏廣告 方法:loadFullScreenVideoAd
//模板廣告須要設置指望個性化模板廣告的大小,單位dp,全屏視頻場景,只要設置的值大於0便可
必須設置:setExpressViewAcceptedSize(500,500)
mTTAdNative.loadFullScreenVideoAd(adSlot, new TTAdNative.FullScreenVideoAdListener() { @Override public void onError(int code, String message) { } @Override public void onFullScreenVideoAdLoad(TTFullScreenVideoAd ad) { } @Override public void onFullScreenVideoCached() { } });
//展現廣告,並傳入廣告展現的場景
mttFullVideoAd.showFullScreenVideoAd(FullScreenVideoActivity.this, TTAdConstant.RitScenes.GAME_GIFT_BONUS, null);
注:展現廣告放到主進程中
- 開屏廣告 方法:loadSplashAd
非模板開屏要設置 單位px
setImageAcceptedSize(1080, 1920)
模板開屏需設置 (非模板開屏必定不要設置該方法) 單位dp
setExpressViewAcceptedSize(expressViewWidth, expressViewHeight)
mTTAdNative.loadSplashAd(adSlot, new TTAdNative.SplashAdListener() { @Override @MainThread public void onError(int code, String message) { } @Override @MainThread public void onTimeout() { } @Override @MainThread public void onSplashAdLoad(TTSplashAd ad) {\ } }, AD_TIME_OUT);
- 激勵視頻 方法:loadRewardVideoAd
//模板廣告須要設置指望個性化模板廣告的大小,單位dp,全屏視頻場景,只要設置的值大於0便可
必須設置:setExpressViewAcceptedSize(500,500)
mTTAdNative.loadRewardVideoAd(adSlot, new TTAdNative.RewardVideoAdListener() { @Override public void onError(int code, String message) { } //視頻廣告加載後,視頻資源緩存到本地的回調,在此回調後,播放本地視頻,流暢不阻塞。 @Override public void onRewardVideoCached() { } @Override public void onRewardVideoAdLoad(TTRewardVideoAd ad) { } });
爲保證視頻的流程度建議show廣告放在onRewardVideoCached回調裏
mttRewardVideoAd.showRewardVideoAd(RewardVideoActivity.this, TTAdConstant.RitScenes.CUSTOMIZE_SCENES, 「scenes_test」);
注:展現廣告放到主進程中
- 個性化模板Draw信息流 方法:loadExpressDrawFeedAd
mTTAdNative.loadExpressDrawFeedAd(adSlot, new TTAdNative.NativeExpressAdListener() { @Override public void onError(int code, String message) { } @Override public void onNativeExpressAdLoad(List<TTNativeExpressAd> ads) { } });
後續有什麼問題 能夠下方留言方便討論!