logo

帮助中心/文档详情/

SDK 初始化配置

初始化配置

重点:

  1. 穿山甲SDK需要在主线程中初始化
  2. 多进程涉及WebView的使用,用户想要使用自己的数据路径,可以在SDK初始化之前调用WebView.setDataDirectorySuffix()

开发者需要在Application#onCreate()方法中调用以下代码来初始化穿山甲sdk。
重点: 目前SDK已支持多进程,如果明确某个进程不会使用到广告SDK,可以只针对特定进程初始化广告sdk

public class DemoApplication extends Application {
    public static String PROCESS_NAME_XXXX = "process_name_xxxx";

    @Override
    public void onCreate() {
        super.onCreate();
        //强烈建议在应用对应的Application#onCreate()方法中调用,避免出现content为null的异常
        TTAdSdk.init(context,
            new TTAdConfig.Builder()
                .appId("5001121")
                .useTextureView(true) //默认使用SurfaceView播放视频广告,当有SurfaceView冲突的场景,可以使用TextureView
                .appName("APP测试媒体")
                .titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)//落地页主题
                .allowShowNotify(true) //是否允许sdk展示通知栏提示
                .debug(true) //测试阶段打开,可以通过日志排查问题,上线时去除该调用
                .directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI) //允许直接下载的网络状态集合,没有设置的网络下点击下载apk会有二次确认弹窗,弹窗中会披露应用信息
                .supportMultiProcess(false) //是否支持多进程,true支持
                ~~ .asyncInit(true) //是否异步初始化sdk,设置为true可以减少SDK初始化耗时。3450版本开始废弃~~
                //.httpStack(new MyOkStack3())//自定义网络库,demo中给出了okhttp3版本的样例,其余请自行开发或者咨询工作人员。
                .build());
        //如果明确某个进程不会使用到广告SDK,可以只针对特定进程初始化广告SDK的content
        //if (PROCESS_NAME_XXXX.equals(processName)) {
        //   TTAdSdk.init(context, config);
        //}
    }
}

初始化接口说明

3450以上版本SDK初始化

调整说明:
穿山甲在3450版本对SDK的初始化方法进行了较大的改动,支持了同步初始化异步初始化两种方式,并且TTAdConfig.Builder中支持异步初始化API将不再生效。优化后同步初始化异步初始化两种方式的耗时没有显著差异,后者将部分初始化逻辑放到了子线程。开发者若使用异步初始化方法,请注意需要在success回调之后再去请求广告。

新增初始化接口

穿山甲SDK初始化API:该API必须在主线程中调用,穿山甲会将初始化操作放在子线程执行。

/**
 * 注意事项:
 *     1.该API必须在主线程中调用,若未在主线程初始化则会抛出异常 "Wrong Thread ! Please exec TTAdSdk.init in main thread."
 *     2.请求广告前需要保证已经调用了init方法。
 * 推荐使用该API执行穿山甲初始化操作
 * 
 * @param context  必须是Application context
 * @param config   初始化配置信息,必要参数
 * @param callback InitCallback 异步初始化回调
 */
public static void init( Context context,  TTAdConfig config,  InitCallback callback) 

//初始化回调说明
public interface InitCallback {
    /**
     * 初始化成功回调
     * 注意:开发者需要在success回调之后再去请求广告
     */
    void success();

    /**
     * @param code 初始化失败回调错误码
     * @param msg 初始化失败回调信息
     */
    void fail(int code, String msg);
   
}

fail回调状态码

vale 说明
4000 本地执行API错误导致初始化错误码
初始化状态接口
/**
 * @return 返回初始化是否成功的状态
 */
public static boolean isInitSuccess()
调整API

穿山甲SDK初始化方法:该API调整为必须在主线程中调用,初始化操作会在主线程执行。

/**
 * @param context 必须是application context
 * @param config  初始化配置信息,必要参数
 * @return TTAdManager实例
 */
public static TTAdManager init(final Context context, final TTAdConfig config)
过期&无效API
//TTAdConfig.Builder中支持异步初始化API将过期
public Builder asyncInit(boolean asyncInit)

3450以下版本SDK初始化方法

注意: AppId为必填内容,若appid是通过服务端下发的,那么在初始化前需要做不为空的判断。

/**
  * 穿山甲sdk初始化入口
  * @param context 必须是application context
  * @param config  初始化配置信息,必要参数
  * @return TTAdManager实例
  */
public static TTAdManager init(Context context, TTAdConfig config);

初始化配置参数说明
    public static class TTAdConfig.Builder {
       private String mAppId;// 必选参数,设置应用的AppId
       private String mAppName;// 必选参数,设置应用名称
       private boolean mIsPaid = false;// 可选参数,设置是否为计费用户:true计费用户、false非计费用户。默认为false非计费用户。须征得用户同意才可传入该参数
       private String mKeywords;// 可选参数,设置用户画像的关键词列表 **不能超过为1000个字符**。须征得用户同意才可传入该参数
       private String mData;// 可选参数,设置额外的用户信息 **不能超过为1000个字符**
       private int mTitleBarTheme = TTAdConstant.TITLE_BAR_THEME_LIGHT;// 可选参数,设置落地页主题,默认为TTAdConstant#TITLE_BAR_THEME_LIGHT
       private boolean mAllowShowNotify = true;// 可选参数,设置是否允许SDK弹出通知:true允许、false禁止。默认为true允许
       private boolean mIsDebug = false;// 可选参数,是否打开debug调试信息输出:true打开、false关闭。默认false关闭
       private int[] mDirectDownloadNetworkType;//允许直接下载的网络状态集合,不调用则所有网络下均无下载确认弹窗,调用不传参数则所有网络均有下载确认弹窗
       private boolean mIsUseTextureView = false;// 可选参数,设置是否使用texture播放视频:true使用、false不使用。默认为false不使用(使用的是surface)
       private boolean mIsSupportMultiProcess = false;// 可选参数,设置是否支持多进程:true支持、false不支持。默认为false不支持
       private IHttpStack mHttpStack;//可选参数,设置外部网络请求,默认为urlconnection
       private boolean mIsAsyncInit = false;//是否异步初始化sdk,开启可减少初始化耗时
       private TTCustomController mCustomController;//可选参数,可以设置隐私信息控制开关
   }

隐私信息控制开关

   public abstract class TTCustomController {
       /**
        * 是否允许SDK主动使用地理位置信息
        *
        * @return true可以获取,false禁止获取。默认为true
        */
       public boolean isCanUseLocation() {
           return true;
       }

       /**
        * 当isCanUseLocation=false时,可传入地理位置信息,穿山甲sdk使用您传入的地理位置信息
        *
        * @return 地理位置参数
        */
       public TTLocation getTTLocation() {
           return null;
       }
       
       /**
        * 是否允许SDK主动使用手机硬件参数,如:imei
        *
        * @return true可以使用,false禁止使用。默认为true
        */
       public boolean isCanUsePhoneState() {
           return true;
       }

       /**
        * 当isCanUsePhoneState=false时,可传入imei信息,穿山甲sdk使用您传入的imei信息
        *
        * @return imei信息
        */
       public String getDevImei() {
           return null;
       }

       /**
        * 是否允许SDK主动使用ACCESS_WIFI_STATE权限
        *
        * @return true可以使用,false禁止使用。默认为true
        */
       public boolean isCanUseWifiState() {
           return true;
       }

       /**
        * 是否允许SDK主动使用WRITE_EXTERNAL_STORAGE权限
        *
        * @return true可以使用,false禁止使用。默认为true
        */
       public boolean isCanUseWriteExternal() {
           return true;
       }

       /**
        * 开发者可以传入oaid
        *
        * @return oaid
        */
        public String getDevOaid() {
           return null;
        }

   }

示例:

private static TTAdConfig buildConfig(Context context) {
    return new TTAdConfig.Builder()
            ...
            .customController(new TTCustomController() {
                @Override
                public boolean isCanUsePhoneState() {
                    return true;
                }
            })
            ...
}

注意:

  • 重写getTTLocation()之前需要设置isCanUseLocation()
  • 重写getDevImei()之前需要先设置isCanUsePhoneState()

构建TTAdManager对象

TTAdManager对象为整个SDK的入口接口,可用于广告获取权限请求版本号获取等

构建方法

//一定要在初始化后才能调用,否则为空
TTAdManager ttAdManager = TTAdSdk.getAdManager();

TTAdManger接口说明

public interface TTAdManager {    

// 创建TTAdNative对象 必须采用activity
TTAdNative createAdNative(Context context);

//部分机型需要主动申请权限,如 READ_PHONE_STATE权限    
void requestPermissionIfNecessary(Context context); 
   
//退出时尝试显示"提示安装app"对话框,返回值:true显示对话框、false不显示对话框    
boolean tryShowInstallDialogWhenExit(Context context, final ExitInstallListener listener);    

//获取穿山甲sdk版本号
String getSDKVersion();


// 3600版本新增接口设置夜间模式

// 设置主题类型,0:正常模式;1:夜间模式;默认为0;传非法值,按照0处理
void setThemeStatus(int themeStatus);

// 获取当前主题类型
 int getThemeStatus();
}

夜间模式

3600版本新增接口设置夜间模式

// 设置主题类型,0:正常模式;1:夜间模式;默认为0;传非法值,按照0处理
void setThemeStatus(int themeStatus);

// 获取当前主题类型
 int getThemeStatus();

SDK导入需要注意的点:

1、TTAdManagerHolder保持单例模式

2、单进程多次初始化SDK以第一次初始设置的信息为主;

3、appId是平台上穿件应用生成的7位数`字;

4、任何类型的视频广告加载后播放出现黑屏都可以按以下方式尝试解决:

  • 清单文件中的黑屏权限是否添加
<uses-permission android:name="android.permission.WAKE_LOCK">
  • 尝试使用TextureView控件播放视频

5、appName不为空即可 建议和平台创建的应用名称保持一致

6、directDownloadNetworkType配置:

  • 可根据具体的产品需求自行配置,方法中的网络集合为允许直接下载的网络
  • 若需要在任何网络下用户下载都有确认弹窗,方法中里直接写空(非null)即可

7、supportMultiProcess说明:

  • 若项目是单进程必须更改为false
  • 若项目是多进程,则需要设置true。多进程中如果每个进程中都需要展示广告 必须每个进程都进行SDK的初始化
    • 如果您的应用需要支持多进程,请务必设置TTAdConfig.supportMultiProcess(true)。
      确认app多进程支持判断方法:
      a、穿山甲sdk初始化
      b、穿山甲广告获取
      c、穿山甲广告展示
      这三个关键点的调用在不同进程则为多进程,否则即为单进程
      如非必要尽量不要使用多进程开关,多进程效率不如单进程高

8、provider配置

  • 无论单进程还是多进程都必须配置穿山甲所需provider
  • 无论平台应用处于测试状态还是正式状态都需要配置provider

9、如果您的应用对资源也进行混淆(如andResGuard),请不要混淆穿山甲的任何资源,防止资源找不到而发生崩溃的问题。

SDK压缩文件内whiteList.txt 白名单上的资源不支持混淆 ,开发者在SDK更新迭代过程中需要重新检查一遍白名单内容

文档内容是否对您有帮助?
联系我们