Android端穿山甲SDK集成

Android端穿山甲SDK集成

SDK接入

  • 穿山甲平臺上建立測試狀態的應用ID和廣告位ID (ps:測試集成完畢後再把應用及對應的代碼位改爲正式狀態)
    (ps:應用ID和代碼位ID是對應關係 一個應用能夠對應多個代碼位ID)
    應用ID 對應demo中的APPID
    廣告位ID 對應demo中的CodeId
    應用ID
    代碼位ID




  • 將本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) {
            }
        });

後續有什麼問題 能夠下方留言方便討論!

相關文章
相關標籤/搜索