美文网首页简化开发
Android端集成穿山甲SDK

Android端集成穿山甲SDK

作者: XiaoXred | 来源:发表于2020-08-19 11:26 被阅读0次

    SDK接入

    穿山甲平台上创建测试状态的应用ID和广告位ID (ps:测试集成完毕后再把应用及对应的代码位改成正式状态)(ps:应用ID和代码位ID是对应关系 一个应用可以对应多个代码位ID)应用ID 对应demo中的APPID广告位ID 对应demo中的CodeId 





    1.导入 aar 及 SDK 依赖的 jar 包

    将本 SDK 压缩包内的 open_ad_sdk.aar 复制到 Application Module/libs 文件夹(没有的话须手动创建), 并将以下代码添加到您 app 的

    android{

    repositories {

        flatDir {

            dirs 'libs'

        }

    }

    depedencies {

        //穿山甲SDK

    implementation(name:'open_ad_sdk',ext:'aar')

    }


    2.添加权限

    穿山甲SDK建议您添加下述权限,并建议在您的隐私协议中向开发者声明穿山甲SDK会获取下述权限并应用于广告投放。

    <!--必要权限-->

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

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

    <!--可选权限-->

    <uses-permission android:name="android.permission.READ_PHONE_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" />

    注意:穿山甲SDK不强制获取以上权限,即使没有获取可选权限SDK也能正常运行;获取以上权限将帮助穿山甲优化投放广告精准度和用户的交互体验,提高eCPM。

    适配 Android7.0 及以上

    如果您的应用需要在 Android7.0 及以上环境运行,请在 AndroidManifest 中添加如下代码:

    (加入到清单application中就可以)

    <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>

    3.在 res/xml 目录下,新建一个 xml 文件 file_paths,在该文件中添加如下代码:

    <?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>

    4.provider 配置(在清单中加入到第2步下边就可以  )

    注意:单进程或多进程都必须配置

    <provider

        android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"

        android:authorities="${applicationId}.TTMultiProvider"

        android:exported="false" />

    SDK中使用的so文件支持五种架构:x86,x86_64,armeabi,armeabi-v7a,arm64-v8a 如果您应用中支持的架构超出这 五种,请在build.gradle中使用abiFilters选择支持的架构。

    android {

        defaultConfig {

                ndk{    

                    // 设置支持的 SO 库构架,注意这里要根据你的实际情况来设置 

                    abiFilters'armeabi-v7a','arm64-v8a','x86','x86_64','armeabi'

                        }

                }

        }

    5.初始化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("应用id")

                    .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();

        }

    }

    在Application中调用

    public class MyApp extends Application {

        @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)

            //}

        }

    }

    6.展示广告(激励视频TTRewardVideoAd)

    TTAdManager ttAdManager = TTAdManagerHolder.get();

    TTAdNative mTTAdNative = ttAdManager.createAdNative(getApplicationContext());

    AdSlot adSlot =new AdSlot.Builder()

    .setCodeId("广告位id")

    .setSupportDeepLink(true)

    .setAdCount(2)

    //个性化模板广告需要设置期望个性化模板广告的大小,单位dp,激励视频场景,只要设置的值大于0即可。仅模板广告需要设置此参数

            .setExpressViewAcceptedSize(500, 500)

    .setImageAcceptedSize(1080, 1920)

    .setRewardName("金币")//奖励的名称

            .setRewardAmount(3)//奖励的数量

            //必传参数,表来标识应用侧唯一用户;若非服务器回调模式或不需sdk透传

            //可设置为空字符串

            .setUserID("user123")

    .setMediaExtra("media_extra")//用户透传的信息,可不传

            .build();

    7.视频回调

    mTTAdNative.loadRewardVideoAd(adSlot, new TTAdNative.RewardVideoAdListener() {

    @Override

              public void onError(int i, String s) {

    //开屏广告请求失败

              }

    @Override

              public void onRewardVideoAdLoad(TTRewardVideoAd ttRewardVideoAd) {

    ttRewardVideoAd.setRewardAdInteractionListener(new TTRewardVideoAd.RewardAdInteractionListener() {

    @Override

                      public void onAdShow() {

    showToast("播放完视屏即可签到领奖");

                      }

    @Override

                      public void onAdVideoBarClick() {

    showToast("开始下载");

                      }

    @Override

                      public void onAdClose() {

    showToast("关闭广告");

                      }

    @Override

                      public void onVideoComplete() {

    showToast("视频完成");

                      }

    @Override

                      public void onVideoError() {

    //                      showToast("视频错误");

                      }

    @Override

                      public void onRewardVerify(boolean b, int i, String s) {

    //                      showToast("视频异常");

                      }

    @Override

                      public void onSkippedVideo() {

    showToast("跳过视频");

                      }

    });

                  ttRewardVideoAd.showRewardVideoAd(FoundSignActivity.this);

              }

    @Override

              public void onRewardVideoCached() {

    }

    });


    相关文章

      网友评论

        本文标题:Android端集成穿山甲SDK

        本文链接:https://www.haomeiwen.com/subject/rpjrjktx.html