Android开发接入穿山甲广告SDK

Android开发接入穿山甲广告SDK

Android接入穿山甲sdk还是比较简单,穿山甲sdk很多都封装好了。
你们也可以直接去下载它的demo参考

第一步:初始化sdk
public class TTAdManagerHolder {

    private static final String TAG = "TTAdManagerHolder";

    public static boolean sInit;
    public static boolean sStart;

    public static TTAdManager get() {

        return TTAdSdk.getAdManager();
    }

    public static void init(final Context context) {
        //初始化穿山甲SDK
        doInit(context);
    }

    //step1:接入网盟广告sdk的初始化操作,详情见接入文档和穿山甲平台说明
    private static void doInit(Context context) {
        if (sInit) {
            //Toast.makeText(context, "您已经初始化过了", Toast.LENGTH_LONG).show();
            return;
        }
        //TTAdSdk.init(context, buildConfig(context));
        //setp1.1:初始化SDK

        TTAdSdk.init(context, buildConfig(context));
        sInit = true;
        start();
        //Toast.makeText(context, "初始化成功", Toast.LENGTH_LONG).show();
    }

    public static void start() {
        if (!sInit) {
            //Toast.makeText(context, "还没初始化SDK,请先进行初始化", Toast.LENGTH_LONG).show();
            return;
        }
        if (sStart) {
            return;
        }
        //setp1.2:启动SDK

        TTAdSdk.start(new TTAdSdk.Callback() {
            @Override
            public void success() {

                Log.i(TAG, "success: " + TTAdSdk.isSdkReady());

            }

            @Override
            public void fail(int code, String msg) {
                sStart = false;
                Log.i(TAG, "fail:  code = " + code + " msg = " + msg);
            }
        });
        sStart = true;
    }

    private static TTAdConfig buildConfig(Context context) {

        return new TTAdConfig.Builder()
                /**
                 * 注:需要替换成在媒体平台申请的appID ,切勿直接复制
                 */
                // // 5001121 是穿山甲demo的,5643182是测试的
                .appId(BuildConfig.DEBUG?"5643182":BuildConfig.CSJ_APP_ID)
                .appName(context.getString(R.string.app_name))
                /**
                 * 上线前需要关闭debug开关,否则会影响性能
                 */
                .debug(false)
                /**
                 * 使用聚合功能此开关必须设置为true,默认为false
                 */
                .useMediation(false)
                .customController(getTTCustomController()) //如果您需要设置隐私策略请参考该api
//                .setMediationConfig(new MediationConfig.Builder() //可设置聚合特有参数详细设置请参考该api
//                        .setMediationConfigUserInfoForSegment(getUserInfoForSegment())//如果您需要配置流量分组信息请参考该api
//                        .build())
                .build();
    }

    //函数返回值表示隐私开关开启状态,未重写函数使用默认值
    private  static TTCustomController getTTCustomController(){
        return new TTCustomController() {

            @Override
            public boolean isCanUseWifiState() {
                return false;
            }

            @Nullable
            @Override
            public String getDevImei() {
                return "";
            }

            @Override
            public String getMacAddress() {
                return "";
            }

            @Override
            public boolean isCanUseWriteExternal() {
                return super.isCanUseWriteExternal();
            }

            @Override
            public String getDevOaid() {
                LogUtils.i("oaid1", MyApplication.getInstance().oaid);
                return super.getDevOaid();
            }


            @Override
            public boolean isCanUseAndroidId() {
                return false;
            }

            @Nullable
            @Override
            public LocationProvider getTTLocation() {
                return null;
            }

            @Override
            public boolean alist() {
                return false;
            }

            @Override
            public boolean isCanUsePhoneState() {
                return false;
            }

            @Override
            public String getAndroidId() {
                return "";
            }

            @Override
            public boolean isCanUseLocation() {
                return false;
            }



            @Override
            public MediationPrivacyConfig getMediationPrivacyConfig() {
                return new MediationPrivacyConfig() {

                    @Override
                    public boolean isLimitPersonalAds() {
                        return super.isLimitPersonalAds();
                    }

                    @Override
                    public boolean isProgrammaticRecommend() {
                        return super.isProgrammaticRecommend();
                    }
                };
            }
        };
    }

}

你在同意隐私政策后调init方法即可

第二步:去穿山甲平台申请广告位代码

自己去申请了,很简单

第三步:展示开屏广告:
/**
 * @author :congge
 * @date : 2024-12-27 16:13
 * @desc : 开屏广告
 **/
public class AdStartupActivity extends BaseActivity<AdIIView, AdPresenter> implements AdIIView {

    private static final String TAG = "SplashActivity";
    public static final String START_UP_TYPE = "0";
    public static final String SIGN_TYPE = "1";
    public static final String LOOK_AD_TYPE = "2";
    public static final String MOOD_TYPE = "3";
    public static final String PHOTO_TYPE = "4";

    private TTAdNative mTTAdNative;
    private FrameLayout mSplashContainer;
    //是否强制跳转到主页面
    private boolean mForceGoMain;

    //开屏广告加载超时时间,建议大于3000,这里为了冷启动第一次加载到广告并且展示,示例设置了3000ms
    private static final int AD_TIME_OUT = 3000;
    private String mCodeId = "";

    private CSJSplashAd mSplashAd;

    // 来源:0启动页 1签到,2看广告,领金币,3动态,4相册
    private String fromType;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initHeadView(R.layout.activity_ad_splash, false);
        showRealView();
    }

    @Override
    protected void onResume() {
        //判断是否该跳转到主页面
        if (mForceGoMain) {
            goToMainActivity();
        }
        super.onResume();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mForceGoMain = true;
    }

    @Override
    protected void initRealView(View view) {
        super.initRealView(view);

        mSplashContainer = (FrameLayout) findViewById(R.id.splash_container);

        //step2:创建TTAdNative对象

        mTTAdNative = TTAdManagerHolder.get().createAdNative(this);
        getExtraInfo();
        //在合适的时机申请权限,如read_phone_state,防止获取不了imei时候,下载类广告没有填充的问题
        //在开屏时候申请不太合适,因为该页面倒计时结束或者请求超时会跳转,在该页面申请权限,体验不好
        // TTAdManagerHolder.getInstance(this).requestPermissionIfNecessary(this);
        //加载开屏广告
        loadSplashAd();
    }

    private void getExtraInfo() {
        Intent intent = getIntent();
        if (intent == null) {
            return;
        }
        String codeId = intent.getStringExtra("adId");
        fromType = getIntent().getStringExtra("fromType");
        if (!TextUtils.isEmpty(codeId)) {
            mCodeId = codeId;
            LogUtils.i("mCodeId",mCodeId);
        }

    }

    /**
     * 加载开屏广告
     */
    private void loadSplashAd() {

        //step3:创建开屏广告请求参数AdSlot,具体参数含义参考文档
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getRealMetrics(dm);
        int statusBarHeightPx = (int) UIUtils.getStatusBarHeight(this);
        float splashWidthDp = UIUtils.getScreenWidthDp(this);
        int splashWidthPx = UIUtils.getScreenWidthInPx(this);
        int screenHeightPx = UIUtils.getScreenHeight(this) + statusBarHeightPx;
        float screenHeightDp = UIUtils.px2dip(this, screenHeightPx);
        float splashHeightDp;
        int splashHeightPx;

        splashHeightDp = screenHeightDp;
        splashHeightPx = screenHeightPx;

        AdSlot adSlot = new AdSlot.Builder()
                .setCodeId(mCodeId)
                //模板广告需要设置期望个性化模板广告的大小,单位dp,代码位是否属于个性化模板广告,请在穿山甲平台查看
                //view宽高等于图片的宽高
                .setExpressViewAcceptedSize(splashWidthDp, splashHeightDp) // 单位是dp
                .setImageAcceptedSize(splashWidthPx, splashHeightPx) // 单位是px
                .build();

        //step4:请求广告,调用开屏广告异步请求接口,对请求回调的广告作渲染处理

        final CSJSplashAd.SplashAdListener listener = new SplashAdListener(this);

        mTTAdNative.loadSplashAd(adSlot, new TTAdNative.CSJSplashAdListener() {

            @Override
            public void onSplashLoadSuccess(CSJSplashAd ad) {
                Log.e(TAG, "CSJActivity-onSplashLoadSuccess");
                if (ad == null) {
                    return;
                }
                mSplashAd = ad;
                mSplashAd.showSplashView(mSplashContainer);

            }

            @Override
            public void onSplashLoadFail(CSJAdError error) {
                Log.e(TAG, "CSJActivity-onSplashLoadFail, errorCode: " + error.getCode() + ", errorMsg: " + error.getMsg());
                //showToast(error.getMsg());
                goToMainActivity();
            }

            @Override
            public void onSplashRenderSuccess(CSJSplashAd ad) {
                Log.e(TAG, "CSJActivity-onSplashRenderSuccess");
                //设置SplashView的交互监听器
                mSplashAd.setSplashAdListener(listener);

                if (ad.getInteractionType() == TTAdConstant.INTERACTION_TYPE_DOWNLOAD) {
                    TTAppDownloadListener downloadListener = new SplashDownloadListener();
                    mSplashAd.setDownloadListener(downloadListener);
                }

                //初始化开屏点睛相关数据
                //initSplashClickEyeData(mSplashAd, ad.getSplashView());
            }

            @Override
            public void onSplashRenderFail(CSJSplashAd ad, CSJAdError csjAdError) {
                Log.e(TAG, "CSJActivity-onSplashRenderFail, errorCode: " + csjAdError.getCode() + ", errorMsg: " + csjAdError.getMsg());
                //showToast(csjAdError.getMsg());
                goToMainActivity();
            }
        }, AD_TIME_OUT);

    }

    public static class SplashDownloadListener implements TTAppDownloadListener{
        private boolean hasShow = false;
        @Override
        public void onIdle() {

        }

        @Override
        public void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {
            if (!hasShow) {
                Log.d(TAG, "下载中...");
                hasShow = true;
            }
        }

        @Override
        public void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {
            Log.d(TAG, "下载暂停...");
        }

        @Override
        public void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {
            Log.d(TAG, "下载失败...");
        }

        @Override
        public void onDownloadFinished(long totalBytes, String fileName, String appName) {
            Log.d(TAG, "下载完成...");
        }

        @Override
        public void onInstalled(String fileName, String appName) {
            Log.d(TAG, "安装完成...");
        }
    }

    public  class SplashAdListener implements CSJSplashAd.SplashAdListener {

        public WeakReference<Activity> mContextRef;

        public SplashAdListener(Activity activity) {
            mContextRef = new WeakReference<>(activity);

        }

        private void showToast(Context context, String msg) {
            if (context == null || TextUtils.isEmpty(msg)) {
                return;
            }
            ToastUtils.show(msg);

        }

        private  void goToMainActivity() {
            if (fromType.equals(START_UP_TYPE)){
                if (!SPUtils.getIsLogin()) {
                    IntentUtils.startGuideActivity(mContextRef.get());
                } else {
                    IntentUtils.startStartToMainActivity(mContextRef.get());
                }
            }

            mContextRef.get().finish();
        }

        @Override
        public void onSplashAdShow(CSJSplashAd ad) {
            Log.d(TAG, "onAdShow");
            //showToast(mContextRef.get(),"开屏广告展示");
        }


        @Override
        public void onSplashAdClick(CSJSplashAd ad) {
            Log.d(TAG, "onAdClicked");
            //showToast(mContextRef.get(),"开屏广告点击");
            EventBusUtils.post(new AdLookOverEvent(fromType,"1"));
        }

        @Override
        public void onSplashAdClose(CSJSplashAd ad, int closeType) {
            if (closeType == CSJSplashCloseType.CLICK_SKIP) {
               // showToast(mContextRef.get(),"开屏广告点击跳过 ");
                EventBusUtils.post(new AdLookOverEvent(fromType,"0"));
            } else if (closeType == CSJSplashCloseType.COUNT_DOWN_OVER) {
               // showToast(mContextRef.get(),"开屏广告点击倒计时结束");
                EventBusUtils.post(new AdLookOverEvent(fromType,"1"));
            } else if (closeType == CSJSplashCloseType.CLICK_JUMP) {
               // showToast(mContextRef.get(),"点击跳转");
                EventBusUtils.post(new AdLookOverEvent(fromType,"1"));
            }
            goToMainActivity();
        }
    }


    private  void goToMainActivity() {
        if (fromType.equals(START_UP_TYPE)){
            if (!SPUtils.getIsLogin()) {
                IntentUtils.startGuideActivity(AdStartupActivity.this);
            } else {
                IntentUtils.startStartToMainActivity(AdStartupActivity.this);
            }
        }
        finish();
    }

    @Override
    public AdPresenter createPresenter() {
        return new AdPresenter();
    }

    @Override
    public AdIIView createView() {
        return this;
    }
}

有需要完整源码的私信我,我每天都看私信的

为了接入穿山甲广告SDK,您需要按照以下步骤进行操作: 1. 首先,您需要在Gradle文件中限制Gradle版本为3.3.3、3.4.3、3.5.4、3.6.4或4.0.1,以支持Android R标签的引入。 2. 在AndroidManifest文件中添加以下代码,用于启动穿山甲广告SDK的SplashActivity,并设置相关的配置属性: ``` <activity android:name="com.unity3d.player.chuanshanjia.CsjSplashActivity" android:configChanges="keyboard|orientation|screenSize" android:screenOrientation="sensorLandscape" android:theme="@style/Theme.Splash"> <!-- android:theme="@android:style/Theme.Black"> --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <!-- 表示在点击app图标的时候启动此Activity --> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> ``` 3. 如果您的应用需要在Android 7.0及以上环境中运行,还需要在AndroidManifest文件中添加以下代码,用于适配Android 7.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> ``` 以上就是接入穿山甲广告SDK的一般步骤,请根据您的具体情况进行配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Android 如何接入穿山甲广告?](https://blog.csdn.net/YoungOne2333/article/details/126381155)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Android 接入穿山甲SDK之开屏广告](https://blog.csdn.net/qq_41973169/article/details/125428479)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值