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遇到的问题

你可能感兴趣的:(Android,第三方)