Android集成指南

通知:自15.4.6版本起,Mintegral SDK更换了SDK包名和各个广告类型的类文件名称,集成sdk在15.4.6之前版本的开发者升级此版本后需要对新SDK进行使用修改,目前需要改动的地方有:

1.Maven仓库配置地址。下载依赖gradle语句。

2.SDK初始化代码。

3.各个广告类型调用代码(接口无变化,类名称发生更改)。

4.混淆配置信息更改(如用到),资源缩减配置更改(如用到),资源混淆白名单配置更改(如用到),下载器适配更改(如用到),详见'AndoridManifest.xml配置'一列。

5.用jar包集成的开发者,需要更改对应集成广告类型的Activity注册信息,详见'AndoridManifest.xml配置'一列。

</font>

原类名

新类名

MIntegralSDKFactory

MBridgeSDKFactory

MTGBannerView

MBBannerView

MtgNativeHandler

MBNativeHandler

MTGMediaView

MBMediaView

MTGAdChoice

MBAdChoice

MTGNativeAdvancedHandler

MBNativeAdvancedHandler

MTGRewardVideoHandler

MBRewardVideoHandler

MTGInterstitialHandler

MBInterstitialHandler

MTGInterstitialVideoHandler

MBInterstitialVideoHandler

MTGInteractiveHandler

MBInteractiveHandler

MTGSplashHandler

MBSplashHandler

概要

本文档描述了Android开发者如何集成Mintegral SDK产品,通过集成MBridge sdk 展示广告创造收益。 Mintegral SDK提供了9种广告形式,包括:Banner(横幅广告)、Native(原生广告)、NativeVideo(原生视频)、Automatic Rending Native(自动渲染原生广告)、RewardVideo(激励性视频)、Interstitial(插屏)、Interstitial Video(插屏视频)、InterActive(试玩广告)、Splash(开屏广告)。

代码使用注意事项和导航栏配置信息 如果您在后台配置页面中设置的应用为接受apk广告投放,在使用任意广告类型时需要传入代码中的context对象务必保证是Activity类型(Application context对象会有异常效果)。若展示广告的页面(Activity)为全屏无导航栏状态,请按照此链接在您的Activity中添加隐藏导航栏的代码,否则可能导致导航栏显示异常。

获取SDK

请根据以下提示选择您的集成方式,点击“开始集成”获取SDK

Demo

在手动下载SDK的zip包里,名称为MBTest的是此下载版本对应的Demo

获取SDK版本号

MBConfiguration.SDK_VERSION

注意:如果使用gradle方式拉取代码失败,在项目根build.gradle文件中添加maven仓库配置。

 //非上架GP市场应用 安卓X版本
 maven {
        url "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_china"
 }

 //上架GP市场应用 安卓X版本
 maven {
        url  "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea"
 }

 //非上架GP市场应用 非安卓X版本
 maven {
        url  "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_support/"
 }

</font>

截图展示:

AndroidManifest.xml 配置

1.必要权限

注:如果使用了国内流量版SDK ,"READ_PHONE_STATE"此条权限必须加上,如果Android系统6.0以上,需要动态申请此权限。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 如果国内流量版本SDK ,以下两条权限必须加上 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

2.广告展示Activity清单配置(如果您使用的是aar或者gradle方式集成,可以忽略此步骤)。

<activity
            android:name="com.mbridge.msdk.activity.MBCommonActivity"
            android:configChanges="keyboard|orientation"
            android:excludeFromRecents="true"
            android:exported="false"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"/>

<activity
            android:name="com.mbridge.msdk.shell.MBActivity"
            android:configChanges="keyboard|orientation|screenSize"
            android:excludeFromRecents="true"
            android:theme="@style/MBridgeAppTheme"/>

<!--激励视频和插屏视频广告所需Activity-->            
<activity
            android:name="com.mbridge.msdk.reward.player.MBRewardVideoActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:excludeFromRecents="true"
            android:theme="@style/mbridge_transparent_theme" />

<!--插屏图片广告所需Activity-->            
<activity
            android:name="com.mbridge.msdk.interstitial.view.MBInterstitialActivity"
            android:configChanges="orientation|screenSize"
            android:excludeFromRecents="true" />

<!--交互广告所需Activity-->            
<activity
            android:name="com.mbridge.msdk.interactiveads.activity.InteractiveShowActivity"
            android:excludeFromRecents="true"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>

2.下载器适配(如果您使用的是aar或者gradle方式集成,可以忽略此步骤)。

(1)将Android Support v4包升级到26.0.0或以上。

(2)如果targetSDKVersion >= 24,需要适配FileProvider。 国内流量版本必需,海外版本可以不添加。 在xml文件下添加mb_provider_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>

在AndroidManifest.xml文件中添加如下代码

//国内流量版本必需,海外版本可以不添加。
<provider
        android:name="com.mbridge.msdk.foundation.tools.MBFileProvider"
        android:authorities="${applicationId}.mbFileProvider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/mb_provider_paths"/>
</provider>

3.混淆配置

(1)AndroidX的混淆配置

-keepattributes Signature   
-keepattributes *Annotation*   
-keep class com.mbridge.** {*; }  
-keep interface com.mbridge.** {*; }  
-keep interface androidx.** { *; }
-keep class androidx.** { *; }
-keep public class * extends androidx.** { *; }
-dontwarn com.mbridge.**   
-keep class **.R$* { public static final int mbridge*; }

​ (2)非AndroidX的混淆配置

-keepattributes Signature   
-keepattributes *Annotation*   
-keep class com.mbridge.** {*; }  
-keep interface com.mbridge.** {*; }  
-keep class android.support.v4.** { *; }  
-dontwarn com.mbridge.**   
-keep class **.R$* { public static final int mbridge*; }

4.资源缩减配置

如果开启了shrinkResources,需要进行以下配置:

新增res/raw/keep.xml文件,添加如下内容:

<?xml version="1.0" encoding="utf-8"?>
    <resources xmlns:tools="http://schemas.android.com/tools"
        tools:keep="@drawable/mbridge*,@drawable-hdpi-v4/mbridge*,@drawable-hdpi/mbridge*,@layout/mbridge*,@values/mbridge*,@anim/mbridge*" />

5.资源混淆白名单配置

如果使用了AndResGuard工具,需要进行以下配置:

"R.string.mbridge*",
"R.layout.mbridge*",
"R.drawable.mbridge*",
"R.anim.mbridge*",
"R.color.mbridge*",
"R.style.mbridge*",
"R.id.mbridge*"

6.智能下载配置

Note:开启智能下载的功能,即“边下边播”,将有益于广告load的成功率

对于AndroidX,在14.2.5版本及以后,如果在Android9.0及以上要开启此功能,需要进行配置

对于非AndroidX,在10.5.0版本及以后,如果在Android9.0及以上要开启此功能,需要进行配置

配置方法:

(1)在res目录下,创建network_security_config.xml文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>

    <!--- you need config the domain in your file,it will help us to cache video -->
    <domain-config cleartextTrafficPermitted="true">

        <domain includeSubdomains="true">127.0.0.1</domain>

    </domain-config>

</network-security-config>

(2)在 AndroidManifest.xml 的application标签,增加如下配置:

android:networkSecurityConfig="@xml/network_security_config"

SDK初始化

作为集成的第一步,你需要先将Mintegral的SDK进行初始化。

将Mintegral SDK添加至您的项目

通过JAR/AAR包集成

包名

作用

same.jar/aar chinasame.jar/aar

公共基础包

mbbanner.aar.jar/aar

Banner广告功能包

mbnative.jar/aar

Native广告功能包

nativeex.jar/aar

NativeVideo广告功能包

mbnativeadvanced.jar/aar

AutomaticRendingNative广告功能包

reward.jar/aar

RewardVideo广告功能包

interstitial.jar/aar

Interstitial广告功能包

interactiveads.jar/aar

Interactive广告功能包

mbsplash.jar/aar

Splash广告功能包

playercommon.jar/aar

视频播放器基础包

videojs.jar/aar

视频播放器功能包

videocommon.jar/aar

视频下载部分的功能包

mbjscommon.jar/aar

java 和 h5 交互的包

Tips:same.aar/chinasame.aar是公共基础包,是每种广告形式都必须要添加的, 如果要实现某种功能,必须要添加对应的aar包。例如要集成的是Splash形式的广告,需要放same.aar/chinasame.aar、mbsplash.aar。 如果是jar包集成的话除了将jar包添加之外,还需要将它对应的res文件导入项目。

初始化

1.在application里的如下方法中调用初始化方法,传入在Mintegral后台得到的AppID和AppKey。建议在主线程调用此方法,并且尽量在你应用启动时,越早初始化SDK越好。保证SDK在应用程序中只初始化一次,可以参考Demo中的MBridgeSDKManager.java工具类

我们提供两种初始化SDK的方式:

(1)不带回调的初始化

public void init(Map<String,String> ids,Application application);

示例代码:

MBridgeSDK sdk = MBridgeSDKFactory.getMBridgeSDK();
Map<String, String> map = sdk.getMBConfigurationMap("your AppId", "your AppKey");
sdk.init(map, this);

(2)带回调的初始化

注:

​ AndroidX:14.1.0及以上版本,SDK提供初始化状态的回调

​ 非AndroidX:10.4.0及以上版本,SDK提供初始化状态的回调

public void init(Map<String,String> ids, Application application, SDKInitStatusListener listener);

示例代码:

MBridgeSDK sdk = MBridgeSDKFactory.getMBridgeSDK();
Map<String, String> map = sdk.getMBConfigurationMap("your AppId", "your AppKey");

sdk.init(map, this, new SDKInitStatusListener() {
    @Override
    public void onInitSuccess() {
        Log.e("SDKInitStatus", "onInitSuccess");
    }

    @Override
    public void onInitFail() {
        Log.e("SDKInitStatus", "onInitFail");
    }
});

预加载广告(强烈建议)

我们对Native(NativeVideo)这两种广告形式提供预加载功能,可以在SDK初始化的时候调用以下代码来进行预加载,提高你的广告加载效率。示例代码如下:

MBridgeSDK sdk = MBridgeSDKFactory.getMBridgeSDK();
Map<String, Object> preloadMap = new HashMap<String, Object>();
preloadMap.put(MBridgeConstans.PROPERTIES_LAYOUT_TYPE, MBridgeConstans.LAYOUT_NATIVE);//设置广告形式为native
preloadMap.put(MBridgeConstans.PROPERTIES_UNIT_ID,"your unitId");
preloadMap.put(MBridgeConstans.PROPERTIES_AD_NUM, 1);
preloadMap.put(MBridgeConstans.PLACEMENT_ID, "your placementId");
sdk.preload(preloadMap);

横幅广告接入

横幅广告是移动广告最传统的广告类型,易于实现,用户接受度高,对于超休闲游戏和工具类产品是一种很好的变现形式。

广告效果示意:

初始化MBBannerView

在xml中加入MBBannerView,或动态加载MBBannerView。 注意:动态加载MBBannerView时,SDK不会控制View的大小,所以需要setLayoutParams给view设定宽高。

Example:

mbBannerView.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));

定义MBBannerView,如下代码:

public MBBannerView(Context context){
    this(context,null);
}

public void init(BannerSize bannerSize, String placementId, String unitId);

BannerSize 介绍:

/**
 * sizeType
 */

//表示固定横幅广告尺寸-320dp x 90dp.       
public static final int LARGE_TYPE = 1;

//表示固定横幅广告尺寸-300dp x 250dp.            
public static final int MEDIUM_TYPE = 2; 

//如果设备高度<= 720,则表示固定的横幅广告尺寸-320dp x 50dp;
if device height > 720,Represents the fixed banner ad size - 728pt by 90pt.         
public static final int SMART_TYPE = 3;  

//表示固定横幅广告尺寸-320dp x 50dp.        
public static final int STANDARD_TYPE = 4;   

//根据您的需求定制尺寸.           
public static final int DEV_SET_TYPE = 5;

/**
 * @param 尺寸类型 
 * @param showWidth:您需要的宽度
 * @param showHeight: 您需要的高度
 */
public BannerSize(int sizeType,int showWidth,int showHeight);

MBBannerView功能API介绍

/**
 * @param 是否允许展示关闭按钮.
 */
public void setAllowShowCloseBtn(boolean allowShowCloseBtn)

/**
 自动刷新时间(以秒为单位)设置在10s〜180s的范围内.
 如果设置为0,则不会自动刷新.
 需要在load广告之前调用.
 */
public void setRefreshTime(int refreshTime){
    if(controller != null){
        controller.setRefreshTime(refreshTime);
    }
}

设置回调函数

对于广告请求,需要设置回调的方法有以下几个:

public interface BannerAdListener {
    /**
     * 广告加载失败时调用
     */
    void onLoadFailed(String msg);
    /**
     * 广告加载成功时调用
     */
    void onLoadSuccessed();
    /**
     * 广告展示时调用
     */
    void onLogImpression();      
    /**
     * 广告点击时调用
     */
    void onClick();
    /**
     * 点击广告后离开应用时调用
     */
    void onLeaveApp();
    /**
     * 空实现方法,可以忽略
     */      
     void showFullScreen();
    /**
     * 空实现方法,可以忽略
     */    
     void closeFullScreen();
    /**
     * 广告关闭时调用
     */
     void onCloseBanner();

}

请求并展示广告

方法如下:

public void load()

获取Request ID

SDK在广告展示过程当中产生的问题,开发者可以通过此API将广告ID记录并反馈到Mintegral

/**
* 在loadSuccess之后调用
* @return requestId
*/
public String getRequestId()

释放MBBannerView对象

在适当的时机调用release()方法来释放MBBannerView对象的内存空间

@Override
protected void onDestroy() {
    super.onDestroy();
    if(mbBannerView!= null){
        mbBannerView.release();
    }
}

示例代码

xml:
    <com.mbridge.msdk.out.MBBannerView
        android:id="@+id/mb_banner_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
java:        

    mbBannerView = findViewById(R.id.mb_banner_view);
    mbBannerView(new BannerSize(BannerSize.DEV_SET_TYPE,1294,720), "your placementId", UNIT_ID);
    mbBannerView(true);
    mbBannerView.setRefreshTime(15);
    mbBannerView.setBannerAdListener(new BannerAdListener() {

        @Override
        public void onLoadFailed(String msg) {
            ShowToast("on load failed"+msg);
            Log.e(TAG, "on load failed"+msg);

        }

        @Override
        public void onLoadSuccessed() {

            ShowToast("on load successd");
            Log.e(TAG, "on load successed");
        }

        @Override
        public void onClick() {
            ShowToast("onAdClick");
            Log.e(TAG, "onAdClick");
        }

        @Override
        public void onLeaveApp() {
            ShowToast("leave app");
            Log.e(TAG, "leave app");
        }

        @Override
        public void showFullScreen() {
            ShowToast("showFullScreen");
            Log.e(TAG, "showFullScreen");
        }

        @Override
        public void closeFullScreen() {
            ShowToast("closeFullScreen");
            Log.e(TAG, "closeFullScreen");
        }

        @Override
        public void onLogImpression() {
         ShowToast("onLogImpression");
            Log.e(TAG, "onLogImpression");
        }

        @Override
        public void onCloseBanner() {
            ShowToast("onCloseBanner");
            Log.e(TAG, "onCloseBanner");
        }
    });

    mbBannerView.load();

原生(视频)广告接入

原生广告是时下非常流行的广告类型之一,广告sdk会将素材信息返回给您的app,您可以根据需要对元素进行组装和渲染,进而更贴近您的产品风格,用户体验更好。

注:该广告类型仅对部分开发者提供,如有需要请联系您的AM或致信developer@mintegral.com

广告效果示意:

初始化MBNativeHandler

定义MBNativeHandler,如下代码:

public MBNativeHandler(Map<String, Object> map, Context context);

建议context 使用Application对象

设置回调函数

对于广告请求,需要设置回调的方法有以下几个:

public interface NativeAdListener {
    /**
     * 广告加载成功时调用
     */
    public void onAdLoaded(List<Campaign> campaigns, int template);
    /**
     * 广告加载失败时调用
     */
    public void onAdLoadError(String message);
    /**
     * 广告点击时调用
     */
    public void onAdClick(Campaign campaign);
    /**
     * 点击广告时调用(可以忽略)
     */
    public void onAdFramesLoaded(List<Frame> list);
    /**
     * 广告展示时调用
     */
    public void onLoggingImpression(int adsourceType);
}

设置广告展示和点击之后的回调函数,回调方法有以下几个:

public interface NativeTrackingListener {
    /**
     * 截取显示默认的加载对话框
     */
    public boolean onInterceptDefaultLoadingDialog();
    /**
     * 显示默认对话框时调用
     */
    public void onShowLoading(Campaign campaign);
    /**
     * 默认对话框关闭时调用
     */
    public void onDismissLoading(Campaign campaign);
    /**
     * called when Ads start to redirection
     */
    public void onStartRedirection(Campaign campaign, String url);
    /**
     * 广告开始重定向时调用
     */
    public void onFinishRedirection(Campaign campaign, String url);
    /**
     * 广告完成重定向失败时调用
     */
    public void onRedirectionFailed(Campaign campaign, String url);
    /**
     * 广告开始下载时调用
     */
    public void onDownloadStart(Campaign campaign);
    /**
     * 广告下载完成后调用
     */
    public void onDownloadFinish(Campaign campaign);
    /**
     * 广告下载时调用
     */
    public void onDownloadProgress(int progress);
}

请求广告

Mintegral sdk调用此方法时会优先从缓存里读取广告,如果缓存里有广告,则直接返回,进而提升展示效率;如果缓存里没有,则会向服务器发送广告请求获取广告。 注意:我们不建议开发者对campaign对象做缓存处理 请求方法如下:

public abstract boolean load();

渲染广告

您可以根据onAdLoaded的回调去渲染广告,同时对于原生广告我们会提供MBMediaView去展示图片(视频)广告。MBMediaView最佳设置的展示大小比例为16:9。调用以下方法去展示广告:

public void setNativeAd(Campaign campaign)

广告选择图标

我们提供MBAdChoice来渲染广告标记(Adchoice)。它是一个继承自ImageView的类。调用以下方法去渲染Adchoice。 Tip:我们强烈建议开发者规划合适位置展示此图标,若未展示,会影响您后续的广告收益。

public void setCampaign(Campaign campaign)

注册点击跳转事件

对view设置广告点击跳转事件

//注册可以点击跳转的视图
//如果开发者自己加载广告图片,请在图片加载完成之后调用registerView
public void registerView(View view, Campaign campaign)
public void registerView(View view, List<View> views, Campaign campaign)

释放NaitveHandler对象

在适当的时机调用release()方法来释放NaitveHandler对象的内存空间

@Override
protected void onDestroy() {
    if (mNativeHandle != null) {
        mNativeHandle.release();
    }
}

MBMediaView一些功能API介绍

// 设置MBMediaView是否可以全屏显示 
public void setIsAllowFullScreen(boolean isAllowFullScreen)
// 设置在视频是否允许刷新
public void setAllowVideoRefresh(boolean allowVideoRefresh)
// 设置视频是否要循环播放
public void setAllowLoopPlay(boolean allowLoopPlay)
// 设置当手机方向在水平和垂直之间交替时是否重新加载视频
public void setAllowScreenChange(boolean allowScreenChange)

/**
* 设置视频进度视图可见性
*
* @param isShown
*/
public void setProgressVisibility(boolean isShown)
/**
* 设置声音指示器视图可见性
*
* @param isShown
*/
public void setSoundIndicatorVisibility(boolean isShown)
/**
 * 开启或关闭视频声音
 *
 * @param 开关
 */
public void setVideoSoundOnOff(boolean isOn)


public interface OnMBMediaViewListenerPlus {

    //当mediaview进入全屏模式时调用
    void onEnterFullscreen();

    //当Mediaview退出全屏模式时调用
    void onExitFullscreen();

    //广告开始跳转重定向时调用
    void onStartRedirection(Campaign campaign, String url);

    //广告完成跳转重定向后调用
    void onFinishRedirection(Campaign campaign, String url);

    //广告跳转重定向失败时调用
    void onRedirectionFailed(Campaign campaign, String url);

    //点击广告时调用
    void onVideoAdClicked(Campaign campaign);

     //广告展示时调用
    void onVideoStart();

    //广告视频完全播放完后调用
    void onVideoComplete();
}

示例代码

Map<String, Object> properties = MBNativeHandler.getNativeProperties("your placementId", "your unitId");
//期望获取的广告数量
properties.put(MBridgeConstans.PROPERTIES_AD_NUM, AD_NUM);
//如果想要获取原生广告视频时长,则至少添加如下两对Key之一
properties.put(MBridgeConstans.NATIVE_VIDEO_WIDTH, 720);
properties.put(MBridgeConstans.NATIVE_VIDEO_HEIGHT, 480);
//填写true即可
properties.put(NATIVE_VIDEO_SUPPORT, true);
mNativeHandle = new MBNativeHandler(properties, this);
mNativeHandle.setAdListener(new NativeAdListener() {

@Override
public void onAdLoaded(List<Campaign> campaigns, int template) {
    if (campaigns != null && campaigns.size() > 0) {
        Campaign mCampaign = campaigns.get(0);

        int videoLength = mCampaign.getVideoLength();
        final View view = LayoutInflater.from(NativeActivity.this)
                .inflate(R.layout.mb_demo_mul_big_ad_content, null);
        final ImageView iv = (ImageView) view.findViewById(R.id.mb_demo_iv_image);
        final MBMediaView mbMediaView = (MBMediaView) view.findViewById(R.id.mb_mediaview);
        MBAdChoice adChoice = view.findViewById(R.id.mb_mediaview_adchoice);

        //建议根据campaign.getAdchoiceSizeHeight()和campaign.getAdchoiceSizeWidth()和campaign.adChoiceIconSize设置adChoice的大小
        RelativeLayout.LayoutParams Params =  (RelativeLayout.LayoutParams)view.getLayoutParams();
        Params.height = campaign.getAdchoiceSizeHeight();
        Params.width = campaign.getAdchoiceSizeWidth();
        adChoice.setLayoutParams(Params);
        adChoice.setCampaign(campaign);
        mbMediaView.setNativeAd(mCampaign);

        // 您可以使用自己的视图来显示ImageView,但是如果是视频,则必须使用MBMediaView来显示
        if (!TextUtils.isEmpty(mCampaign.getImageUrl())) {
            new ImageLoadTask(mCampaign.getImageUrl()) {

                @Override
                public void onRecived(Drawable result) {
                    iv.setImageDrawable(result);
                    mNativeHandle.registerView(view, mCampaign);
                }
            }.execute();
         }

        TextView tvAppName = (TextView) view.findViewById(R.id.mb_demo_bt_app_name);
        tvAppName.setText(mCampaign.getAppName());
        List<View> list = new ArrayList<View>();
        list.add(view);
        list.add(tvAppName);
        mNativeHandle.registerView(tvAppName, list, mCampaign);
    }
  }
    .
    .
    .
});

mNativeHandle.setTrackingListener(new NativeTrackingListener() {

    @Override
    public void onStartRedirection(Campaign campaign, String url) {
        Log.e("pro", "onStartRedirection---");
    }

    @Override
    public void onRedirectionFailed(Campaign campaign, String url) {
        Log.e("pro", "onRedirectionFailed---");
    }

    @Override
    public void onFinishRedirection(Campaign campaign, String url) {
        Log.e("pro", "onFinishRedirection---"+url);
    }

    @Override
    public void onDownloadStart(Campaign campaign) {
        Log.e("pro", "start---");
    }

    @Override
    public void onDownloadFinish(Campaign campaign) {
        Log.e("pro", "finish---");
    }

    @Override
    public void onDownloadProgress(int progress) {
        Log.e("pro", "progress----" + progress);
    }

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

    @Override
    public void onShowLoading(Campaign campaign) {

    }

    @Override
    public void onDismissLoading(Campaign campaign) {

    }
});

自动渲染原生广告接入

Mintegral推出的自动渲染原生广告,集成比普通原生广告更加简单,开发者只需提供宽高区域,MB会自动展示与之契合的广告模板和素材。减少开发者对接成本的同时,更高效地利用MB算法输出广告创意,进而提升开发者收入水平。

广告效果示意:

初始化MBNativeAdvancedHandler

public MBNativeAdvancedHandler(Activity activity, String placementId, String unitId)

设置NativeAdvancedAdListener

public interface NativeAdvancedAdListener {
    // 加载失败
    void onLoadFailed(String msg);
    // 广告资源加载成功且WebView渲染成功
    void onLoadSuccessed();
    // 展示成功
    void onLogImpression();
    // 点击广告
    void onClick();
    // 离开app
    void onLeaveApp();
    // 进入全屏 (只有走mraid协议的素材才会有这个回调)
    void showFullScreen();
    // 退出全屏 (只有走mraid协议的素材才会有这个回调)
    void closeFullScreen();
    // 关闭广告试图
    void onClose();
}

其他设置

广告位大小设置

推荐: 320 x 250 比例

mbNativeAdvancedHandler.setNativeViewSize(advancedNativeW,advancedNativeH);

静音设置

静音按钮仅在视频区域在上方的布局方案下才展示(具体比例根据适配规则而定)

// 默认静音
mbNativeAdvancedHandler.setPlayMuteState(MBridgeConstans.REWARD_VIDEO_PLAY_MUTE);

关闭按钮展示设置

/**
 *
 * @param 设置关闭按钮的状态
 */
mbNativeAdvancedHandler.setCloseButtonState(MBMultiStateEnum.positive);

播放规则设置

public interface AutoPlayMode {
    int PLAY_WHEN_NETWORK_IS_WIFI = 1;// wifi状态自动播放
    int PLAY_WHEN_USER_CLICK = 2;// 默认不播放,点击后播放
    int PLAY_WHEN_NETWORK_IS_AVAILABLE = 3;// 有网络即自动播放(默认)
}

mbNativeAdvancedHandler.autoLoopPlay(AutoPlayMode.PLAY_WHEN_NETWORK_IS_AVAILABLE);

H5布局设置

可以通过传入JSON,来自定义广告的展示布局 target可以选择:title、subTitle、button、icon、container、mediaContent

JSON格式举例如下:

{
    "list": [{
        "target": "title",
        "values": {
            "paddingLeft": 15,
            "backgroundColor": "yellow",
            "fontSize": 15,
            "fontFamily": "微软雅黑",
            "color": "red"
        }
    }, {
        "target": "mediaContent",
        "values": {
            "paddingTop": 10,
            "paddingRight": 10,
            "paddingBottom": 10,
            "paddingLeft": 10
        }
    }]
}

加载广告

public void load();

获取Request ID

SDK在广告展示过程当中产生的问题,开发者可以通过此API将广告ID记录并反馈到Mintegral

/**
* 在loadSuccess之后调用
* @return requestId
*/
public String getRequestId()

判断广告是否准备好播放

public boolean isReady()

展示广告

获取广告试图

mAdvancedNativeView = mbNativeAdvancedHandler.getAdViewGroup();

将广告试图添加到指定容器中

container = findViewById(R.id.mb_demo_advanced_native_ac_container);
container.addView(mAdvancedNativeView);

通知SDK

// 当系统的onResume被调用时候,必须要调用MBNativeAdvancedHandler的onResume方法
public void onResume()
// 当系统的onPause被调用时候,必须要调用MBNativeAdvancedHandler的onPause方法  
public void onPause()
public void release()

释放MBNativeAdvancedHandler对象

在适当的时机调用release()方法来释放mbNativeAdvancedHandler对象的内存空间

mbNativeAdvancedHandler.release();

示例代码

mbNativeAdvancedHandler = new MBNativeAdvancedHandler(this,placementId, mUnitId);

mbNativeAdvancedHandler.setNativeViewSize(advancedNativeW,advancedNativeH);
mbNativeAdvancedHandler.setCloseButtonState(MBMultiStateEnum.positive);
mbNativeAdvancedHandler.setPlayMuteState(MBridgeConstans.REWARD_VIDEO_PLAY_MUTE);
mbNativeAdvancedHandler.autoLoopPlay(AutoPlayMode.PLAY_WHEN_NETWORK_IS_AVAILABLE);

String style = "{\n" +
                    "\t\"list\": [{\n" +
                    "\t\t\"target\": \"title\",\n" +
                    "\t\t\"values\": {\n" +
                    "\t\t\t\"paddingLeft\": 15,\n" +
                    "\t\t\t\"backgroundColor\": \"yellow\",\n" +
                    "\t\t\t\"fontSize\": 15,\n" +
                    "\t\t\t\"fontFamily\": \"微软雅黑\",\n" +
                    "\t\t\t\"color\": \"red\"\n" +
                    "\t\t}\n" +
                    "\t}, {\n" +
                    "\t\t\"target\": \"mediaContent\",\n" +
                    "\t\t\"values\": {\n" +
                    "\t\t\t\"paddingTop\": 10,\n" +
                    "\t\t\t\"paddingRight\": 10,\n" +
                    "\t\t\t\"paddingBottom\": 10,\n" +
                    "\t\t\t\"paddingLeft\": 10,\n" +
                    "\t\t}\n" +
                    "\t}]\n" +
                    "}";
JSONObject jsonObject = new JSONObject(style);
mbNativeAdvancedHandler.setViewElementStyle(jsonObject);
mAdvancedNativeView = mbNativeAdvancedHandler.getAdViewGroup();

mbNativeAdvancedHandler.setAdListener(new NativeAdvancedAdListener() {

    @Override
    public void onLoadSuccessed() {
        Toast.makeText(NativeAdvancedShowActivity.this,"onLoadSuccessed:",Toast.LENGTH_LONG).show();
    }

    @Override
    public void onLoadFailed(String msg) {
        Toast.makeText(NativeAdvancedShowActivity.this,"onLoadFailed:" ,Toast.LENGTH_LONG).show();
    }

    @Override
    public void onLogImpression() {
        Toast.makeText(NativeAdvancedShowActivity.this,"onLogImpression:" ,Toast.LENGTH_LONG).show();
    }

    @Override
    public void onClick() {
        Toast.makeText(NativeAdvancedShowActivity.this,"onClick:" ,Toast.LENGTH_LONG).show();
    }

    @Override
    public void onLeaveApp() {
        Toast.makeText(NativeAdvancedShowActivity.this,"onLeaveApp:" ,Toast.LENGTH_LONG).show();
    }

    @Override
    public void showFullScreen() {
        Toast.makeText(NativeAdvancedShowActivity.this,"showFullScreen:" ,Toast.LENGTH_LONG).show();
    }

    @Override
    public void closeFullScreen() {
        Toast.makeText(NativeAdvancedShowActivity.this,"closeFullScreen:" ,Toast.LENGTH_LONG).show();
    }

    @Override
    public void onClose() {
        Toast.makeText(NativeAdvancedShowActivity.this,"onDismiss:" ,Toast.LENGTH_LONG).show();
    }
}

private void show(){
    if (mAdvancedNativeView != null && mAdvancedNativeView.getParent() == null) {
        container.addView(mAdvancedNativeView);
    }
}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.mb_demo_advanced_native_ac_preload:
            mbNativeAdvancedHandler.load();
            break;
        case R.id.mb_demo_advanced_native_ac_show:
            show();
            break;
        case R.id.mb_demo_advanced_native_ac_release:
            mbNativeAdvancedHandler.release();
            break;
    }
}

@Override
protected void onResume() {
    super.onResume();
    if(mbNativeAdvancedHandler != null){
        mbNativeAdvancedHandler.onResume();
    }
}

@Override
protected void onPause() {
    super.onPause();
    if(mbNativeAdvancedHandler != null){
        mbNativeAdvancedHandler.onPause();
    }
}

@Override
protected void onDestroy() {
    if(mbNativeAdvancedHandler != null){
        mbNativeAdvancedHandler.release();
    }
    super.onDestroy();
}

激励视频广告接入

激励视频是Mintegral平台效果非常好的广告形式,用户可以通过观看一段广告视频而获取奖励,由于广告视频素材非常具有创意和吸引力,因此会引起很多用户的兴趣,进而下载广告产品

广告效果示意:

硬件加速

在application节点下修改"android:hardwareAccelerated"的属性值:

<application
    ...
    android:hardwareAccelerated="true">
    ...
    ...
    ...
    ...

</application>

初始化MBRewardVideoHandler

public MBRewardVideoHandler(Context context, String placementId, String unitId)

设置RewardVideoListener

注:对于 void onAdClose(boolean isCompleteView, String rewardName, float rewardAmout) ,此方法里的 rewardName、rewardAmout 这两个参数是无意义的,且我们不会下发奖励。因此,你可以根据 isCompleteView 来决定是否给用户下发奖励。

public interface RewardVideoListener {
    /**
     * 在广告加载完毕并可以展示时调用
     * @param unitId
     */
    void onVideoLoadSuccess(String placementId, String unitId);
    /**
     * 在广告加载完毕但不可以展示时调用
     * @param unitId
     */
    void onLoadSuccess(String placementId, String unitId);
    /**
     * 广告加载失败时调用
     * @param 错误信息
     */
    void onVideoLoadFail(String errorMsg);
    /**
     * 广告展示时调用
     */
    void onAdShow();
    /**
     * 广告关闭时调用
     * @param isCompleteView  如果为true,则表示已完全观看了视频
     * @param rewardName   完全观看视频后的奖励名称
     * @param rewardAmout  完全观看视频后的奖励金额
     */
    void onAdClose(boolean isCompleteView, String rewardName, float rewardAmout);
    /**
     * 广告显示失败时调用
     * @param 错误信息
     */
    void onShowFail(String errorMsg);
    /**
     * 点击广告时调用
     * @param unitId
     */
    void onVideoAdClicked(String placementId, String unitId);
    /**
     * 广告播放结束后调用
     * @param unitId
     */
    void onVideoComplete(String placementId, String unitId);
    /**
     * 显示广告落地页时调用
     * @param unitId
     */
    void onEndcardShow(String placementId, String unitId);

静音设置

在调用load之前调用API

//静音
mMBRewardVideoHandler.playVideoMute(MBridgeConstans.REWARD_VIDEO_PLAY_MUTE);
//默认非静音
mMBRewardVideoHandler.playVideoMute(MBridgeConstans.REWARD_VIDEO_PLAY_NOT_MUTE);

Reward Plus 设置

必须在load之前调用 该API仅表示接受投放Reward plus的广告,下发奖励依然依赖SDK中 onAdClose() 回调的奖励数量货币信息参数(RewardName,RewardAmout)进行奖励发放。

public void setRewardPlus(boolean isRewardPlues)//在load之前调用,默认为false
//示例:
mMBRewardVideoHandler.setRewardPlus(true);

加载广告和展示广告

建议开发者在展示广告之前,提前进行广告加载(如初始化时或每次关闭广告后),进而给素材等资源的下载提供时间,减少用户在展示广告时等待的时间,提高用户体验和广告时间。调用以下方法来进行广告的加载和展示:

public void load()
public void show(String rewardId)//rewardId默认传1就好
public void show(String rewardId, String userId) //userId在服务器回调中用到

获取Request ID

SDK在广告展示过程当中产生的问题,开发者可以通过此API将广告ID记录并反馈到Mintegral

/**
* 在loadSuccess之后调用
* @return requestId
*/
public String getRequestId()

判断广告是否准备好播放

通过该方法来判断视频素材已经可以达到播放状态,建议在可播放情况下才进行广告的展示。

//检查广告是否准备好展示
public boolean isReady()

示例代码

MBRewardVideoHandler mMBRewardVideoHandler = new MBRewardVideoHandler(this, "your placementId", "your unitId");
mMBRewardVideoHandler.setRewardVideoListener(new RewardVideoListener() {

    @Override
    public void onLoadSuccess(String placementId, String unitId) {
        Log.e(TAG, "onLoadSuccess: " + (TextUtils.isEmpty(placementId) ? "" : placementId) + "  " + unitId);
        Toast.makeText(getApplicationContext(), "onLoadSuccess()", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onVideoLoadSuccess(String placementId, String unitId) {
        Log.e(TAG, "onVideoLoadSuccess: " + (TextUtils.isEmpty(placementId) ? "" : placementId) + "  " + unitId);
        Toast.makeText(getApplicationContext(), "onVideoLoadSuccess()", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onVideoLoadFail(String errorMsg) {
        Log.e(TAG, "onVideoLoadFail errorMsg:"+errorMsg);
        Toast.makeText(getApplicationContext(), errorMsg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onShowFail(String errorMsg) {
        Log.e(TAG, "onShowFail=" + errorMsg);
        Toast.makeText(getApplicationContext(), "errorMsg:" + errorMsg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onAdShow() {
        Log.e(TAG, "onAdShow");
        Toast.makeText(getApplicationContext(), "onAdShow", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onAdClose(boolean isCompleteView, String RewardName, float RewardAmout) {
        Log.e(TAG, "onAdClose rewardinfo :" + "RewardName:" + RewardName + "RewardAmout:" + RewardAmout+" isCompleteView:"+isCompleteView);
        if(isCompleteView){
            Toast.makeText(getApplicationContext(),"onADClose:"+isCompleteView+",rName:"+RewardName +",RewardAmout:"+RewardAmout,Toast.LENGTH_SHORT).show();
            showDialog(RewardName, RewardAmout);
        }else{
            Toast.makeText(getApplicationContext(),"onADClose:"+isCompleteView+",rName:"+RewardName +",RewardAmout:"+RewardAmout,Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onVideoAdClicked(String placementId, String unitId) {
        Log.e(TAG, "onVideoAdClicked : " + (TextUtils.isEmpty(placementId) ? "" : placementId) + "  " + unitId);
        Toast.makeText(getApplicationContext(), "onVideoAdClicked", Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onVideoComplete(String placementId, String unitId) {
        Log.e(TAG, "onVideoComplete : " + (TextUtils.isEmpty(placementId) ? "" : placementId) + "  " + unitId);
        Toast.makeText(getApplicationContext(), "onVideoComplete", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onEndcardShow(String placementId, String unitId) {
        Log.e(TAG, "onEndcardShow : " + (TextUtils.isEmpty(placementId) ? "" : placementId) + "  " + unitId);
        Toast.makeText(getApplicationContext(), "onEndcardShow", Toast.LENGTH_SHORT).show();
    }

});
public class TestActivity extends Activity  implements View.OnClickListener{
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        ...
        ...
    }

    ...
    ...
    ...
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.bt_load:
                mMBRewardVideoHandler.load();
                break;
            case R.id.bt_show:
                if (mMBRewardVideoHandler.isReady()) {
                    mMBRewardVideoHandler.show("your rewardId", "your userId");
                }
                break;
        }
    }
}

设置服务端回调

您可以根据需要选择通过sdk或者服务端回调信息。若需要设置服务端回调,可以在后台添加callbackURL,Mintegral会在视频播放完成后调用callbackurl给予信息的回调。

1.创建广告位时设置回调方式

在用户完成任务之后,Mintegral服务器会向开发者服务器发送请求(callbackURL)来告知开发者服务器用户此次任务所获得的积分。对于开发者来说,服务端回调更加安全。

2.对于声明callbackUrl,只需要开发者修改域名部分

例如: https://www.sampleurl.com/mintegral?user_id={user_id}&trans_id={trans_id}&reward_amount={reward_amount}&reward_name={reward_name}&sign={sign}&unit_id={unit_id}&extra={extra}

3.Mintegral Server获知到该user_id增加积分后,通过callback url通知开发者服务端。callback url附加的参数如下:

参数

说明

user_id

用户ID,由开发者设置

reward_amount

用户应该获得的积分

reward_name

积分的名称

unit_id

广告位ID

trans_id

传输ID,Mintegral服务端生成,具有唯一性,

sign

加密标识 MD5(user_id_reward_amount_trans_id_security_key)

4.开发者服务端一旦收到postback后,需给Mintegral服务端返回200或403。

200 means:User has been rewarded successfully.

403 means:abnormal 

1.sign does not match

2.user_id does not exist

5.Mintegral Server发起Postback后,若超时(20秒)无响应,则在24小时内每隔5分钟重试一次。

插屏图片广告接入

插屏图片广告会在屏幕上展示一条大图广告,用户可以通过关闭按钮来关闭广告。

注:该广告类型仅对部分开发者提供,如有需要请联系您的AM或致信 developer@mintegral.com。此外,Mintegral推出了全新的InterstitialVideo广告类型,相比普通Interstitial广告会有更好的视觉效果和体验。

广告效果示意

创建MBInterstitialHandler对象

public MBInterstitialHandler(Context context, Map<String, Object> params)

设置InterstitialListener

public interface InterstitialListener {

    /**
     * 广告请求成功
     */
    public void onInterstitialLoadSuccess();
    /**
     * 广告请求失败
     * @param errorMsg 失败原因
     */
    public void onInterstitialLoadFail(String errorMsg);
     /**
     * 成功展示插页式广告
     */
    public void onInterstitialShowSuccess();
    /**
     * 展示插页式广告失败
     * @param errorMsg 失败原因
     */
    public void onInterstitialShowFail(String errorMsg);
    /**
     * 插页式广告关闭
     */
    public void onInterstitialClosed();
    /**
     * 插页式广告点击
     */
    public void onInterstitialAdClick();

}

加载广告和展示广告

public void preload()//预加载
public void show()//展示

获取Request ID

SDK在广告展示过程当中产生的问题,开发者可以通过此API将广告ID记录并反馈到Mintegral

/**
* 在loadSuccess之后调用
* @return requestId
*/
public String getRequestId()

示例代码

HashMap<String, Object> hashMap = new HashMap<String, Object>();    
hashMap.put(MBridgeConstans.PLACEMENT_ID, "your placementId");
hashMap.put(MBridgeConstans.PROPERTIES_UNIT_ID, "your unitId");
mInterstitialHandler = new MBInterstitialHandler(this, hashMap);

mInterstitialHandler.setInterstitialListener(new InterstitialListener() {

    @Override
    public void onInterstitialShowSuccess() {
        Log.e(TAG, "onInterstitialShowSuccess");
    }

    @Override
    public void onInterstitialShowFail(String errorMsg) {
        Log.e(TAG, "onInterstitialShowFail errorMsg:" + errorMsg);
    }

    @Override
    public void onInterstitialLoadSuccess() {
        Log.e(TAG, "onInterstitialLoadSuccess");
        Toast.makeText(getApplicationContext(), "onInterstitialLoadSuccess", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onInterstitialLoadFail(String errorMsg) {
        Log.e(TAG, "onInterstitialLoadFail errorMsg:" + errorMsg);
    }

    @Override
    public void onInterstitialClosed() {
        Log.e(TAG, "onInterstitialClosed");
    }

    @Override
    public void onInterstitialAdClick() {
        Log.e(TAG, "onInterstitialAdClick");
    }
});
public class TestActivity extends Activity  implements View.OnClickListener{
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        ...
        ...
    }

    ...
    ...
    ...
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.bt_preload:

                if (mInterstitialHandler != null) {
                    showLoadding();
                    mInterstitialHandler.preload();
                }
                break;
            case R.id.bt_show:

                if (mInterstitialHandler != null) {
                    mInterstitialHandler.show();
                }
                break;
        }
    }
}

插屏视频广告接入

插屏视频广告是插屏图片广告的升级版本,展示广告时会给用户展示一个全屏或半屏的视频,通过更有吸引力的视频提高用户的兴趣。

广告效果示意

创建MBInterstitialVideoHandler对象

public MBInterstitialVideoHandler(Context context, String placementId, String unitId)

设置InterstitialVideoListenr

public interface InterstitialVideoListenr  {

    /**
     * 广告加载完成但无法播放时调用
     * @param unitId
     */
    void onLoadSuccess(String placementId, String unitId);
    /**
     * 在广告加载完毕并准备好播放时调用
     * @param unitId
     */
    void onVideoLoadSuccess(String placementId, String unitId);
    /**
     * 广告加载失败
     * @param errorMsg 错误信息
     */
    void onVideoLoadFail(String errorMsg);
    /**
     * 广告展示时调用
     */
    void onAdShow();
    /**
     * 广告关闭时调用
     * @param isCompleteView如果为true,则表示已完全观看了视频
     */
    void onAdClose(boolean isCompleteView);
    /**
     * 广告播放失败
     * @param errorMsg 错误信息
     */
    void onShowFail(String errorMsg);
    /**
     * 广告点击时调用
     * @param unitId
     */
    void onVideoAdClicked(String placementId, String unitId);
    /**
     * 广告播放完成时调用
     * @param unitId
     */
    void onVideoComplete(String placementId, String unitId);
    /**
     * 如果开发人员设置了IV奖励,则在广告关闭时调用.
     *
     * @param isComplete 是否完全观看
     * @param 奖励弹窗的出现时机状态
     */
    void onAdCloseWithIVReward(boolean isComplete, int rewardAlertStatus);
    /**
     * 展示广告落地页时调用
     * @param unitId
     */
    void onEndcardShow(String placementId, String unitId);

}

静音设置

在调用load之前调用API

//静音
mbInterstitalVideoHandler.playVideoMute(MBridgeConstans.REWARD_VIDEO_PLAY_MUTE);
//默认非静音
mbInterstitalVideoHandler.playVideoMute(MBridgeConstans.REWARD_VIDEO_PLAY_NOT_MUTE);

提示用户观看视频或试完完毕可获取奖励的弹窗的设置

在调用load之前调用API

/**
 * (可选)
 * 调用此方法后,当视频/playable播放或者用户点击关闭按钮时,会弹出一个窗口,提示用户观看视频或试完完毕可获取奖励。
 * 此方法接受两个参数。
 * 
 * @param rewardType 表示弹窗的时机。
 *                   一共两个预设值可选。
 *                   com.mbridge.msdk.MBridgeConstans#IVREWARD_TYPE_CLOSEMODE,此值表示当用户在点击关闭按钮时弹窗。
 *                   com.mbridge.msdk.MBridgeConstans#IVREWARD_TYPE_PLAYMODE,此值表示在视频或playable播放过程中弹窗。
 * 
 * @param value 预设定的值,此值可以选择传入整型或者浮点型的值。
 *              当传入的值是整型时,代表具体秒数被设定,如播放视频多少秒后弹窗。默认为5秒,取值为在0~100之间的整数。
 *              当传入的值是浮点型时,代表百分比值被设定,如播放视频百分之几后弹窗。默认为0.8,取值为0.0~1.0之间的小数。
 *               
 *              根据第一个参数rewardType(弹窗的时机)不同,代表含义如下:
 *              若弹窗时机为IVREWARD_TYPE_CLOSEMODE :表示在设定值value之前,当用户点击了关闭按钮后,会弹窗提示用户。若在设定值value之后,用户点击了关闭按钮也不会出弹窗。
 *              若弹窗时机为IVREWARD_TYPE_PLAYMODE : 表示当视频或者playable播放到设定值value时,将主动弹窗提示用户。
 *                   
 */
public void setIVRewardEnable(int rewardType, int value)//设置reward mode
public void setIVRewardEnable(int rewardType, double value)//设置reward mode

示例代码

mbInterstitalVideoHandler.setIVRewardEnable(MBridgeConstans.IVREWARD_TYPE_CLOSEMODE, 30);

自定义奖励弹窗的展示内容

最好在调用load之前调用API

/**
 * (可选)
 *  调用此方法可以设置奖励弹窗的文字信息。
 *  
 * @param confirmTitle   弹窗中需要显示的标题文字。
 * @param confirmContent 弹窗中需要显示的主题文字信息。
 * @param cancelText     取消按钮的文字信息。
 * @param confirmText    确认按钮的文字信息。
 *                   
 */
public void setAlertDialogText(String confirmTitle, String confirmContent, String confirmText, String cancelText)//自定义奖励弹窗的展示内容

示例代码

mbInterstitalVideoHandler.setAlertDialogText("Continue?", "If you continue, you can have reward when ad close.", "Continue", "Cancel");

加载广告和展示广告

public void load()//加载广告
public void show()//展示广告

获取Request ID

SDK在广告展示过程当中产生的问题,开发者可以通过此API将广告ID记录并反馈到Mintegral

/**
* 在loadSuccess之后调用
* @return requestId
*/
public String getRequestId()

判断广告是否准备好播放

通过该方法来判断视频素材已经可以达到播放状态,建议在可播放情况下才进行广告的展示。

//检查广告是否准备好播放
public boolean isReady()

示例代码

MBInterstitialVideoHandler mbInterstitalVideoHandler = new MBInterstitialVideoHandler(this, "your placementId", "your unitid");  

mbInterstitalVideoHandler.setInterstitialVideoListener(new InterstitialVideoListener() {

    @Override
    public void onLoadSuccess(String placementId, String unitId) {
        Log.e(TAG, "onLoadSuccess:"+Thread.currentThread());
        Toast.makeText(getApplicationContext(), "onLoadSuccess()", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onVideoLoadSuccess(String placementId, String unitId) {
        Log.e(TAG, "onVideoLoadSuccess:"+Thread.currentThread());
        hideLoadding();
        Toast.makeText(getApplicationContext(), "onVideoLoadSuccess()", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onVideoLoadFail(String errorMsg) {
        Log.e(TAG, "onVideoLoadFail errorMsg:"+errorMsg);
        hideLoadding();
        Toast.makeText(getApplicationContext(), errorMsg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onShowFail(String errorMsg) {
        Log.e(TAG, "onShowFail=" + errorMsg);
        Toast.makeText(getApplicationContext(), "errorMsg:" + errorMsg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onAdShow() {
        Log.e(TAG, "onAdShow");
        Toast.makeText(getApplicationContext(), "onAdShow", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onAdClose(boolean isCompleteView) {
        Log.e(TAG, "onAdClose rewardinfo :" +  "isCompleteView:"+isCompleteView);
        Toast.makeText(getApplicationContext(),"onADClose:"+isCompleteView,Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onVideoAdClicked(String placementId, String unitId) {
        Log.e(TAG, "onVideoAdClicked");
        Toast.makeText(getApplicationContext(), "onVideoAdClicked", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onVideoComplete(String placementId, String unitId) {
        Log.e(TAG,"onVideoComplete");
        Toast.makeText(getApplicationContext(),"onVideoComplete",Toast.LENGTH_SHORT).show();
    }

    /**

    * 如果您调用了MBInterstitialVideoHandler#setIVRewardEnable(int, int)这个函数
     * 此回调将会响应.
     * 您可以根据返回值决定是否给用户奖励.
     *
     * @param isComplete 此参数表示视频或可播放内容是否已完成播放.
     *
     * @param rewardAlertStatus非页内广告视频奖励提醒窗口状态.
     *                          此参数用于指示警报对话框的状态.
     *                          如果对话框没有展示, 它将返回{@link MBridgeConstans#IVREWARDALERT_STATUS_NOTSHOWN}
     *                          如果用户单击对话框的继续按钮,它将返回 {@link MBridgeConstans#IVREWARDALERT_STATUS_CLICKCONTINUE}
     *                          如果用户单击对话框的取消按钮,它将返回 {@link MBridgeConstans#IVREWARDALERT_STATUS_CLICKCANCEL}
     *
     */
    @Override
    public void onAdCloseWithIVReward(boolean isComplete, int rewardAlertStatus) {

        Log.e(TAG, "onAdCloseWithIVReward");
        Log.e(TAG, isComplete ? "Video playback/playable is complete." : "Video playback/playable is not complete.");

        if (rewardAlertStatus == MBridgeConstans.IVREWARDALERT_STATUS_NOTSHOWN) {
            Log.e(TAG,"The dialog is not show.");
        }

        if (rewardAlertStatus == MBridgeConstans.IVREWARDALERT_STATUS_CLICKCONTINUE) {
            Log.e(TAG,"The dialog's continue button clicked.");
        }

        if (rewardAlertStatus == MBridgeConstans.IVREWARDALERT_STATUS_CLICKCANCEL) {
            Log.e(TAG,"The dialog's cancel button clicked.");
        }
    }

    @Override
    public void onEndcardShow(String placementId, String unitId) {
        Log.e(TAG,"onEndcardShow");
        Toast.makeText(getApplicationContext(),"onEndcardShow",Toast.LENGTH_SHORT).show();
    }

});
public class TestActivity extends Activity  implements View.OnClickListener{
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        ...
        ...
    }

    ...
    ...
    ...
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.bt_load:
                showLoadding();
                if (mbInterstitalVideoHandler != null) {

                    /**
                     * 可选.
                     *
                     * 注意 : 请确保您在{@link MBInterstitialVideoHandler#load()}方法之前调用.
                     *
                     * 设置插页式视频的奖励模式.
                     *
                     * 如果希望IV具有奖励功能,请调用此方法.
                     * 或用户单击关闭按钮,
                     * a {@link android.app.AlertDialog} 将在设定的时间出现,
                     * 提醒用户观看或玩游戏可获得奖励.
                     *
                     * 当IV关闭时将被调用 {@link InterstitialVideoListener#onAdCloseWithIVReward(boolean, int)},
                     * 您可以根据该回调决定是否给予奖励.
                     *
                     * @param rewardType设置奖励弹框显示时间.
                     *                 {@link MBridgeConstans#IVREWARD_TYPE_CLOSEMODE} 当用户关闭视频或试玩广告时使用.
                     *                 {@link MBridgeConstans#IVREWARD_TYPE_PLAYMODE} 在播放视频几秒钟后获得奖励.
                     *
                     * @param value设置插页式视频奖励模式类型的值.
                     *              在PLAYMODE中,此值表示播放几秒钟后会出现{@link android.app.AlertDialog}.
                     *              在CLOSEMODE中,此值表示当用户在设置时间之前单击关闭按钮时,将显示{@link android.app.AlertDialog}.
                     *
                     *              你可以设定 {@link Integer} or {@link Double},
                     *              整数值表示秒,double值表示百分比.
                     *              整数值范围是0-100,双精度值范围是0.0-1.0.
                     *              默认值为5s或80%(0.8).
                     */
                    mbInterstitalVideoHandler.setIVRewardEnable(MBridgeConstans.IVREWARD_TYPE_CLOSEMODE, 30);

                    /**
                     * 可选.
                     *
                     * 要自定义奖励提醒对话框显示文本时,请调用此方法.
                     *
                     * @param ConfirmTitle标题文本的奖励对话框.
                     * @param 确认对话框的confirmContent内容文本.
                     * @param cancelText取消奖励对话框的按钮文本.
                     * @param ConfirmText确认奖励对话框的按钮文字.
                     */
                    mbInterstitalVideoHandler.setAlertDialogText("Continue?", "If you continue, you can have reward when ad close.", "Continue", "Cancel");

                    mbInterstitalVideoHandler.load();
                }
                break;
            case R.id.bt_show:
                if (mbInterstitalVideoHandler != null && mbInterstitalVideoHandler.isReady()) {
                    mbInterstitalVideoHandler.show();
                }
                break;
            case R.id.bt_mute:
                if (mbInterstitalVideoHandler != null) {
                    Toast.makeText(getApplicationContext(),"bt_mute",Toast.LENGTH_SHORT).show();
                    mbInterstitalVideoHandler.playVideoMute(MBridgeConstans.REWARD_VIDEO_PLAY_MUTE);
                }
                break;
            case R.id.bt_unmute:
                if (mbInterstitalVideoHandler != null) {
                    Toast.makeText(getApplicationContext(),"bt_unmute",Toast.LENGTH_SHORT).show();
                    mbInterstitalVideoHandler.playVideoMute(MBridgeConstans.REWARD_VIDEO_PLAY_NOT_MUTE);
                }
                break;
        }
    }
}

交互式广告接入

交互式广告是Mintegral推出的全新广告形态,通过该形式用户可以实际参与一个精心设计的交互广告(比如试玩一个游戏Demo),进而大大提升转化效果。当前广告内容以Playable为主。

注:该广告类型仅对部分开发者提供,如有需要请联系您的AM或致信developer@mintegral.com

广告效果示意:

创建MBInteractiveHandler对象

public MBInteractiveHandler(Context context, Map<String, Object> params)

设置InteractiveAdsListener

public interface InteractiveAdsListener {

    /**
     * 广告加载成功
     * @param restype
     */
    void onInteractivelLoadSuccess(int restype);

    /**
     * 资源加载成功
     */
    void onInterActiveMaterialLoadSuccess();

    /**
     * 广告加载失败
     * @param errorMsg
     */
    void onInteractiveLoadFail(String errorMsg);

    /**
     * 广告展示成功
     */
    void onInteractiveShowSuccess();

    /**
     * 试玩广告播放失败
     * @param errorMsg
     */
    void onInteractiveShowFail(String errorMsg);

    /**
     * 广告关闭
     */
    void onInteractiveClosed();

    /**
     * 广告点击
     */
    void onInteractiveAdClick();

    /**
     * 当交互式广告成功显示并可以播放时调用
     * @isComplete 表示互动广告能否完全播放
     */
    void onInteractivePlayingComplete(boolean isComplete);
}

加载广告和展示广告

建议开发者在展示广告之前,提前进行广告加载(如初始化时或每次关闭广告后),进而给素材等资源的下载提供时间,减少用户在展示广告时等待的时间,提高用户体验和广告时间。调用以下方法进行广告的加载和展示:

public void load()//加载广告
public void show()//展示广告

获取Request ID

SDK在广告展示过程当中产生的问题,开发者可以通过此API将广告ID记录并反馈到Mintegral

/**
* 在loadSuccess之后调用
* @return requestId
*/
public String getRequestId()

示例代码

HashMap<String, Object> hashMap = new HashMap<String, Object>();
hashMap.put(MBridgeConstans.PLACEMENT_ID, "your placementId");
hashMap.put(MBridgeConstans.PROPERTIES_UNIT_ID, "your unitid");
mbInteractiveHandler = new MBInteractiveHandler(this, hashMap);

mbInteractiveHandler.setInteractiveAdsListener(new InteractiveAdsListener() {
    @Override
    public void onInteractivelLoadSuccess(int restype) {
        Log.e(TAG, "onInteractivelLoadSuccess");
        Toast.makeText(getApplicationContext(), "onInteractivelLoadSuccess()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onInterActiveMaterialLoadSuccess() {
        Toast.makeText(getApplicationContext(), "onInterActiveMaterialloadSuccess()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onInteractiveLoadFail(String errorMsg) {
        Log.e(TAG, "onInteractiveLoadFail");
        Toast.makeText(getApplicationContext(), "onInteractiveLoadFail()"+errorMsg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onInteractiveShowSuccess() {
        Log.e(TAG, "onInteractiveShowSuccess");
        Toast.makeText(getApplicationContext(), "onInteractiveShowSuccess()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onInteractiveShowFail(String errorMsg) {
        Log.e(TAG, "onInteractiveShowFail " + errorMsg);
        Toast.makeText(getApplicationContext(), "onInteractiveShowFail()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onInteractiveClosed() {
        Log.e(TAG, "onInteractiveClosed");
    }

    @Override
    public void onInteractiveAdClick() {
        Log.e(TAG, "onInteractiveAdClick");
    }
});
public class TestActivity extends Activity  implements View.OnClickListener{
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        ...
        ...
    }

    ...
    ...
    ...
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.bt_load:
                if (mbInteractiveHandler != null) {
                    showLoadding();
                    mbInteractiveHandler.load();
                }
                break;
            case R.id.bt_show:
                if (mbInteractiveHandler != null) {
                    mbInteractiveHandler.show();
                }
                break;
        }
    }
}

开屏广告接入

开屏式广告是目前比较流行的广告形式之一。这种类型比较适合投放电商、品牌类广告,流量接入上也很适合接入应用类流量。用户可以点击广告跳转到广告落地页,或者点击右上角的“跳过”按钮,跳转到app内容首页。开屏广告会在您的应用开启时加载,展示完毕后自动关闭并进入您的应用主界面。

分类:开屏广告分为半屏和全屏,在半屏情况下,支持定义logo图片,同时也支持横竖屏。

广告效果示意:

配置Androidmanifest.xml文件

需要在相应的activity里加上如下配置:

android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="false"
android:screenOrientation="竖屏或者横屏"

其中screenOrientation可以自定义

创建MBSplashHandler对象

/**
 * @param placementId placementId
 * @param unitId  ad unit
 */
public MBSplashHandler(String placementId, String unitId)

/**
 * @param placementId placementId
 * @param unitId  ad unit
 * @param canSkip 是否允许用户跳过启动广告
 * @param countDownS 广告播放的时间。 必须在2-10秒内
 */
public MBSplashHandler(String placementId, String unitId, boolean canSkip, int countDownS)

/**
 * @param placementId placementId
 * @param unitId  ad unit
 * @param 是否允许用户跳过启动广告
 * @param countDownS 广告播放的时间。 必须在2-10秒内
 * @param orientation 广告展示时的屏幕方向
 * @param logoSizeH logo 高度
 * @param logoSizeW logo 宽度
 */
public MBSplashHandler(String placementId, String unitId, boolean canSkip, int countDownS, int orientation, int logoSizeH, int logoSizeW)

设置加载超时时间(可选)

loadTimeOutMs:SDK在指定时间内没有完成广告加载(即加载超时),则直接关闭。单位是s。

 public void setLoadTimeOut(long loadTimeOutS)

其他设置

设置logo的size、设置方向。 注: 1. LogoView的size不能超过屏幕的 0.25 2. orientation默认是竖屏

public void setLogoView(View bottomView,int width,int height)

/**
 * @param orientation 方向可以选择如下
 *        Configuration.ORIENTATION_PORTRAIT
 *        Configuration.ORIENTATION_LANDSCAPE
 */
public void setOrientation(int orientation)

设置MBSplashLoadListener

public interface MBSplashLoadListener {
    void onLoadSuccessed(int reqType);
    void onLoadFailed(String msg,int reqType);
}

注:reqType为1,表示preLoad的回调;2表示loadAndShow的回调

设置MBSplashShowListener

public interface MBSplashShowListener {

    /**
     *广告展示成功
     */
    void onShowSuccessed();

    /**
     *广告展示失败
     * @param msg
     */
    void onShowFailed(String msg);

    /**
     *广告点击
     */
    void onAdClicked();

    /**
     * 开屏页面关闭
     * @param type 开屏页面关闭的方式:1 是用户点击跳过;2 是倒计时结束 3 点击广告后跳出app
     */
    void onDismiss(int type);

    /**
     * 倒计时回调
     * @param millisUntilFinished 距离倒计时结束的时间,单位ms
     */
    void onAdTick(long millisUntilFinished);
}

加载广告和展示广告

我们提供两种请求展示广告方式:

先预请求广告,再在合适的时机去展示广告

public void preLoad()
public void show( ViewGroup container)// container:承载广告的容器

实时请求并展示广告

public void loadAndShow( ViewGroup container)

获取Request ID

SDK在广告展示过程当中产生的问题,开发者可以通过此API将广告ID记录并反馈到Mintegral

/**
* 在loadSuccess之后调用
* @return requestId
*/
public String getRequestId()

判断广告是否准备好播放

通过该方法来判断视频素材已经可以达到播放状态,建议在可播放情况下才进行广告的展示。

public boolean isReady()

注:建议在合适的时机preload,生命周期内preload时机最好不要距离show时间过长,建议不超过30分钟,调用preload后,在show场景时可以通过isready判断,如果ready则调用show。如果不ready可以调用 load&show。

通知SDK

public void onResume()//通知我们页面可以显示出来
public void onPause()//通知我们页面可以被隐藏
public void onDestroy()//通知我们销毁资源

示例代码

mbSplashHandler = new MBSplashHandler("your placementId", mUnitId);
mbSplashHandler.setLoadTimeOut(loadTimeOut);
Button textView = new Button(this);
textView.setText("logo");
mbSplashHandler.setLogoView(textView, 100, 100);

mbSplashHandler.setSplashLoadListener(new MBSplashLoadListener() {
    @Override
    public void onLoadSuccessed(int reqType) {
        Log.e(TAG, "onLoadSuccessed" + reqType);
        Toast.makeText(SplashActivity.this,"onLoadSuccessed:" + reqType,Toast.LENGTH_LONG).show();
    }

    @Override
    public void onLoadFailed(String msg, int reqType) {
        Log.e(TAG, "onLoadFailed" + msg + reqType);
        Toast.makeText(SplashActivity.this,"onLoadFailed:" + reqType,Toast.LENGTH_LONG).show();
    }
});

mbSplashHandler.setSplashShowListener(new MBSplashShowListener() {
    @Override
    public void onShowSuccessed() {
        Log.e(TAG, "onShowSuccessed");
    }

    @Override
    public void onShowFailed(String msg) {
        Log.e(TAG, "onShowFailed" + msg);
    }

    @Override
    public void onAdClicked() {
        Log.e(TAG, "onAdClicked");
    }

    @Override
    public void onDismiss(int type) {
        Log.e(TAG, "onDismiss" + type);
        finish();
    }

    @Override
    public void onAdTick(long millisUntilFinished) {
        Log.e(TAG, "onAdTick" + millisUntilFinished);
    }
});

public void onClick(View v) {

    switch (v.getId()) {

        case R.id.mb_demo_splash_ac_load_show:

            mbSplashHandler.loadAndShow(container);
            break;

        case R.id.mb_demo_splash_ac_preload:

            mbSplashHandler.preLoad();
            break;

        case R.id.mb_demo_splash_ac_show:

            if (mbSplashHandler.isReady()) {
                mbSplashHandler.show(container);
            } else {
                Log.e(TAG, "isready is false");
            }
            break;
    }
}

@Override
protected void onResume() {
    super.onResume();
    if(mbSplashHandler != null){
        mbSplashHandler.onResume();
    }
}

@Override
protected void onPause() {
    super.onPause();
    if(mbSplashHandler != null){
        mbSplashHandler.onPause();
    }
}

@Override
protected void onDestroy() {
    if(mbSplashHandler != null){
        mbSplashHandler.onDestroy();
    }
    super.onDestroy();
}

Test ID

您在测试期间所获取的广告均为Mintegral的正式广告,因此会受到算法智能优化的影响,如果测试期间经常load失败,返回EXCEPTION_RETURN_EMPTY,可使用以下测试id进行测试。

AppKey

7c22942b749fe6a6e361b675e96b3ee9

AppID

118690

Ad format

Placement ID

Sample ad unit ID

Banner

138791

146879

Native

138780

146868

Feeds Video

138788

146876

Offerwall

138789

146877

Rewarded Video

138786

146874

Static Interstitial

138783

146871

Interstitial Video

138781

146869

Interactive Ads

138790

146878

Splash

173349

209547

Automatic Rending Native

202132

258656

集成建议&常见问题

集成建议

1.在Application中初始化SDK。 2.在load成功后的onAdLoaded中进行preload, 保证广告的展示速度,这样才能获取更好的收益。 3.register时一定要对ViewGroup,不要只对Button, 保证广告的可点击区域,这个对收益影响很大。 4.广告展示布局的CTA按钮可以用TextView, 如果用Button会拦截事件。 5.一个广告位对应一个MBNativeHandler, 保证每个广告位的唯一性。 6.在APP首页进行墙的预加载。 7.如果想监听墙入口的事件,可以在墙入口ViewGroup设置onTouch事件。

常见问题

1.返回的广告为什么有的是中文,但是手机设置是英文? 答:广告内容和手机设定的语言无关,会与用户的网络IP有关

2.为什么广告第一次跳转很慢? 答:广告会经过多层302跳转,拿到最终链接进行跳转,NativeHandler可以接收到广告的跳转的结束,开发者可以在这个时间段设置Loading对话框

接口状态返回说明

msg

含义

EXCEPTION_RETURN_EMPTY

没有广告填充,可能导致的原因:1.您在测试期间所获取的广告均为Mintegral的正式广告,因此会受到算法智能优化的影响,若一段时间内大量加载和展示广告,可能导致一段时间后没有广告填充的现象。2.应用是上架Google Play的,但测试的网络状态是中国大陆网络。3.后台创建没有添加包名。4.后台将黑名单当做白名单,黑名单是选择你不想要投放的广告分类,请勿全选。

EXCEPTION_SIGN_ERROR

appID和appKey不匹配,解决方案:检查APPkey和APPID是否填写正确,APPkey可以在应用设置(APP Setting)模块顶部获取

EXCEPTION_TIMEOUT

请求超时

EXCEPTION_UNIT_NOT_FOUND

该unitID不存在/填写错误

EXCEPTION_UNIT_ID_EMPTY

unitID没传

EXCEPTION_UNIT_NOT_FOUND_IN_APP

在该appID和unitID不匹配

EXCEPTION_UNIT_ADTYPE_ERROR

传入的unitID广告类型不符

EXCEPTION_APP_ID_EMPTY

appID没有传入

EXCEPTION_APP_NOT_FOUND

该appID不存在/填写错误

EXCEPTION_IV_RECALLNET_INVALIDATE

请求时的网络状态不对,一般是SDK初始化还未完成就去请求导致的

EXCEPTION_SERVICE_REQUEST_OS_VERSION_REQUIRED

无法取得osVersion,一般是GDPR开关导致的

NO_ADS_SOURCE

没有可用的广告源

data load failed, errorMsg is No video campaign

load失败,返回的compaign 没有带视频素材。 可能原因: 1. 当前广告单子对应的app已经安装 2. 服务器端返回的offer没有video_url

data load failed, errorMsg is load no ad

服务端没有返回广告数据

data save failed

H5 zip包保存异常

data load failed, errorMsg is Network error,please check

网络状态为不可用 可能原因: 1. 请求API 结束后,获取网络状态为不可用 2. 请求API结束后,拿到的API http 的resp为空

content write failed

H5源码保存异常

file is not effective

视频文件无效 可能原因: 1. 视频文件是否存在 2. 视频文件是一个文件,不是文件夹 3. 视频文件可读

MD5 check failed

1. 视频文件内容md5与服务端下发的不匹配 2. 客户端生成Md5异常

data load failed, errorMsg is The server returns an exception

1. 服务端返回的code 非 200/206 2. code OK的情况下 body 为空

resource load timeout

Load Action 整体 60s 超时

CURRENT_UNIT_IS_LOADING

当前的load请求没有结束再次点击load

EXCEPTION_FILTER_BY_PLACEMENTID_INCONSISTENT

placementId填写错误

EXCEPTION_UNIT_BIDDING_TYPE_ERROR

bidding type错误,只能重新创建unitID

欧盟GDPR版本须知:

从2018年5月25日开始,欧盟的“通用数据保护条例”(GDPR)将生效。 开发者需要更新Mintegral SDK并按以下方法集成,否则会影响广告正常投放。目前只有8.11.0以上版本才支持GDPR,同时,我们更新了Mintegral隐私政策

接口介绍

1.设置是否获取用户信息的开关,此方法需要在SDK初始化之前调用

void setConsentStatus(Context context,int status);

示例代码:

MBridgeSDK sdk = MBridgeSDKFactory.getMBridgeSDK();
Map<String, String> map = sdk.getMBConfigurationMap("your appId", "your appKey");
sdk.setConsentStatus(MainApplication.this, MBridgeConstans.IS_SWITCH_ON);
sdk.init(map, MainApplication.this);

注意事项

  • 如果不收集用户信息,将会影响广告投放,可能会引起没有广告返回的情况,请知悉。

  • 对于欧盟用户,开发者集成时,建议在征得用户同意之前,先不要初始化SDK,以免引起不必要的麻烦。

CCPA准备:

2018年6月28日,美国加利福尼亚州(“加州”)颁布了《2018年加州消费者隐私法案》("CCPA"),旨在加强消费者隐私权和数据安全保护,将于2020年1月1日生效。对于加州用户,您可以基于用户的选择通过setDoNotTrackStatus接口进行设置。设置完成后,Mintegral将不再基于用户设备信息向该用户展示个性化推荐广告,也不会将该用户设备信息同步至其他第三方合作伙伴。该API在SDK版本12.1.2及以上已经提供。

接口介绍

设置是否获取用户信息的开关,调用此方法时,要保证已经调用了SDK初始化

/**
 * If set to TRUE, the server will not display personalized ads based on the user's personal information.
 * When receiving the user's request, and will not synchronize the user's information to other third-party partners.
 * Default is FALSE.
 * @param status
 */
void setDoNotTrackStatus(boolean status);

示例代码

MBridgeSDK sdk = MBridgeSDKFactory.getMBridgeSDK();
Map<String, String> map = sdk.getMBConfigurationMap("your AppId", "your AppKey");
sdk.init(map, MainApplication.this);
sdk.setDoNotTrackStatus(false);

ChangeLog

版本号

ChangeLog

发布时间

15.5.4

1、增加广告load阶段sdk堆栈信息上报 2、若干bug修复

2021.06.09

15.5.3

1、apk下载合规 2、弹窗页面支持动态native

2021.06.04

15.5.2

1、自由id升级 2、修复已知问题

2021.05.11

15.5.1

1、视频播放器更新为ExoPlayer 2、边下边播不再依赖开发者配置 3、国内版本下载器优化 4、性能优化,若干bug修复

2021.04.27

15.5.0

1、优化APK的下载 2、恢复、优化setting campaign上报 3、移除load阶段deeplink的逻辑判断 4、性能优化

2021.04.13

15.4.6

1、更改SDK的包名 2、若干代码优化

2021.02.23

15.4.5

1、适配AndroidX 2、性能优化 3、修复若干Bug

2021.02.18

15.3.1

1、适配AndroidX 2、修复某些情况视频播放失败的问题 3、修复RV/IV中Excludelds没有上报的问题

2020.11.24

15.3.0

1、适配AndroidX 2、针对Android异形屏适配 3、v3接口升级优化 4、修复因混淆导致的新下载模块可能失效的问题

2020.11.20

15.2.4

1、适配AndroidX 2、删除JS有关的字符串 3、删除与电量相关的API

2020.11.11

15.2.2

1、适配AndroidX 2、优化SDK的Demo 3、优化更改SDK的用户数据参数 4、性能优化

2020.11.05

15.2.1

1、适配AndroidX 2、提升sdk稳定性

2020.11.04

14.6.2

1、适配AndroidX 2、修复一些问题,优化性能

2020.10.30

14.6.1

1、适配AndroidX 2、优化deeplink 3、移除user data上报

2020.10.23

14.6.0

1、适配AndroidX 2、修复一些问题,优化性能

2020.10.15

14.5.0

1、适配AndroidX 2、新增广告Id获取 3、新增下载二次弹窗确认逻辑 4、修复一些问题

2020.09.18

14.4.6

1、适配AndroidX 2、提升sdk稳定性

2020.09.17

14.4.5

1、适配AndroidX 2、修复一些问题

2020.09.14

14.4.4

1、适配AndroidX 2、修复一些问题

2020.09.04

14.4.0

1、适配AndroidX 2、新增Reward Plus 3、优化性能

2020.08.13

14.3.0

1、适配AndroidX 2、NativeVideo新增播放完成回调和视频时长属性 3、优化性能 4、修复一些问题

2020.07.24

14.2.6

1、适配AndroidX 2、优化性能 3、修复一些问题

2020.07.21

14.2.5

1、适配AndroidX 2、将在SDK中的网络安全配置交给开发者配置 3、修复一些问题

2020.07.09

14.2.3

1、适配AndroidX 2、修复一些问题

2020.07.04

14.2.2

1、适配AndroidX 2、优化性能 3、修复一些问题

2020.06.30

14.2.1

1、适配AndroidX 2、优化性能 3、修复一些问题

2020.06.30

14.2.0

1、适配AndroidX 2、修复一些问题

2020.06.23

14.1.0

1、适配AndroidX 2、新增SDK初始化成功和失败的回调

2020.06.04

14.0.0

1、适配AndroidX 2、新增自动渲染原生广告样式 3、修复一些问题

2020.05.26

13.1.1

1、适配AndroidX 2、修复一些问题 3、优化性能

2020.04.27

13.1.0

1、适配AndroidX 2、所有广告类型初始化时增加placementId 3、修复一些问题

2020.04.16

13.0.4

1、适配AndroidX 2、优化 load 流程:减少 timeout 出现的情况和优化触发多次 load 时给开发者回调的问题 3、修复一些问题

2020.03.26

13.0.3

1、适配AndroidX 2、修复开屏展示上报问题

2020.03.20

13.0.2

1、适配AndroidX 2、修复sdk在check isready 时候在弱网情况下引发的load超时问题 3、删除 runtime 的高风险代码

2020.03.20

13.0.1

1、适配AndroidX 2、修复一些问题

2020.03.12

13.0.0

1、适配AndroidX 2、新增开屏广告样式 3、适配中英文下载进度条 4、修复已知bug

2020.03.09

12.2.3

1、适配AndroidX 2、修复一些问题

2020.03.05

12.2.2

1、适配AndroidX 2、优化性能

2020.03.03

12.2.1

1、适配AndroidX 2、修复可能导致NativeVideo无法正常播放的问题

2020.02.20

12.2.0

1、适配AndroidX 2、新增 IV 试玩弹窗、奖励弹窗设置等 3、RV & IV 静音设置优化,播放时以开发者的设置为准 4、内部优化

2020.02.16

12.1.5

1、适配AndroidX 2、新增banner的关闭回调

2020.01.10

12.1.2

1、适配AndroidX 2、新增支持智能下载 3、修复aa类无法找到问题

2019.12.26

12.1.1

1、适配AndroidX 2、修复判定BannerView展示失败的问题

2019.12.19

12.1.0

1、适配AndroidX 2、修复bitmap异常 3、内部优化

2019.12.13

12.0.0

1、适配AndroidX 2、修改判断BannerView被遮盖的判定条件 3、修复BannerView被放置于可滑动组件中时,可能出现的自动刷新及点击异常 4、修复可能造成NativeVideo展示回调异常的问题。

2019.12.06

10.9.0

1、未适配AndroidX 2、修复一些问题,优化性能

2020.11.09

10.8.0

1、未适配AndroidX 2、修复一些问题,优化性能

2020.10.15

10.7.1

1、未适配AndroidX 2、修复4.4及以下版本兼容问题

2020.09.24

10.7.0

1、未适配AndroidX 2、新增广告Id获取 3、新增下载二次弹窗确认逻辑 4、修复一些问题

2020.09.18

10.6.6

1、未适配AndroidX 2、提升sdk稳定性

2020.09.17

10.6.5

1、未适配AndroidX 2、修复一些问题

2020.09.15

10.6.4

1、未适配AndroidX 2、修复一些问题

2020.09.04

10.6.0

1、未适配AndroidX 2、新增Reward Plus 3、优化性能

2020.08.17

10.5.1

1、未适配AndroidX 2、NativeVideo新增播放完成回调和视频时长属性 3、优化性能 4、修复一些问题

2020.07.27

10.5.0

1、未适配AndroidX 2、将在SDK中的网络安全配置交给开发者配置 3、修复一些问题

2020.07.10

10.4.0

1、未适配AndroidX 2、新增SDK初始化成功和失败的回调 3、优化性能 4、修复一些问题

2020.07.01

10.3.0

1、未适配AndroidX 2、新增自动渲染原生广告样式和开屏广告样式 3、修复一些问题

2020.05.27

10.2.5

1、未适配AndroidX 2、修复一些问题

2020.05.14

10.2.4

1、未适配AndroidX 2、修复一些问题

2020.03.12

10.2.3

1、未适配AndroidX 2、优化性能

2020.03.03

10.2.2

1、未适配AndroidX 2、修复Setting无法获取时可能导致的Offer过期判定失误的问题 3、修复NativeVideo二跳页在特定场景顶部可能出现白条的问题

2020.02.26

10.2.1

1、未适配AndroidX 2、新增banner的关闭回调

2020.01.10

10.2.0

1、未适配AndroidX 2、新增支持智能下载 3、修复aa类无法找到问题

2019.12.30

10.1.9

1、未适配AndroidX 2、修复判定BannerView展示失败的问题

2019.12.18

10.1.8

1、未适配AndroidX 2、修改判断BannerView被遮盖的判定条件 3、修复BannerView被放置于可滑动组件中时,可能出现的自动刷新及点击异常 4、修复可能造成NativeVideo展示回调异常的问题

2019.12.06

10.1.7

1、未适配AndroidX 2、开发者书旗反馈小米Mix3 退后台视频播放失败问题修复 3、Banner回调两次问题修复 4、开发者反馈华为oaid aidl文件混淆与不混淆冲突问题修复 5、修复MBActivity有可能导致的Crash 6、修复MBCommonActivity有可能导致的崩溃

2019.11.29

10.1.6

AndroidX适配定制版

2019.11.14

10.1.0

1、支持om测试 2、Mraid expand支持 3、Banner回调优化

2019.09.24

10.0.0

新增banner样式

2019.08.27

9.13.1

1、支持Mraid协议

2019.07.09

9.12.4

1、新增Head-Bidding功能

2019.06.20

9.12.2

移除定位相关代码

2019.06.14

9.11.0

RV/IV 回退键逻辑优化

2019.05.10

9.10.0

优化了RV和IV广告的逻辑

2019.03.25

9.9.1

Nativevideo功能优化

2019.03.12

9.9.0

优化性能

2019.03.06

9.8.0

优化性能

2019.02.22

9.7.0

修复一些问题

2019.02.01

9.6.0

新增Adchoice

2019.01.10

9.5.0

Android系统下载器适配优化

2018.12.29

9.3.0

支持deeplink跳转

2018.12.06

9.2.0

Android系统下载器适配

2018.11.08

9.1.1

增加小程序跳转、支持https

2018.10.28

9.0.0

新增interactive Ad

2018.08.15

8.13.0

支持imei、mac、android id的获取

2018.06.27

8.12.0

新增shortcuts

2018.06.13

8.11.0

支持欧盟GDPR

2018.05.20

8.10.0

新增InterstitialVideo广告形式

2017.05.10

8.9.0

视频结果页点击后,可自动关闭

2018.03.26

8.8.0

mediaview支持gif

2018.03.12

8.7.0

优化整体广告

2018.02.29

8.6.0

RV支持设置静音

2018.01.26

8.5.0

支持视频重复播放功能

2017.12.04

8.4.0

修复了部分手机兼容问题

2017.11.14

8.3.0

修复了部分手机兼容问题

2017.09.04

8.2.0

新增NativeVideo功能

2017.08.02

8.1.0

修复了部分手机兼容问题

2017.11.14

8.0.0

修复了部分手机兼容问题

2016.12.06

Last updated

Was this helpful?