# SDK下载与集成

# 开始之前

Mint Mediation SDK支持Android系统版本为4.1 (API Level 16)及以上版本,请确保:

  • 使用Android Studio 2.0及以上版本
  • Target Android API level 28及以上
  • MinSdkVersion level 16及以上

WARNING

重要信息:在 Mint Mediation Android SDK中,针对第三方平台的Adapter模块被单独打包成独立的aar文件,每个平台都有一个对应的Adapter包。如果您使用了Mint Mediation SDK的聚合功能,务必不要忘记把Adapter集成到项目中。请参考我们的指导手册添加中介网络

# 概述

本指南介绍如何将 Mint Mediation SDK集成到您的Android应用中。

Mint Mediation致力于提供多样且富有竞争力的最佳广告聚合和变现解决方案,支持激励视频、插屏、原生和横幅等丰富的广告类型。 Mint Mediation聚合平台支持AdMob、Facebook、Mint Ad、UnityAds、Vungle、Tapjoy、AppLovin、AdColony、Chartboost、TikTok和MoPub等国内外主流的广告网络对接,帮助开发者实现“一次接入,全部覆盖”。

全新设计的Mint Mediation SDK具有智能库存机制和自动的广告加载/预加载机制,致力于为应用开发者提供最佳的聚合解决方案。 使用 Mint Mediation SDK,开发者不需要手动调用激励视频和插屏广告的loadAd方法进行广告的缓存,SDK会进行自动广告的预加载和缓存,同时具有多个广告缓存的库存机制让广告可用性大大增加。因此,Mint Mediation SDK 的API接口会更加易于使用,开发者只需要在应用所设计的场景中检查广告库存并进行广告展示即可。开发者可以更加关注于应用逻辑本身,而无需对广告的加载、缓存花费时间精力。

# Application Ads ID

在进行Mint Mediation SDK集成之前,您得先有一个Mint Mediation Publisher前台的开发者账号,然后注册您的应用、创建广告位等操作,得到集成所必要的信息: APP_KEY和Placement ID。开发者请访问Mint Mediation前台。

APP_KEY

APP_KEY 是给开发者应用分配的唯一标识,您可以在开发者前台创建应用获取APP_KEY : 登录,进入菜单 APPS -> 选择'View All Apps' -> 在列表中找到APP,点击Copy 图表 即可自动复制到粘贴板

Placement ID

Placement ID 是广告位的唯一标识。开发者可以创建多个广告位,进入菜单APPS ->Placements 可以查看到所有的广告位信息。 Mint Mediation支持激励视频、插屏、原生和横幅四种类型。

# 添加SDK到Project

Mint Mediation SDK提供了Gradle依赖在线集成方式。

首先,请确保在项目级 build.gradle 文件的 allprojects 部分引用了 mavenCentral()

allprojects {
    repositories {
        mavenCentral()
    }
}

接下来,请打开您应用的应用级 build.gradle 文件的dependencies部分添加如下代码。

dependencies {
    implementation 'com.mi.dev.mint:mint-mediation-sdk:1.9.10.0'
    implementation 'com.mi.dev.mint:mint-ad-adapter:3.1.3.0.1.9.10.0'
    implementation 'com.mi.dev.mint:mint-ad-sdk:3.1.3.0@aar'
    implementation 'com.squareup.okhttp3:okhttp:3.12.12'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.12.12'
    //聚合sdk使用了Google的play service仓库用于获取广告ID
    implementation 'com.google.android.gms:play-services-base:18.0.1'
    implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
}

# 更新AndroidManifest.xml配置

接下来需要配置您的AndroidManifest.xml 文件,添加以下所示的permission脚本到<manifest>中,确保不要放在 <application>内。

<!-- Required permissions -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

# ProGuard

如果您在应用中使用了ProGuard来保护代码,请务必添加下面的配置到您的 ProGuard配置文件 (Android Studio: proguard-rules.pro或者Eclipse: proguard-project.txt),否则SDK将会报错。

-dontwarn com.zeus.gmc.sdk.mobileads.mintmediation.**.*
-dontskipnonpubliclibraryclasses
# Mint Mediation
-keep class com.zeus.gmc.sdk.mobileads.mintmediation.**{*;}
-keep class com.zeus.gmc.sdk.mobileads.mintmediation.adapters.**{*;}
#R
-keepclassmembers class **.R$* {
public static <fields>;
}
-keepattributes *Annotation*,InnerClasses
-keepnames class * implements android.os.Parcelable {
public static final ** CREATOR;
}
-keep class com.zeus.gmc.sdk.mobileads.columbus.** {*;}
-keep class com.zeus.gmc.sdk.mobileads.mintmediation.testsuite.** { *; }
-keep class com.mintmediation.sdk.unity.** { *; }
-dontwarn com.mintmediation.sdk.unity.**

# MultiDex

如果您的应用中使用了MultiDex,需要添加下面脚本到build.gradle文件。

android {
  buildTypes {
    release {
      multiDexKeepProguard file('multidex-config.pro')
      ...
    }
  }
}

相应的multidex-config.pro文件配置如下:

-keep class com.zeus.gmc.sdk.mobileads.mintmediation.**{*;}
-keep class com.zeus.gmc.sdk.mobileads.mintmediation.adapters.**{*;} 
-keep class com.mintmediation.sdk.unity.** { *; }

# 初始化

在调用SDK进行广告加载展示之前,您需要首先对SDK进行初始化。我们建议在应用启动的时候进行SDK初始化,比如在Application或者Activity的onCreate()事件方法是一个不错的选择,如下所示:

public class DemoActivity extends Activity {

    @Override
    public void onCreate() {
        super.onCreate();
        // 请在init之前进行GDPRConsent的设置,如果app不允许个性化广告,请将GDPRConsent设置为false
        MintAds.setGDPRConsent(true);
        InitOptions initOptions = new InitOptions.Builder()
                .appKey("Your AppKey")
                .build();
        MintAds.init(initOptions, new InitCallback() {
            @Override
            public void onSuccess() {
                // 初始化成功时触发
            }

            @Override
            public void onError(Error error) {
                // 初始化失败时触发
            }
        });
    }
}

在使用开屏广告时,您可以在初始化mint sdk时,传入应用的名称与logo资源文件id,以便在支持展示应用logo或应用名称的开屏广告中展示。如下所示:

InitOptions.Builder initOptionsBuilder = new InitOptions.Builder()
                .appName("Yout App Name") // 传入应用名称
                .appIcon(R.mipmap.ic_launcher) // 传入应用logo资源文件id
                .appKey("Your AppKey");

WARNING

注意:请务必在调用init方法前调用MintAds.setGDPRConsent(Boolean allowPersonalizedAds)方法,否则Mint Mediation SDK将不会进行初始化请求。

WARNING

注意: APP KEY 是在Mint Mediation前台创建应用时获取。
对于激励视频和插屏广告,默认情况下,您不需要自己调用loadAd方法进行广告加载,SDK会自动进行广告的加载和预加载操作。
onError回调方法的Error参数包含初始化失败的原因,如遇到异常请参考错误码获取更多信息.

最佳实践:按需初始化

Mint Mediation SDK提供了新的初始化方案,在初始化时您可以指定一个或多个广告类型进行预加载。目前仅支持插屏广告和激励视频广告与激励插屏广告,如果不传入,会默认对三种广告类型都进行预加载

基于这种方法,开发者可以将不同类型广告的初始化和预加载放在应用的不同时间节点上,基于应用的广告场景设计,如首页广告在应用启动的时候进行初始化以尽快获取到广告,而其他类型广告则可以在稍晚一点的时候进行初始化。这种方案的好处是,可以将原先集中在应用启动的时间点进行的广告预加载动作,分散到不同时间点,避免可能的网络拥挤导致广告加载速度缓慢、以致影响应用体验。

下面代码示例了如何通过新的初始化方法仅仅初始化和预加载激励视频与插屏广告两种类型。

/**
*广告类型参数需是由枚举变量MintAds.PRELOAD_AD_TYPE.AdUnitName指定的类型,如:
*/
InitOptions initOptions = new InitOptions.Builder()
    .appKey("Your AppKey")
    .preloadAdTypes(MintAds.PRELOAD_AD_TYPE.INTERSTITIAL, MintAds.PRELOAD_AD_TYPE.REWARDED_VIDEO)
    .build();

当使用新的初始化方法,您可以在应用的不同时间点分别初始化每一种广告类型,如下所示:

// 初始化并预加载激励视频广告
InitOptions initOptions = new InitOptions.Builder()
    .appKey("Your AppKey")
    .preloadAdTypes(MintAds.PRELOAD_AD_TYPE.REWARDED_VIDEO)
    .build();
// 初始化并预加载插屏广告
InitOptions initOptions = new InitOptions.Builder()
    .appKey("Your AppKey")
    .preloadAdTypes(MintAds.PRELOAD_AD_TYPE.INTERSTITIAL)
    .build();

分渠道初始化

// 指出传入Channel
InitOptions initOptions = new InitOptions.Builder()
    .appKey("Your AppKey")
    .channel("myChannel")
    .build();

实现回调方法

Mint Mediation SDK在初始化操作中会出发一系列的事件来通知应用程序,您需要实现InitCallback接口的onSuccess() 和onError() 回调方法以处理初始化成功和失败的事件。

@Override
public void onSuccess() {
    // 添加代码处理初始化成功事件
}
@Override
public void onError(Error error) {
    // 添加代码处理初始化失败事件
    // error参数包含具体的错误信息
}

WARNING

注意: onError()事件中的Error参数包含错误信息,请参考错误码

记录Activity生命周期

我们建议您重载每个Activity对象的onPause()和 onResume() 方法,添加对应的Mint Mediation的onResume和onPause调用来记录Activity的生命周期。

protected void onResume() {
  super.onResume();
  MintAds.onResume(this);
} 
protected void onPause() {
  super.onPause();
  MintAds.onPause(this);
}

更详细的集成步骤,参考我们的Demo项目 (opens new window)