Android 應用廣告接入- 穿山甲

廣告平臺接入無非是:與己賺點錢養活自己;與他人增加廣告軟件曝光

1. 展示廣告方式
  1. 支持Banner,信息流廣告
  2. 開屏、插屏廣告
  3. Banner輪播,視頻廣告
  4. 激勵視頻廣告
2. 接入SDK步驟

1. 註冊一個穿山甲賬戶(已有字節跳動系產品的賬號或郵箱註冊)。然後 流量管理 --> 應用管理 --> 創建應用(前期測試屬性,後期正式屬性)
2. 將SDK壓縮包內的open_ad_sdk.aar複製到/libs文件夾
3. 使用穿山甲SDK要申請權限,注意下圖中必須要有的權限一個都不能少

<!-- 訪問網絡,網絡定位需要上網 -->
<uses-permission android:name="android.permission.INTERNET" />

<!-- 用於讀取手機當前的狀態(爲了獲取用戶手機的IMEI,用來唯一的標識用戶) -->
<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" />

<!-- 用於訪問wifi網絡信息,wifi信息會用於進行網絡定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

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

<!--如果是安卓8.0,應用編譯配置的targetSdkVersion>=26,請務必添加以下權限 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

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

<!-- 進行電源管理操作權限設置.或操作無限網絡連接設置的鎖. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />

建議在申請權限時使用方法TTAdManager.requestPermissionIfNecessary(this),沒有imei權限會影響下載類廣告的下發

4. 初始化SDK

/**
 * 可以用一個單例來保存TTAdManager實例,在需要初始化sdk的時候調用
 */
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:接入網盟廣告sdk的初始化操作,詳情見接入文檔和穿山甲平臺說明
    private static void doInit(Context context) {
        if (!sInit) {
            TTAdSdk.init(context, buildConfig(context));
            sInit = true;
        }
    }

	// 1. 初始化SDK時需要包含APPID,播放器,appname,通知欄提示,debug狀態,網絡狀態等信息
	// 2. 如果是多進程的話,需要在每個請求廣告的子進程都進行初始化設置
    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(false)//是否支持多進程
                //.httpStack(new MyOkStack3())//自定義網絡庫,demo中給出了okhttp3版本的樣例,其餘請自行開發或者諮詢工作人員。
                .build();
    }
}
public class MyApp extends Application {

    public static RefWatcher sRefWatcher = null;
    public static String PROCESS_NAME_XXXX = "process_name_xxxx";

    @Override
    public void onCreate() {
        super.onCreate();
        // 穿山甲SDK初始化
        // 強烈建議在應用對應的Application#onCreate()方法中調用,避免出現content爲null的異常
        TTAdManagerHolder.init(this);
        //如果明確某個進程不會使用到廣告SDK,可以只針對特定進程初始化廣告SDK的content
        //if (PROCESS_NAME_XXXX.equals(processName)) {
        //   TTAdManagerHolder.init(this)
        //}
    }
}

5. 代碼混淆

# 保護內部類
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

-keep class com.bytedance.sdk.openadsdk.** {*;}
-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
-keep class com.ss.sys.ces.* {*;}

更多細節,可參考
SDK接入流程
頭條網盟Android SDK——接入說明文檔

3. 常見問題

1. 集成到APP當中後,無展現量點擊量等數據
這個可能有如下原因:

  • 請注意測試狀態是不統計數據的,必須轉爲正式狀態纔有數據顯示。
  • 未能正確註冊展示回調setAdInteractionListener。
  • 如果媒體使用了windowmanager,其中FLAG_NOT_FOCUSABLE影響到我們SDK檢測上報show的機制,導致無展示上報,所以需要去掉FLAG_NOT_FOCUSABLE這個屬性。
  • 媒體不能使用popupwindow來展示廣告,會影響到我們SDK檢測上報機制,必須使用viewgroup,否則沒有數據統計
  • 可能是在廣告展示後才爲廣告註冊的監聽事件,必須在廣告展示前註冊監聽事件(我是犯了這個錯)。
 mttRewardVideoAd.setRewardAdInteractionListener(); // 先設置監聽,在展示廣告
 mttRewardVideoAd.setDownloadListener();
 // 在獲取到廣告後展示
 mttRewardVideoAd.showRewardVideoAd(RewardVideoAct.this);// 該方法直接展示廣告
  • 媒體的應用設置裏勾選了調試SHA1值,且調試SHA1值和上面填的正式SHA1一致,導致廣告是按照調試SHA1來做處理,最終會被過濾掉,所以如果調試SHA1值和正式SHA1值一致的話就不要勾選這個選項了。
  • 媒體使用了自定義網絡庫的設置,廣告展示點擊上報失敗。這個是因爲String k = entry.getKey();String v = entry.getValue()在2102版本之前後一個的設置依然是getkey,在2102版本之後做了適配,媒體自定義網絡庫的時候需要注意下這個問題。

排查以上問題沒有結論可以根據 官方demo來比對下,看能否正常查看到展示回調。

更多Android集成 Android常見問題

4. 參考
  1. SDK接入流程
  2. 頭條網盟Android SDK——接入說明文檔(記得申請賬號登錄)
  3. 線上課堂入門篇—Part1.產品介紹
  4. 線上課堂入門篇—Part2.平臺使用
  5. Android開發接入頭條聯盟穿山甲SDK遇到的問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章