跳转至

安卓

Adiz Android

Adiz Android是Hive提供的Android广告模块,旨在更方便地使用AdMob提供的广告展示功能。Adiz Android提供的广告形式如下:

  • 插页广告(Interstitial)
  • 横幅广告(Banner)
  • 原生广告(Native)
  • 激励广告(Rewarded)
  • 激励插页广告(Rewarded Interstitial)
  • 应用开启广告(AppOpen)

请按照以下指南逐步参考以安装和使用Adiz Android。

安装

在模块的应用级 Gradle 文件(app/build.gradle)中添加 Adiz 库项。

    dependencies {
        implementation 'com.com2us.android.adiz:hive-adiz:2.1.0'
    }
 

为了支持 Java 8 功能,请在模块的应用级 Gradle 文件中添加如下 android 设置。

android {
    // ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

 

AndroidManifest.xml 文件中输入 AdMobId(ca-app-pub-XXXXX~YYYYY 格式)。

<manifest>
    <application>
    <!-- Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713 -->
    <meta-data
        android:name="com.google.android.gms.ads.APPLICATION_ID"
        android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
    </application>
</manifest>
 

使用Proguard时,Adiz模块中已包含ProGuard规则。因此,无需向项目添加ProGuard规则。

 

要显示视频广告,您需要启用硬件加速。在AndroidManifest.xml文件中添加硬件加速的设置。如果将其添加到application标签中,则整个应用程序将使用硬件加速。如果将其添加到activity标签中,则仅在您希望显示广告的特定Activity中使用硬件加速。

<application android:hardwareAccelerated="true">
    <!-- For activities that use ads, hardwareAcceleration should be true. -->
    <activity android:hardwareAccelerated="true" />
</application>

测试广告设置

Adiz可以通过两种方式展示测试广告。

  • 测试模式激活:仅显示由AdMob发放的测试广告
  • 注册测试设备后显示广告:为了测试实际广告,进行测试以避免无效流量,并注册要显示测试广告的设备进行操作

测试模式激活

在开发阶段,激活测试模式以确保点击测试广告不会向广告主收费。激活测试模式后,仅会显示测试广告。在测试模式下,即使不在控制台中输入 AdMob 广告密钥,也会显示测试广告。在商业发布时,请禁用测试模式。

测试模式激活方法有两种。

  • 在注册测试设备到控制台后,设置为演示广告(推荐):
    请参考控制台指南中的测试设备管理内容。
  • 使用Adiz类的setTestMode()方法:
    请参考下面的示例代码
Note

在开发阶段,如果不是测试模式,过多点击广告将被视为无效流量,可能导致 AdMob 账户被举报,从而无法展示广告。

使用 Adiz.setTestMode() 方法

import com.hive.adiz.Adiz
import com.hive.adiz.AdizError

import org.json.JSONException
import org.json.JSONObject

// 启用测试模式。注释掉下面的行以进行商业分发。
Adiz.setTestMode(true)

// 启用 Hive Adiz 模块的日志记录。日志记录仅应在测试模式下使用。对于商业分发,请注释掉以下行。
Adiz.setLogEnable(true)
import com.hive.adiz.Adiz;
import com.hive.adiz.AdizError;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;

// 启用测试模式。注释掉下面的行以进行商业分发。
Adiz.setTestMode(true);

// 启用 Hive Adiz 模块的日志记录。日志记录仅应在测试模式下使用。对于商业分发,请注释掉下面的行。
Adiz.setLogEnable(true);

测试设备广告曝光

在以下情况下,需要注册测试设备以展示测试广告。

  • 测试在控制台注册的 AdMob 广告密钥是否正常工作
  • 编写 GDPR 消息 并确认 GDPR 同意弹窗是否正常工作
  • 运行 广告检查器 来分析和调试广告请求

测试设备上展示广告的方法有两种。

  • 在注册测试设备到 Hive 控制台后,将其设置为 广告单元 ID 使用(推荐):
    请参考控制台指南中的 测试设备管理 内容。

  • Adiz 类的 setTestDevice() 方法使用:
    请参考下面的 示例代码

Note

如果在未注册测试设备的情况下进行实际广告曝光测试,将被视为无效流量,可能导致AbMob账户被封禁,并且将无法再曝光广告。注册测试设备后,广告曝光时将显示“测试模式”或“测试广告”(原生广告)。在商业发布时,必须禁用测试设备。


横幅、全屏广告或奖励广告


原生广告


使用 Adiz.setTestDevice() 方法

要注册测试设备,首先需要确认测试设备 ID。测试设备 ID(示例:33BE2250B43518CCDA7DE426D04EE231)可以通过以下两种方法确认。

  • Adiz.Initialize() 调用后检查 Logcat 日志:

    使用新的
    ConsentDebugSettings.Builder().addTestDeviceHashedId("33BE2250B43518CCDA7DE426D04EE231") 将其设置为调试设备。
    
  • 调用 Adiz.Initialize() 后,无论广告类型如何,调用 initialize()load() 后检查 Logcat 日志:

    I/Ads: 使用 RequestConfiguration.Builder.setTestDeviceIds(Arrays.asList("33BE2250B43518CCDA7DE426D04EE231")) 在此设备上获取测试广告。
    


在确认测试设备 ID 后,在现有的 Adiz 初始化代码中,在执行 Adiz.initialize 之前添加 Adiz.setTestDevice(DEVICE_ID) 行。DEVICE_ID 中输入复制的测试设备 ID。

import com.hive.Adiz
import com.hive.adiz.AdizError
import org.json.JSONObject


fun initialize() {

        Adiz.setTestDevice("33BE2250B43518CCDA7DE426D04EE231")

        Adiz.initialize(activity, object : Adiz.SdkInitializationListener {
                override fun onComplete(error: AdizError, jsonData: JSONObject?) {
                        // ... 生略
                }
        })
}
import com.hive.Adiz;
import com.hive.adiz.AdizError;
import org.json.JSONObject;


public void initialize() {

        Adiz.setTestDevice("33BE2250B43518CCDA7DE426D04EE231");

        Adiz.initialize(activity, new Adiz.SdkInitializationListener() {
                @Override
                public void onComplete(@NonNull AdizError error, @Nullable JSONObject jsonData) {

                        if(error.isSuccess()) {
                                // ... 省略
                        }
                }
        });
}


import com.hive.Adiz;
import com.hive.adiz.AdizError;
import org.json.JSONObject;


public void initialize() {

        Adiz.setTestDevice("33BE2250B43518CCDA7DE426D04EE231");

        Adiz.initialize(activity, new Adiz.SdkInitializationListener() {
                @Override
                public void onComplete(@NonNull AdizError error, @Nullable JSONObject jsonData) {

                        if(error.isSuccess()) {
                                // ... 省略
                        }
                }
        });
}


广告检查器使用

广告检查器是一个在测试设备上请求实际广告并实时分析展示过程的应用内覆盖工具。它会告诉您加载广告所花费的时间,如果展示失败,它会告知失败原因。此外,您可以指定特定的广告网络,以检查广告是否正常展示,如果存在问题,可以在代码级别进行调试。所有这些过程都与广告检查 UI 一起进行。它包含在 Google Mobile Ads SDK Android 20.0.0 及以上版本中,可以通过调用 AdizDeveloperTool.openAdInspector 来使用。


要使用广告检查器,必须在测试设备上设置广告曝光

import com.hive.adiz.utils.AdizDeveloperTool

AdizDeveloperTool.openAdInspector(activity)
import com.hive.adiz.utils.AdizDeveloperTool;

AdizDeveloperTool.openAdInspector(activity);


Adiz AppID 设置

设置在控制台 AppCenter 中注册的 Adiz AppID。如果未设置,将使用 AndroidManifest.xml 包名。

Adiz.setAppId("YOUR_APPID")
Adiz.setAppId("YOUR_APPID");

Hive 控制台服务器设置

设置要使用的 Hive 控制台服务器。默认值为 REAL。即使使用生产服务器,启用测试模式也只会显示测试广告。

  • Hive 测试控制台服务器: ZoneType.TEST
  • Hive 沙盒控制台服务器: ZoneType.SANDBOX
  • Hive 商用控制台服务器: ZoneType.REAL
Adiz.setZone(AdizConfiguration.ZoneType.REAL)
Adiz.setZone(AdizConfiguration.ZoneType.REAL);

如果游戏针对欧洲和英国(EEA & UK),则必须显示GDPR(欧洲联盟通用数据保护条例)同意弹窗。GDPR同意弹窗仅在用户设备的IP地址为欧洲和英国(EEA & UK)IP地址时显示。Adiz支持Google UMP(用户消息平台)以显示GDPR同意弹窗。在AdMob控制台中编写GDPR消息后,初始化Adiz,GDPR弹窗将显示给来自欧洲和英国地区的用户。

Warning

如果目标是欧洲和英国以外的地区,例如仅在国内计划提供服务,可以跳过 GDPR 同意弹窗显示(欧洲,英国) 步骤,并使用 Adiz.initializeForNonGDPR() 方法进行初始化。
如果使用 Adiz.initialize() 方法进行初始化,则必须在 AdMob 控制台中编写 GDPR 消息,才能正常进行 Adiz 初始化。

GDPR 消息编写

访问 Google AdMob 控制台以编写 GDPR 消息。在编写 GDPR 消息之前,请先参考 GDPR 消息编写指南

如果您编写了 GDPR 消息,Adiz 初始化 时将自动显示 GDPR 同意弹窗。

实现GDPR同意/撤回功能

GDPR同意弹窗中的项目应提供修改功能,以便用户随时修改其同意状态。例如,用户最初未同意GDPR,但希望为了查看定制广告而重新同意,或者相反,用户最初同意了GDPR,但不再希望提供个人信息而希望撤回同意。为了应对这些情况,应用开发者需要实现重新同意或撤回现有同意的功能。要实现GDPR同意/撤回功能,请遵循以下步骤。

  1. 在应用中实现一个按钮UI,以便可以重新调用GDPR同意弹出窗口。
  2. 在实现Adiz初始化时,调用isPrivacyOptionsRequired(),以便对来自欧洲和英国的用户显示上述按钮UI,而对其他用户则不显示。当来自欧洲和英国的用户点击上述按钮时,调用showPrivacyOptionsForm以重新调用GDPR同意弹出窗口。这样,用户可以随时在应用中点击“管理选项”等按钮来修改GDPR细节的同意情况。下面的showPrivacyOptionsForm是为了示例而任意实现的方法,开发者可以根据需要更改实现形式。
    import com.hive.Adiz
    import com.hive.adiz.AdizError
    import com.hive.AdizConsentManager
    import org.json.JSONObject

    fun initialize() {
            // ...
            Adiz.initialize(activity, object : Adiz.SdkInitializationListener {
                    override fun onComplete(error: AdizError, jsonData: JSONObject?) {

                            if(error.isSuccess) {
                                    // ... 省略
                                    // 决定是否在应用程序中显示重新弹出GDPR同意的按钮
                                    var isPrivacyOptionsRequired = AdizConsentManager.isPrivacyOptionsRequired()
                                    if(isPrivacyOptionsRequired) {
                                            // 在应用程序中显示按钮。 (点击按钮时调用showPrivacyOptionsForm()以显示GDPR同意弹出窗口)
                                            showGDPRConsentPopupButton()
                                    } else {
                                            // 不在应用程序中显示按钮。
                                            // 其他应用程序所需的处理。
                                    }
                            }
                    }
            })
    }


    fun showPrivacyOptionsForm(activity: Activity) {

            // GDPR 同意选项表单调用
            if(AdizConsentManager.isPrivacyOptionsRequired()) {
                    AdizConsentManager.showPrivacyOptionsForm(activity, object : AdizConsentManager.ConsentListener {
                            override fun onResult(error: AdizError) {
                                    addLog("AdizConsentManager.showPrivacyOptionsForm() errorCode : ${error.getCode()}, errorMessage : ${error.getMessage()}}\n")
                                    // 无需进行任何错误处理。
                            }
                    })
            }
    }
    import com.hive.adiz.Adiz;
    import com.hive.adiz.AdizError;
    import com.hive.AdizConsentManager;
    import org.json.JSONObject;


    public void initialize() {
Adiz.initialize(activity, new Adiz.SdkInitializationListener() {
    @Override
    public void onComplete(@NonNull AdizError error, @Nullable JSONObject jsonData) {

        if(error.isSuccess()) {
            // ... 省略
            // 决定是否在应用程序中显示重新打开GDPR同意弹出窗口的按钮
            boolean isPrivacyOptionsRequired = AdizConsentManager.isPrivacyOptionsRequired();
            if(isPrivacyOptionsRequired) {
                // 在应用程序中显示按钮。 (点击按钮时调用showPrivacyOptionsForm()以显示GDPR同意弹出窗口)
                showGDPRConsentPopupButton();
            } else {
                // 不在应用程序中显示按钮。
                // 其他应用程序所需的处理。
            }
        }
    }
    });
    }


    public void showPrivacyOptionsForm(Activity activity) {
            // GDPR同意选项表单调用
            if(AdizConsentManager.isPrivacyOptionsRequired()) {
                    AdizConsentManager.showPrivacyOptionsForm(activity, new AdizConsentManager.ConsentListener() {
                            @Override
                            public void onResult(@NonNull AdizError error) {
                                    // 无需进行任何错误处理。
                            }
                    });
            }
    }

GDPR同意年龄以下用户的标签(TFUA)设置

可以通过使用GDPR同意年龄以下用户的标签(Tag For Under the Age of Consent, TFUA)在广告请求中设置,以将居住在欧洲经济区(EEA)、英国和瑞士的用户视为有限数据处理对象。对于面向儿童的服务应用,可以使用AdizConsentManager.setUserPrivacySettings来设置用户低于同意年龄。虽然各欧洲国家之间存在一些差异,但GDPR规定16岁以下需要父母同意。低于同意年龄的设置必须在执行Adiz.initialize之前进行设置。

Warning

如果同时将GDPR同意年龄以下标签设置为setTagForUnderAgeOfConsent和COPPA儿童目标设置为setTagForChildDirectedTreatment都设置为true,则将优先应用COPPA儿童目标设置setTagForChildDirectedTreatment,因此请勿同时将它们设置为true

Note

Hive SDK v4 24.2.0 以上和 Adiz 2.0.1 以上一起使用时,Hive SDK 设置的同意年龄以下用户状态会自动应用,因此无需调用 AdizConsentManager.setUserPrivacySettings

 

import com.hive.Adiz
import com.hive.adiz.AdizError
import com.hive.adiz.consent.PrivacySettings
import org.json.JSONObject

fun initialize() {

        val isUnderAgeForGDPR = false // 如果是儿童则更改为 true

        val settings = PrivacySettings.Builder()
                .setTagForUnderAgeOfConsent(isUnderAgeForGDPR)
                .build()
        AdizConsentManager.setUserPrivacySettings(settings)

        Adiz.initialize(activity, object : Adiz.SdkInitializationListener {
                override fun onComplete(error: AdizError, jsonData: JSONObject?) {
                        // ... 省略
                }
        })
}
import com.hive.Adiz;
import com.hive.adiz.AdizError;
import com.hive.adiz.consent.PrivacySettings;
import org.json.JSONObject;


public void initialize() {

        boolean isUnderAgeForGDPR = false; // 如果是儿童,请更改为 true

        隐私设置 settings = new PrivacySettings.Builder()
                        .setTagForUnderAgeOfConsent(isUnderAgeForGDPR)
                        .build();
        AdizConsentManager.setUserPrivacySettings(settings);

        Adiz.initialize(activity, new Adiz.SdkInitializationListener() {
                @Override
                public void onComplete(@NonNull AdizError error, @Nullable JSONObject jsonData) {

                        if(error.isSuccess()) {
                                // ... 省略
                        }
                }
        });
}

GDPR 测试设备设置

GDPR 同意弹窗仅在设备 IP 地址为欧洲和英国 IP 地址时显示。在开发阶段,可以强制显示 GDPR 同意弹窗以测试弹窗显示,而无需考虑 IP 地址,为此需要设置 GDPR 测试设备。在 Hive 控制台中设置测试设备后,可以轻松进行测试。 setTestDevice 方法的设置方式如下,与 在测试设备上展示广告 的方法相同。

  1. 初始化 Adiz 进行初始化。这是为了确认测试设备 ID 的初始化,不需要编写 GDPR 同意消息。
  2. 在 Logcat 日志输出中确认可以找到设备 ID 的消息。以下是示例消息。

    Use new ConsentDebugSettings.Builder().addTestDeviceHashedId("33BE2250B43518CCDA7DE426D04EE231") to set this as a debug device.
    
  3. 在消息中确认设备 ID(示例:33BE2250B43518CCDA7DE426D04EE231)。
  4. 复制设备 ID。
  5. 在现有的 Adiz 初始化代码中,在执行 Adiz.initialize 之前添加 AdizGDPRManager.setTestDevice(DEVICE_ID)
  6. 编写 GDPR 同意消息,并重新初始化 Adiz,以确认 GDPR 同意弹窗是否正确显示。
import com.hive.Adiz
import com.hive.adiz.AdizError
import org.json.JSONObject


fun initialize() {

        Adiz.setTestDevice("33BE2250B43518CCDA7DE426D04EE231")

        Adiz.initialize(activity, object : Adiz.SdkInitializationListener {
                override fun onComplete(error: AdizError, jsonData: JSONObject?) {
                        // ... 生略
                }
        })
}
import com.hive.Adiz;
import com.hive.adiz.AdizError;
import org.json.JSONObject;


public void initialize() {

        Adiz.setTestDevice("33BE2250B43518CCDA7DE426D04EE231");

        Adiz.initialize(activity, new Adiz.SdkInitializationListener() {
                @Override
                public void onComplete(@NonNull AdizError error, @Nullable JSONObject jsonData) {

                        if(error.isSuccess()) {
                                // ... 省略
                        }
                }
        });
}

COPPA儿童目标处理标签设置

根据儿童在线隐私保护法(COPPA)的目的,应用程序开发者可以通过儿童目标处理标签设置(tagForChildDirectedTreatment, TFCD)来指定在广告请求时Google是否将内容处理为儿童内容。如果希望将其处理为儿童内容,则必须在执行Adiz.initialize之前调用AdizConsentManager.setUserPrivacySettings。在同时使用Adiz和Hive SDK时,儿童目标处理标签会自动应用,因此无需单独设置。

import com.hive.Adiz
import com.hive.adiz.AdizError
import com.hive.adiz.consent.PrivacySettings
import org.json.JSONObject

fun initialize() {

        val isChildDirectedTreatmentForCOPPA = false // 如果是儿童则更改为 true

        val settings = PrivacySettings.Builder()
                .setTagForChildDirectedTreatment(isChildDirectedTreatmentForCOPPA)
                .build()
        AdizConsentManager.setUserPrivacySettings(settings)

        Adiz.initialize(activity, object : Adiz.SdkInitializationListener {
                override fun onComplete(error: AdizError, jsonData: JSONObject?) {
                        // ... 省略
                }
        })
}
import com.hive.Adiz;
import com.hive.adiz.AdizError;
import com.hive.adiz.consent.PrivacySettings;
import org.json.JSONObject;


public void initialize() {

        boolean isChildDirectedTreatmentForCOPPA = false; // 如果是儿童则更改为 true

        隐私设置 settings = new PrivacySettings.Builder()
                        .setTagForChildDirectedTreatment(isChildDirectedTreatmentForCOPPA)
                        .build();
        AdizConsentManager.setUserPrivacySettings(settings);

        Adiz.initialize(activity, new Adiz.SdkInitializationListener() {
                @Override
                public void onComplete(@NonNull AdizError error, @Nullable JSONObject jsonData) {

                        if(error.isSuccess()) {
                                // ... 省略
                        }
                }
        });
}

广告调解添加

Adiz可以使用AdMob调解来展示广告。要添加AdMob调解,请按照以下步骤操作。

添加AdMob中介

在AdMob控制台进行广告源集成工作。按照下面的表格进行操作。

AppLovin Pangle Unity Ads Meta
步骤 1 设置 AppLovin 配置 设置 Pangle 配置 设置 Unity Ads 配置 设置 Meta 配置
步骤 2 向 AdMob 添加 AppLovin 广告源 向 AdMob 添加 Pangle 广告源 向 AdMob 添加 Unity Ads 广告源 向 AdMob 添加 Meta 广告源
步骤 3 添加 Adiz 适配器

添加 Adiz 适配器

在应用级别的 build.gradle 中添加库依赖。


dependencies {
    // ... (生略) 

    implementation 'com.com2us.android.adiz:hive-adiz:2.0.1' // 公共(必需添加)

    implementation 'com.com2us.android.adiz:hive-adiz-adapter-applovin:2.0.1' // AppLovin 连接时添加
    implementation 'com.com2us.android.adiz:hive-adiz-adapter-pangle:2.0.1' // Pangle 连接时添加
    implementation 'com.com2us.android.adiz:hive-adiz-adapter-unityads:2.0.1' // Unity Ads 连接时添加
    implementation 'com.com2us.android.adiz:hive-adiz-adapter-meta:2.0.1' // Meta 连接时添加
}

 

在 Pangle 集成时,请添加以下设置。如果使用 Gradle 7.0 或更高版本,请在项目级别的 settings.gradle dependencyResolutionManagement 部分添加 repository 设置。


// 使用 Gradle 7.0 及以上时的 settings.gradle 设置

dependencyResolutionManagement {
    repositories {
        maven { url 'https://artifact.bytedance.com/repository/pangle/' } // Pangle 关联时添加
    }
}

 

如果使用 Gradle 7.0 之前的版本,请在项目级别的 build.gradle allprojects 部分添加 repository 设置。


// 使用 Gradle 7.0 之前的版本时的 build.gradle 设置

allprojects {
    repositories {
        maven {
            url 'https://artifact.bytedance.com/repository/pangle' // Pangle 关联时添加
        }

    }
}

 

为了确认Adiz适配器配置是否正确应用,请在运行应用后在广告检查器页面查看配置列表。

Adiz 初始化

在展示所有类型的广告之前,必须执行的步骤。进行 Adiz 初始化后,可以获得展示广告所需的广告密钥。如果处于测试模式,将会收到测试密钥。如果正在使用 Hive SDK,请在调用 AuthV4.setup 之后进行 Adiz 初始化。

val sdkInitializationListener = object : Adiz.SdkInitializationListener {
    override fun onComplete(error: AdizError, jsonData: JSONObject?) {
        Log.d(TAG, "Adiz initialize complete. error code : ${error.getCode()}, message : ${error.getMessage()}, data : $jsonData")
        if(error.isSuccess) {
            if(jsonData != null) {

                var interstitialKeyList = ArrayList<String>()
                var bannerKeyList = ArrayList<String>()
                var nativeKeyList = ArrayList<String>()
                var rewardedKeyList = ArrayList<String>()
                var rewardedInterstitialKeyList = ArrayList<String>()
                var appOpenKeyList = ArrayList<String>()

                try {
                    var keysArr = jsonData.getJSONArray("keys")
                    for (i in 0 until keysArr.length()) {
                        var unit = keysArr.optJSONObject(i)

                        // 这是构建一个键列表的示例,如果您在游戏中直接输入广告键,则is_default为false。
                        if (unit.optBoolean("is_default").not()) {

                            var hiveAdKey = unit.optString("key")
                            when (unit.optString("form")) {
                                "interstitial" -> interstitialKeyList.add(hiveAdKey)
                                "banner" -> bannerKeyList.add(hiveAdKey)
                                "native" -> nativeKeyList.add(hiveAdKey)
                                "rewarded" -> rewardedKeyList.add(hiveAdKey)
                                "rewarded_interstitial" -> rewardedInterstitialKeyList.add(hiveAdKey)
                                "app_open" -> appOpenKeyList.add(hiveAdKey)
                            }
                        }
                    }

                    println("interstitialKeyList $interstitialKeyList")
                    println("bannerKeyList $bannerKeyList")
                    println("nativeKeyList $nativeKeyList")
                    println("rewardedKeyList $rewardedKeyList")
                    println("rewardedInterstitialKeyList $rewardedInterstitialKeyList")
                    println("appOpenKeyList $appOpenKeyList")

                } catch (e: JSONException) {
                    //...
                }
            }
        }
    }
}

fun initAdiz() {
    // 一般初始化
    Adiz.initialize(activity, sdkInitializationListener)
}

fun initAdizForNonGDPR() {
    // 不应对GDPR的情况
    Adiz.initializeForNonGDPR(activity, sdkInitializationListener)
}
Adiz.SdkInitializationListener sdkInitializationListener = new Adiz.SdkInitializationListener() {
    @Override
    public void onComplete(@NonNull AdizError error, @Nullable JSONObject jsonData) {

        if(error.isSuccess()) {
            if(jsonData != null) {
                ArrayList interstitialKeyList = new ArrayList<String>();
                ArrayList bannerKeyList = new ArrayList<String>();
                ArrayList nativeKeyList = new ArrayList<String>();
                ArrayList rewardedKeyList = new ArrayList<String>();
                ArrayList rewardedInterstitialKeyList = new ArrayList<String>();
                ArrayList appOpenKeyList = new ArrayList<String>();

                try {
                    JSONArray keysArr = jsonData.optJSONArray("keys");
                    for(int i = 0; i < keysArr.length(); i++) {
                        JSONObject unit = keysArr.optJSONObject(i);

                        if(unit.optBoolean("is_default") == false) {
                            String hiveAdKey = unit.optString("key");
                            String form = unit.optString("form");
                            switch (form) {
                                case "interstitial":
                                    interstitialKeyList.add(hiveAdKey);
                                    break;
                                case "banner":
                                    bannerKeyList.add(hiveAdKey);
                                    break;
                                case "native":
                                    nativeKeyList.add(hiveAdKey);
                                    break;
                                case "rewarded":
                                    rewardedKeyList.add(hiveAdKey);
                                    break;
                                case "rewarded_interstitial":
                                    rewardedInterstitialKeyList.add(hiveAdKey);
                                    break;
                                case "app_open":
                                    appOpenKeyList.add(hiveAdKey);
                                    break;
                            }
                        }
                    }

                    System.out.println("interstitialKeyList " + interstitialKeyList);
                    System.out.println("bannerKeyList " + bannerKeyList);
                    System.out.println("nativeKeyList " + nativeKeyList);
                    System.out.println("rewardedKeyList " + rewardedKeyList);
                    System.out.println("rewardedInterstitialKeyList " + rewardedInterstitialKeyList);
                    System.out.println("appOpenKeyList " + appOpenKeyList);

                } catch (Exception e) {

                }
            }
        }
    }
};

void initAdiz() {
    // 一般初始化
    Adiz.initialize(activity, sdkInitializationListener);
}

void initAdizForNonGDPR() {
    // 如果不进行GDPR响应
    Adiz.initializeForNonGDPR(activity, sdkInitializationListener);
}

 

初始化执行时作为回调接收的 JSON 文件中包含广告键列表。广告键列表的格式如下:

 
    {
        "keys":[
            {
                "mediation_id":5,
                "key":"ca-app-pub-3940256099942544/5354046379",
                "form":"rewarded_interstitial",
                "is_default":true,
                "placement_id":"lobby01"
            },
            {
                "mediation_id":4,
                "key":"ca-app-pub-3940256099942544/5224354917",
                "form":"rewarded",
                "is_default":true,
                "placement_id":"game02"
            },
            {
                "mediation_id":3,
                "key":"ca-app-pub-3940256099942544/2247696110",
                "form":"native",
                "is_default":true,
                "placement_id":"event01"
            },
            {
                "mediation_id":1,
                "key":"ca-app-pub-3940256099942544/1033173712",
                "form":"interstitial",
                "is_default":true,
                "placement_id":"mission01"
            },
            {
                "mediation_id":2,
                "key":"ca-app-pub-3940256099942544/6300978111",
                "form":"banner",
                "is_default":true,
                "placement_id":"main01"
            },
            {
                "mediation_id":6,
                "key":"ca-app-pub-3940256099942544/9257395921",
                "form":"app_open",
                "is_default":true,
                "placement_id":"appopen01"
            }
        ]
    }

 

在测试模式下初始化时,即使没有在 Hive 控制台注册 AdMob 广告密钥,也会收到测试广告密钥列表。在商业模式下初始化时,会收到在 Hive 控制台注册的 AdMob 广告密钥列表。

每种广告形式(form)都使用一个广告作为默认广告(即"is_default":true的广告)。当首次注册某种广告形式时,首次注册的广告将成为默认广告。默认广告在创建广告实例(initialize())时,不需要输入广告键(hiveAdKey)。要更改默认广告,必须在Hive 控制台中删除现有的默认广告并重新注册广告。

广告回调监听器设置

每次创建广告实例时,实现 AdizListener 可以根据广告状态变化接收回调。

名称 描述 必需实现
onLoad() 广告加载成功 O
onFail(error: AdizError) 失败(error.getCode()error.getMessage()可以获取失败原因) O
onShow() 广告展示成功 O
onClick() 广告点击 O
onPaidEvent(adRevenueData: AdRevenueData) 广告展示后接收付费事件的时刻,广告收益信息被传递 O
onClose() 广告结束
  • 广告结束后,如果要在同一广告实例中重新展示广告,必须先调用load(),然后调用show()
  • 如果不再展示广告,请调用destroy()以移除广告实例。
X
onRewarded(rewardItem: RewardItem) 在奖励广告(rewardedrewarded interstitial)中,用户在广告展示后获得奖励的时刻 X
var adizListener = object : AdizListener() {
    override fun onLoad() {
        // 当广告加载时调用。
        // 如果广告加载成功,您需要在所需的点调用广告实例的 .show() 来显示广告。
    }

    override fun onFail(loadError: AdizError) {
        // 如果广告加载失败或由于其他原因广告显示失败,则调用此方法。
    }

    override fun onShow() {
        // Called when the ad is displayed.
    }

    override fun onClick() {
        // Called when the ad is clicked.
    }

    override fun onPaidEvent(adRevenueData: AdRevenueData) {     
        // 当广告产生收入时调用。

        var revenue = adRevenueData.revenue // 广告展示时的收入
        var currency = adRevenueData.currency // 广告展示时收入的货币代码     
    }

    override fun onClose() {
        // 广告关闭时调用。
        // 横幅广告和原生广告没有 onClose 回调。
    }

    override fun onRewarded(rewardItem: RewardItem) {         
        // 当观看广告以获得奖励时调用
        var itemType = rewardItem.itemType // 奖励物品类型
        var itemAmount = rewardItem.itemAmount // 奖励物品数量   
    } 
}
AdizListener adizListener = new AdizListener() {
    @Override
    public void onLoad() {
        // 当广告加载时调用。
        // 如果广告加载成功,您需要在所需的时刻调用广告实例的 .show() 来显示广告。
    }

    @Override
    public void onFail(@NonNull AdizError loadError) {
        // 如果广告加载失败或由于其他原因广告显示失败,则调用此方法。
    }

    @Override
    public void onShow() {
        // Called when the ad is displayed.
    }

    @Override
    public void onClick() {
        // Called when the ad is clicked.
    }

    @Override
    public void onPaidEvent(@NonNull AdRevenueData adRevenueData) {         
        double revenue = adRevenueData.getRevenue(); // 广告展示时的收入
        String currency = adRevenueData.getCurrency(); // 广告展示时的收入货币代码      
    }

    @Override
    public void onClose() {
        // 当广告关闭时调用。
        // 横幅广告和原生广告没有关闭按钮,因此没有onClose回调。
    }

    @Override
    public void onRewarded(@NonNull RewardItem rewardItem) {
        // 当观看广告时发生奖励时调用,适用于奖励型插页广告。
        String rewardType = rewardItem.getItemType(); // 奖励物品类型
        int rewardAmount = rewardItem.getItemAmount(); // 奖励物品数量
    }
};

错误代码

当在 Adiz.InitializeAdizListener 中接收到 onFail() 时,AdizError 错误代码和错误信息如下所示。

公共代码

编号 案例 说明
0 成功 成功

Adiz 错误代码

编号 案例 解释
-1 InvalidParam 无效参数
-2 NotSupported 不支持
-3 InProgress 进程进行中状态
-4 Network 网络错误
-5 NeedInitialize 需要初始化
-6 ResponseFail 响应失败
-7 Timeout 网络超时
-99 Unknown 未知错误

广告平台错误代码

编号 案例 解释
-101 NeedLoad 广告未加载
-102 NeedReload 由于广告曝光时间到期,需要重新加载
-103 NotEnoughInventory 调解响应成功,但由于库存不足,没有填充广告
-104 MissingAppId 调解请求的AppID错误
-105 InternalNetworkError 调解网络相关错误
-106 InvalidUnitId 无效的单元ID
-107 MediationNoFill 调解适配器无法处理广告请求
-108 AlreadyLoaded 已加载状态
-109 CannotRequestAds 无法请求广告
-201 GdprConsentError GDPR同意错误
-202 IsNotPrivacyOptionsRequired 无法显示GDPR同意弹窗或不需要显示的状态

广告展示与广告结束

要展示和结束广告,请遵循以下步骤。

  1. 根据要展示的广告形式,在广告类中创建广告实例。如果要展示的广告不是默认广告,则需要输入在初始化中获得的广告键或位置 ID。
    如果不输入广告键(hiveAdKey)或位置 ID(placementId),将创建默认广告实例。位置 ID可以在Hive控制台中设置,更多详细信息请参考控制台指南中的Admob设置页面。
  2. 加载要展示的广告(load())。
  3. 展示加载的广告(show())。要重新展示广告,请在再次调用load()后调用show()
  4. 要结束广告,请调用destroy()

全屏广告(插页式广告)

占据整个屏幕的全屏广告。

import android.app.Activity
import android.os.Bundle
import com.hive.adiz.AdizError
import com.hive.adiz.AdizListener
import com.hive.adiz.base.AdizInterstitial
import com.hive.adiz.common.AdRevenueData

class InterstitialExample : Activity() {

    var interstitialAd: AdizInterstitial? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // ...

        // requestInitAd(this)
    }

    val adizListener = object : AdizListener() {
        override fun onLoad() {
            // requestShowAd()
        }

        override fun onFail(loadError: AdizError) {
            var code = loadError.getCode() // error code
            var message = loadError.getMessage() // error message
        }

        override fun onShow() {
            //
        }

        override fun onClick() {
            //
        }

        override fun onPaidEvent(adRevenueData: AdRevenueData) {
            var revenue = adRevenueData.revenue // 广告曝光时的收入
            var currency = adRevenueData.currency // 广告曝光时的收入的货币代码
        }

        override fun onClose() {
            // requestDestroyAd()
        }
    }

    fun requestInitAd(activity: Activity, hiveAdKey: String? = null) {

        if(hiveAdKey.isNullOrEmpty()) {
            // 创建插页广告实例。
            interstitialAd = AdizInterstitial.initialize(activity, adizListener)
        } else {
            // 您可以通过输入 hiveAdKey 来创建插页广告实例。
            interstitialAd = AdizInterstitial.initialize(activity, hiveAdKey, adizListener)
        }

        // requestLoadAd()
    }

    fun requestInitAdWithPlacementid(activity: Activity, placementId: String? = null) {

        if(placementId.isNullOrEmpty()) {
            // 创建插页广告实例。
            interstitialAd = AdizInterstitial.initialize(activity, adizListener)
        } else {
            // 您可以通过输入placementId来创建插页广告实例。
            interstitialAd = AdizInterstitial.initializeWithPlacementId(activity, placementId, adizListener)
        }

        // requestLoadAd()
    }

    fun requestLoadAd() {
        // 加载插页广告。
        interstitialAd?.let { 
            if(it.isInitialized()) it.load()
        }
    }

    fun requestShowAd() {
        // Expose the interstitial ad.
        interstitialAd?.let { 
            if(it.isLoaded()) it.show()
        }
    }

    fun requestDestroyAd() {
        // 移除插页广告。
        interstitialAd?.destroy()
    }
}
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.hive.adiz.AdizError;
import com.hive.adiz.AdizListener;
import com.hive.adiz.base.AdizInterstitial;
import com.hive.adiz.common.AdRevenueData;

public class InterstitialExample extends Activity {

    AdizInterstitial interstitialAd = null;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //...

        // requestInitAd(this, null);
    }

    AdizListener adizListener = new AdizListener() {
        @Override
        public void onLoad() {
            // requestShowAd();
        }

        @Override
        public void onFail(@NonNull AdizError loadError) {
            int code = loadError.getCode(); // error code
            String message = loadError.getMessage(); // error message
        }

        @Override
        public void onShow() {

        }

        @Override
        public void onClick() {
            //
        }

        @Override
        public void onClose() {
            // requestDestroyAd();
        }

        @Override
        public void onPaidEvent(@NonNull AdRevenueData adRevenueData) {
            double revenue = adRevenueData.getRevenue(); // revenue when ad is exposed
            String currency = adRevenueData.getCurrency(); // currency code for revenue when ad is exposed
        }
    };

    public void requestInitAd(Activity activity, String hiveAdKey) {

        if(TextUtils.isEmpty(hiveAdKey)) {
            // 创建一个插页广告实例。
            interstitialAd = AdizInterstitial.initialize(activity, adizListener);
        } else {
            // 您可以通过输入 hiveAdKey 来创建插页广告实例。
            interstitialAd = AdizInterstitial.initialize(activity, hiveAdKey, adizListener);
        }

        // requestLoadAd();
    }

    public void requestInitAdWithPlacementId(Activity activity, String placementId) {

        if(TextUtils.isEmpty(placementId)) {
            // 创建插页广告实例。
            interstitialAd = AdizInterstitial.initialize(activity, adizListener);
        } else {
            // 您可以通过输入placementId来创建插页广告实例。
            interstitialAd = AdizInterstitial.initializeWithPlacementId(activity, placementId, adizListener);
        }

        // requestLoadAd();
    }

    private void requestLoadAd() {
        // 加载插页广告。
        if(interstitialAd != null && interstitialAd.isInitialized()) interstitialAd.load();
    }

    private void  requestShowAd() {
        // 显示插页广告。
        if(interstitialAd != null && interstitialAd.isLoaded()) interstitialAd.show();
    }

    private void  requestDestroyAd() {
        // 移除插页广告。
        if(interstitialAd != null) interstitialAd.destroy();
    }
}

这是展示特定尺寸横幅的横幅广告。横幅广告不接收 onClose() 回调。因此,必须在其他位置调用 destroy() 来结束广告。

 

BannerSize遵循标准横幅尺寸。

尺寸点(宽度x高度) 描述 支持对象 BannerSize 常量
320x50 横幅 手机和平板 BannerSize.NORMAL
320x100 大横幅 手机和平板 BannerSize.MEDIUM
300x250 IAB 中等矩形 手机和平板 BannerSize.LARGE
468 x 60 IAB 全尺寸横幅 平板 BannerSize.FULL

 

PositionType是最顶部或最底部。默认值是最底部。

对齐 描述 PositionType 常量
最顶部对齐 指定屏幕最顶部对齐 PositionType.TOP
最底部对齐(默认值) 指定屏幕最底部对齐 PositionType.BOTTOM
import android.app.Activity
import android.os.Bundle
import com.hive.adiz.AdizError
import com.hive.adiz.AdizListener
import com.hive.adiz.base.AdizBanner
import com.hive.adiz.common.AdRevenueData
import com.hive.adiz.common.BannerSize
import com.hive.adiz.common.PositionType

class BannerExample : Activity() {

    var banner: AdizBanner? = null

    // 设置横幅大小。
    var bannerSize = BannerSize.NORMAL

    override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)

            // ...

            // requestInitAd(this)
    }

    val adizListener = object : AdizListener() {
        override fun onLoad() {
            // requestShowAd()
        }

        override fun onFail(loadError: AdizError) {
            var code = loadError.getCode() // error code
            var message = loadError.getMessage() // error message
        }

        override fun onShow() {
            //
        }

        override fun onClick() {
            //
        }

        override fun onPaidEvent(adRevenueData: AdRevenueData) {
            var revenue = adRevenueData.revenue // revenue when ad is exposed
            var currency = adRevenueData.currency // currency code for revenue when ad is exposed
        }
    }

    fun requestInitAd(activity: Activity, hiveAdKey: String? = null) {

        if(hiveAdKey.isNullOrEmpty()) {
            // 创建一个横幅广告实例。
            banner = AdizBanner.initialize(activity, bannerSize, adizListener)
        } else {
            // 您可以通过输入hiveAdKey来创建一个横幅广告实例。
            banner = AdizBanner.initialize(activity, hiveAdKey, bannerSize, adizListener)
        }

        // requestLoadAd()
    }

    fun requestInitAdWithPlacementId(activity: Activity, placementId: String? = null) {

        if(placementId.isNullOrEmpty()) {
            // 创建一个横幅广告实例。
            banner = AdizBanner.initialize(activity, bannerSize, adizListener)
        } else {
            // 你可以通过输入placementId来创建一个横幅广告实例。
            banner = AdizBanner.initializeWithPlacementId(activity, placementId, bannerSize, adizListener)
        }

        // requestLoadAd()
    }

    fun requestLoadAd() {
        // 加载横幅广告。
        banner?.let { 
            if(it.isInitialized()) it.load()
        }
    }

    fun requestShowAd() {
        // 显示横幅广告。
        banner?.let { 
            if(it.isLoaded()) it.show()
        }

        // 设置横幅位置
        /* 
        var position = PositionType.TOP
        banner?.let {
            if(it.isLoaded()) it.show(position)
        } 
        */
    }

    fun requestDestroyAd() {
        // 移除横幅广告。
        banner?.destroy()
    }
}
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.hive.adiz.AdizError;
import com.hive.adiz.AdizListener;
import com.hive.adiz.base.AdizBanner;
import com.hive.adiz.common.AdRevenueData;
import com.hive.adiz.common.BannerSize;
import com.hive.adiz.common.PositionType;

public class BannerExample extends Activity {

        // 设置横幅大小。
        BannerSize bannerSize = BannerSize.NORMAL;
        AdizBanner banner = null;

        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                //...

                // requestInitAd(this, null);
        }

        AdizListener adizListener = new AdizListener() {
                @Override
                public void onLoad() {
                        // requestShowAd();
                }

                @Override
                public void onFail(@NonNull AdizError loadError) {
                        int code = loadError.getCode(); // error code
                        String message = loadError.getMessage(); // error message
                }

                @Override
                public void onShow() {

                }

                @Override
                public void onClick() {
                        //
                }

                @Override
                public void onPaidEvent(@NonNull AdRevenueData adRevenueData) {
                        double revenue = adRevenueData.getRevenue(); // revenue when ad is exposed
                        String currency = adRevenueData.getCurrency(); // currency code for revenue when ad is exposed
                }
        };

        public void requestInitAd(Activity activity, String hiveAdKey) {

                if(TextUtils.isEmpty(hiveAdKey)) {
                        // 创建一个横幅广告实例。
                        banner = AdizBanner.initialize(activity, bannerSize, adizListener);
                } else {
                        // 您可以通过输入hiveAdKey来创建一个横幅广告实例。
                        banner = AdizBanner.initialize(activity, hiveAdKey, bannerSize, adizListener);
                }

                // requestLoadAd();
        }

        public void requestInitAdWithPlacementId(Activity activity, String placementId) {

                if(TextUtils.isEmpty(placementId)) {
                        // 创建一个横幅广告实例。
                        banner = AdizBanner.initialize(activity, bannerSize, adizListener);
                } else {
                        // 您可以通过输入placementId来创建一个横幅广告实例。
                        banner = AdizBanner.initializeWithPlacementId(activity, placementId, bannerSize, adizListener);
                }

                // requestLoadAd();
        }

        private void requestLoadAd() {
                // 加载横幅广告。
                if(banner != null && banner.isInitialized()) banner.load();
        }

        private void  requestShowAd() {
                // 显示横幅广告。
                if(banner != null && banner.isLoaded()) banner.show();

                // 设置横幅位置
                // PositionType position = PositionType.TOP;
                // if(banner != null) banner.show(position);
        }

        private void  requestDestroyAd() {
                // 移除横幅广告。
                if(banner != null) banner.destroy();
        }
}

原生广告 (Native)

这是展示特定尺寸的原生模板的原生广告。原生广告经过优化,适合竖屏显示,因此建议在竖屏游戏中使用。原生广告不接收 onClose() 回调。因此,必须在其他位置调用 destroy() 来结束广告。

 

当前模板支持 smallmedium 尺寸。

模板 对齐 BannerSize 常量
小尺寸 顶部 / 底部 BannerSize.NORMAL
中尺寸 居中(固定) BannerSize.MEDIUM

 

small 模板中的 PositionType 是最顶部或最底部,默认值是最底部。

对齐 说明 PositionType 常量
最顶部对齐 指定屏幕最顶部对齐 PositionType.TOP
最底部对齐(默认值) 指定屏幕最底部对齐 PositionType.BOTTOM

 

medium 模板无法选择对齐方式,默认使用居中对齐。

import android.app.Activity
import android.os.Bundle
import com.hive.adiz.AdizError
import com.hive.adiz.AdizListener
import com.hive.adiz.base.AdizNative
import com.hive.adiz.common.AdRevenueData
import com.hive.adiz.common.BannerSize

class NativeAdExampleKT : Activity() {

        var nativeAd: AdizNative? = null

        // 设置横幅大小。
        var bannerSize = BannerSize.NORMAL

        override fun onCreate(savedInstanceState: Bundle?) {
                super.onCreate(savedInstanceState)

                // ...

                // requestInitAd(this)
        }

        val adizListener = object : AdizListener() {
                override fun onLoad() {
                        // requestShowAd()
                }

                override fun onFail(loadError: AdizError) {
                        var code = loadError.getCode() // 错误代码
                        var message = loadError.getMessage() // 错误信息
                }

                override fun onShow() {
                        //
                }

                override fun onClick() {
                        //
                }

                override fun onPaidEvent(adRevenueData: AdRevenueData) {
                        var revenue = adRevenueData.revenue // 广告显示时的收入
                        var currency = adRevenueData.currency // 广告显示时收入的货币代码
                }
        }

        fun requestInitAd(activity: Activity, hiveAdKey: String? = null) {

                if(hiveAdKey.isNullOrEmpty()) {
                        // 创建一个原生广告实例。
                        nativeAd = AdizNative.initialize(activity, bannerSize, adizListener)
                } else {
                        // 你可以通过输入hiveAdKey来创建一个原生广告实例。
                        nativeAd = AdizNative.initialize(activity, hiveAdKey, bannerSize, adizListener)
                }

                // requestLoadAd()
        }

        fun requestInitAdWithPlacementId(activity: Activity, placementId: String? = null) {

                if(placementId.isNullOrEmpty()) {
                        // 创建一个原生广告实例。
                        nativeAd = AdizNative.initialize(activity, bannerSize, adizListener)
                } else {
                        // 您可以通过输入placementId来创建一个原生广告实例。
                        nativeAd = AdizNative.initializeWithPlacementId(activity, placementId, bannerSize, adizListener)
                }

                // requestLoadAd()
        }

        fun requestLoadAd() {
                // 加载原生广告。
                nativeAd?.let { 
                        if(it.isInitialized()) it.load()
                }
        }

        fun requestShowAd() {
                // Expose the native ad.
                nativeAd?.let { 
                        if(it.isLoaded()) it.show()
                }

                // 设置横幅位置
                /* 
                var position = PositionType.TOP
                nativeAd?.let {
                        if(it.isLoaded()) it.show(position)
                } 
                */
        }

        fun requestDestroyAd() {
                // 移除原生广告。
                nativeAd?.destroy()
        }
}
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.hive.adiz.AdizError;
import com.hive.adiz.AdizListener;
import com.hive.adiz.base.AdizNative;
import com.hive.adiz.common.AdRevenueData;
import com.hive.adiz.common.BannerSize;
import com.hive.adiz.common.PositionType;

public class NativeAdExample extends Activity {

        // 设置横幅大小。
        BannerSize bannerSize = BannerSize.NORMAL;
        AdizNative nativeAd = null;

        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                //...

                // requestInitAd(this, null);
        }

        AdizListener adizListener = new AdizListener() {
                @Override
                public void onLoad() {
                        // requestShowAd();
                }

                @Override
                public void onFail(@NonNull AdizError loadError) {
                        int code = loadError.getCode(); // 错误代码
                        String message = loadError.getMessage(); // 错误信息
                }

                @Override
                public void onShow() {

                }

                @Override
                public void onClick() {
                        //
                }

                @Override
                public void onPaidEvent(@NonNull AdRevenueData adRevenueData) {
                        double revenue = adRevenueData.getRevenue(); // 广告显示时的收入
                        String currency = adRevenueData.getCurrency(); // 广告显示时的收入货币代码
                }
        };

        public void requestInitAd(Activity activity, String hiveAdKey) {

                if(TextUtils.isEmpty(hiveAdKey)) {
                        // 创建一个原生广告实例。(如果没有输入HiveAdKey,则实例将使用默认密钥创建,设置为is_default=true,这是在Hive Adiz初始化期间接收到的。)
                        nativeAd = AdizNative.initialize(activity, bannerSize, adizListener);
                } else {
                        // 您可以通过输入hiveAdKey来创建一个原生广告实例。
                        nativeAd = AdizNative.initialize(activity, hiveAdKey, bannerSize, adizListener);
                }

                // requestLoadAd();
        }

        public void requestInitAdWithPlacementId(Activity activity, String placementId) {

                if(TextUtils.isEmpty(placementId)) {
                        // 创建一个原生广告实例。 (如果未输入HiveAdKey,则使用默认密钥创建实例,设置为is_default=true,这是在初始化Hive Adiz时接收到的。)
                        nativeAd = AdizNative.initialize(activity, bannerSize, adizListener);
                } else {
                        // 您可以通过输入placementId来创建一个原生广告实例。
                        nativeAd = AdizNative.initializeWithPlacementId(activity, placementId, bannerSize, adizListener);
                }

                // requestLoadAd();
        }

        private void requestLoadAd() {
                // 加载原生广告。
                if(nativeAd != null && nativeAd.isInitialized()) nativeAd.load();
        }

        private void  requestShowAd() {
                // 显示本地广告。
                if(nativeAd != null && nativeAd.isLoaded()) nativeAd.show();

                // 设置横幅位置
                // PositionType position = PositionType.TOP;
                // if(nativeAd != null && nativeAd.isLoaded()) nativeAd.show(position);
        }

        private void  requestDestroyAd() {
                // 移除本地广告。
                if(nativeAd != null) nativeAd.destroy();
        }
}

奖励广告 (Rewarded)

用户在观看广告超过一定时间后会获得奖励的奖励广告。完成奖励发放后,将通过 onRewarded() 回调接收奖励项目的信息。

import android.app.Activity
import android.os.Bundle
import com.hive.adiz.AdizError
import com.hive.adiz.AdizListener
import com.hive.adiz.base.AdizRewarded
import com.hive.adiz.common.AdRevenueData

class RewardedExample : Activity() {

        var rewardedAd: AdizRewarded? = null

        override fun onCreate(savedInstanceState: Bundle?) {
                super.onCreate(savedInstanceState)

                // ...

                // requestInitAd(this)
        }

        val adizListener = object : AdizListener() {
                override fun onLoad() {
                        // requestShowAd()
                }

                override fun onFail(loadError: AdizError) {
                        var code = loadError.getCode() // 错误代码
                        var message = loadError.getMessage() // 错误信息
                }

                override fun onShow() {
                        //
                }

                override fun onClick() {
                        //
                }

                override fun onPaidEvent(adRevenueData: AdRevenueData) {
                        var revenue = adRevenueData.revenue // 广告展示时的收入
                        var currency = adRevenueData.currency // 广告展示时收入的货币代码
                }

                override fun onClose() {
                        // requestDestroyAd()
                }

                override fun onRewarded(rewardItem: RewardItem) {
                        var itemType = rewardItem.itemType // 奖励物品类型
                        var itemAmount = rewardItem.itemAmount // 奖励物品数量
                }
        }

        fun requestInitAd(activity: Activity, hiveAdKey: String? = null) {

                if(hiveAdKey.isNullOrEmpty()) {
                        // 创建一个奖励广告实例。
                        rewardedAd = AdizRewarded.initialize(activity, adizListener)
                } else {
                        // 您可以通过输入hiveAdKey来创建奖励广告实例。
                        rewardedAd = AdizRewarded.initialize(activity, hiveAdKey, adizListener)
                }

                // requestLoadAd()
        }

        fun requestInitAdWithPlacementId(activity: Activity, placementId: String? = null) {

                if(placementId.isNullOrEmpty()) {
                        // 创建一个奖励广告实例。
                        rewardedAd = AdizRewarded.initialize(activity, adizListener)
                } else {
                        // 你可以通过输入placementId来创建一个奖励广告实例。
                        rewardedAd = AdizRewarded.initializeWithPlacementId(activity, placementId, adizListener)
                }

                // requestLoadAd()
        }

        fun requestLoadAd() {
                // 加载奖励广告。
                rewardedAd?.let {
                        if(it.isInitialized()) it.load()
                }
        }

        fun requestShowAd() {
                // 显示奖励广告。
                rewardedAd?.let {
                        if(it.isLoaded()) it.show()
                }
        }

        fun requestDestroyAd() {
                // 移除奖励广告。
                rewardedAd?.destroy()
        }
}
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.hive.adiz.AdizError;
import com.hive.adiz.AdizListener;
import com.hive.adiz.base.AdizRewarded;
import com.hive.adiz.common.AdRevenueData;

public class RewardedExample extends Activity {

        AdizRewarded rewardedAd = null;

        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                //...

                // requestInitAd(this, null);
        }

        AdizListener adizListener = new AdizListener() {
                @Override
                public void onLoad() {
                        // requestShowAd();
                }

                @Override
                public void onFail(@NonNull AdizError loadError) {
                        int code = loadError.getCode(); // 错误代码
                        String message = loadError.getMessage(); // 错误信息
                }

                @Override
                public void onShow() {
                        //
                }

                @Override
                public void onClick() {
                        //
                }

                @Override
                public void onPaidEvent(@NonNull AdRevenueData adRevenueData) {
                        double revenue = adRevenueData.getRevenue(); // 广告显示时的收入
                        String currency = adRevenueData.getCurrency(); // 广告显示时的收入货币代码
                }

                @Override
                public void onClose() {
                        // requestDestroyAd();
                }

                @Override
                public void onRewarded(@NonNull RewardItem rewardItem) {
                        String rewardType = rewardItem.getItemType(); // 奖励物品类型
                        int rewardAmount = rewardItem.getItemAmount(); // 奖励物品数量  
                }
        };

        public void requestInitAd(Activity activity, String hiveAdKey) {

                if(TextUtils.isEmpty(hiveAdKey)) {
                        // 创建一个奖励广告实例。(如果没有输入HiveAdKey,则使用默认密钥(is_default=true)创建实例,该密钥是在Hive Adiz初始化期间接收的。)
                        rewardedAd = AdizRewarded.initialize(activity, adizListener);
                } else {
                        // 您可以通过输入hiveAdKey来创建奖励广告实例。
                        rewardedAd = AdizRewarded.initialize(activity, hiveAdKey, adizListener);
                }

                // requestLoadAd();
        }

        public void requestInitAdWithPlacementId(Activity activity, String placementId) {

                if(TextUtils.isEmpty(placementId)) {
                        // 创建一个奖励广告实例。(如果没有输入HiveAdKey,则使用默认密钥(is_default=true)创建实例,该密钥在Hive Adiz初始化期间接收。)
                        rewardedAd = AdizRewarded.initialize(activity, adizListener);
                } else {
                        // 您可以通过输入placementId来创建奖励广告实例。
                        rewardedAd = AdizRewarded.initializeWithPlacementId(activity, placementId, adizListener);
                }

                // requestLoadAd();
        }

        private void requestLoadAd() {
                // 加载奖励广告。
                if(rewardedAd != null && rewardedAd.isInitialized()) rewardedAd.load();
        }

        private void  requestShowAd() {
                // 显示奖励广告。
                if(rewardedAd != null && rewardedAd.isLoaded()) rewardedAd.show();
        }

        private void  requestDestroyAd() {
                // 移除奖励广告。
                if(rewardedAd != null) rewardedAd.destroy();
        }
}

奖励型插屏广告 (Rewarded Interstitial)

用户在观看广告超过一定时间后会获得奖励的奖励型插屏广告。完成奖励发放后,将通过 onRewarded() 回调接收奖励物品信息。

import android.app.Activity
import android.os.Bundle
import com.hive.adiz.AdizError
import com.hive.adiz.AdizListener
import com.hive.adiz.base.AdizRewardedInterstitial
import com.hive.adiz.common.AdRevenueData
import com.hive.adiz.rewarded.RewardItem

class RewardedInterstitialExample : Activity() {

        var rewardedInterstitialAd: AdizRewardedInterstitial? = null

        override fun onCreate(savedInstanceState: Bundle?) {
                super.onCreate(savedInstanceState)

                // ...

                // requestInitAd(this)
        }

        val adizListener = object : AdizListener() {
                override fun onLoad() {
                        // requestShowAd()
                }

                override fun onFail(loadError: AdizError) {
                        var code = loadError.getCode() // 错误代码
                        var message = loadError.getMessage() // 错误信息
                }

                override fun onShow() {
                        //
                }

                override fun onClick() {
                        //
                }

                override fun onPaidEvent(adRevenueData: AdRevenueData) {
                        var revenue = adRevenueData.revenue // 广告显示时产生的收入
                        var currency = adRevenueData.currency // 广告显示时的收入货币代码
                }

                override fun onClose() {
                        // requestDestroyAd()
                }

                override fun onRewarded(rewardItem: RewardItem) {
                        var itemType = rewardItem.itemType // 奖励物品类型
                        var itemAmount = rewardItem.itemAmount // 奖励物品数量
                }
        }

        fun requestInitAd(activity: Activity, hiveAdKey: String? = null) {

                if(hiveAdKey.isNullOrEmpty()) {
                        // 创建奖励插页广告的实例。
                        rewardedInterstitialAd = AdizRewardedInterstitial.initialize(activity, adizListener)
                } else {
                        // 您可以通过输入hiveAdKey来创建奖励插页广告的实例。
                        rewardedInterstitialAd = AdizRewardedInterstitial.initialize(activity, hiveAdKey, adizListener)
                }

                // requestLoadAd()
        }

        fun requestInitAdWithPlacementId(activity: Activity, placementId: String? = null) {

                if(placementId.isNullOrEmpty()) {
                        // 创建奖励插页广告的实例。
                        rewardedInterstitialAd = AdizRewardedInterstitial.initialize(activity, adizListener)
                } else {
                        // 通过输入placementId来创建奖励插页广告的实例。
                        rewardedInterstitialAd = AdizRewardedInterstitial.initializeWithPlacementId(activity, placementId, adizListener)
                }

                // requestLoadAd()
        }

        fun requestLoadAd() {
                // 加载奖励插页广告。
                rewardedInterstitialAd?.let {
                        if(it.isInitialized()) it.load()
                }
        }

        fun requestShowAd() {
                // 显示奖励插页广告。
                rewardedInterstitialAd?.let {
                        if(it.isLoaded()) it.show()
                }
        }

        fun requestDestroyAd() {
                // 移除奖励插页广告。
                rewardedInterstitialAd?.destroy()
        }
}
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.hive.adiz.AdizError;
import com.hive.adiz.AdizListener;
import com.hive.adiz.base.AdizRewardedInterstitial;
import com.hive.adiz.common.AdRevenueData;
import com.hive.adiz.rewarded.RewardItem;

public class RewardedInterstitialExample extends Activity {

        AdizRewardedInterstitial rewardedInterstitialAd = null;

        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                //...

                // requestInitAd(this, null);
        }

        AdizListener adizListener = new AdizListener() {
                @Override
                public void onLoad() {
                        // requestShowAd();
                }

                @Override
                public void onFail(@NonNull AdizError loadError) {
                        int code = loadError.getCode(); // 错误代码
                        String message = loadError.getMessage(); // 错误信息
                }

                @Override
                public void onShow() {
                        //
                }

                @Override
                public void onClick() {
                        //
                }

                @Override
                public void onPaidEvent(@NonNull AdRevenueData adRevenueData) {
                        double revenue = adRevenueData.getRevenue(); // 广告显示时产生的收入
                        String currency = adRevenueData.getCurrency(); // 广告显示时的货币代码
                }

                @Override
                public void onClose() {
                        // requestDestroyAd();
                }

                @Override
                public void onRewarded(@NonNull RewardItem rewardItem) {
                        String rewardType = rewardItem.getItemType(); // 奖励物品类型
                        int rewardAmount = rewardItem.getItemAmount(); // 奖励物品数量
                }
        };

        public void requestInitAd(Activity activity, String hiveAdKey) {

                if(TextUtils.isEmpty(hiveAdKey)) {
                        // 创建奖励插页广告的实例(如果没有输入广告密钥(HiveAdKey),则在Hive Adiz初始化期间将使用默认密钥(is_default=true)创建实例。)
                        rewardedInterstitialAd = AdizRewardedInterstitial.initialize(activity, adizListener);
                } else {
                        // 通过输入hiveAdKey可以创建奖励插页广告的实例。
                        rewardedInterstitialAd = AdizRewardedInterstitial.initialize(activity, hiveAdKey, adizListener);
                }

                // requestLoadAd();
        }

        public void requestInitAdWithPlacementId(Activity activity, String placementId) {

                if(TextUtils.isEmpty(placementId)) {
                        // 创建一个奖励插页广告的实例(如果没有输入广告密钥(HiveAdKey),则在Hive Adiz初始化期间将使用默认密钥(is_default=true)创建实例。)
                        rewardedInterstitialAd = AdizRewardedInterstitial.initialize(activity, adizListener);
                } else {
                    // 您可以通过输入placementId来创建奖励插页广告的实例。
                    rewardedInterstitialAd = AdizRewardedInterstitial.initializeWithPlacementId(activity, placementId, adizListener);
                }

                // requestLoadAd();
        }

        private void requestLoadAd() {
                // 加载奖励插页广告。
                if(rewardedInterstitialAd != null && rewardedInterstitialAd.isInitialized()) rewardedInterstitialAd.load();
        }

        private void  requestShowAd() {
                // 显示奖励插页广告。
                if(rewardedInterstitialAd != null && rewardedInterstitialAd.isLoaded()) rewardedInterstitialAd.show();
        }

        private void  requestDestroyAd() {
                // 移除奖励插页广告。
                if(rewardedInterstitialAd != null) rewardedInterstitialAd.destroy();
        }
}

应用开启广告 (AppOpen)

当应用状态从后台切换到前台时,展示预先加载的(load())广告的应用开启广告。在广告加载后经过3小时,如果调用show(),则会自动重新加载广告后展示广告。一旦广告展示过一次后,广告将不会自动加载。

import android.app.Activity
import android.os.Bundle
import com.hive.adiz.AdizError
import com.hive.adiz.AdizListener
import com.hive.adiz.base.AdizAppOpen
import com.hive.adiz.common.AdRevenueData

class AppOpenExample : Activity() {

        var appOpen: AdizAppOpen? = null

        override fun onCreate(savedInstanceState: Bundle?) {
                super.onCreate(savedInstanceState)

                // ...

                // requestInitAd(this)
        }

        val adizListener = object : AdizListener() {
                override fun onLoad() {
                        //
                }

                override fun onFail(loadError: AdizError) {
                        var code = loadError.getCode() // 错误代码
                        var message = loadError.getMessage() // 错误信息
                }

                override fun onShow() {
                        //
                }

                override fun onClick() {
                        //
                }

                override fun onPaidEvent(adRevenueData: AdRevenueData) {
                        var revenue = adRevenueData.revenue // 广告显示时的收入
                        var currency = adRevenueData.currency // 广告显示时的收入货币代码
                }

                override fun onClose() {
                        // requestDestroyAd()
                }
        }

        fun requestInitAd(activity: Activity, hiveAdKey: String? = null) {

                if(hiveAdKey.isNullOrEmpty()) {
                        // 创建一个应用打开广告实例。
                        appOpen = AdizAppOpen.initialize(activity, adizListener)
                } else {
                        // 通过输入hiveAdKey可以创建应用打开广告实例。
                        appOpen = AdizAppOpen.initialize(activity, hiveAdKey, adizListener)
                }

                // requestLoadAd()
        }

        fun requestInitAdWithPlacementId(activity: Activity, placementId: String? = null) {

                if(placementId.isNullOrEmpty()) {
                        // 创建应用打开广告实例。
                        appOpen = AdizAppOpen.initialize(activity, adizListener)
                } else {
                        // 通过输入placementId创建应用打开广告实例。
                        appOpen = AdizAppOpen.initializeWithPlacementId(activity, placementId, adizListener)
                }

                // requestLoadAd()
        }

        fun requestLoadAd() {
                // 加载应用打开广告。加载完成后,当应用从后台切换到前台时,广告将自动显示。
                // 一旦广告至少显示一次,它将不会重新显示,因此如果您想继续显示广告,需要在onClose()回调中再次调用appOpen.load()。
                appOpen?.let {
                        if(it.isInitialized()) it.load()
                }
        }

        fun requestDestroyAd() {
                // 移除应用打开广告。
                appOpen?.destroy()
        }
}
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.hive.adiz.AdizError;
import com.hive.adiz.AdizListener;
import com.hive.adiz.base.AdizAppOpen;
import com.hive.adiz.common.AdRevenueData;

public class AppOpenExample extends Activity {

        AdizAppOpen appOpen = null;

        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                //...

                // requestInitAd(this, null);
        }

        AdizListener adizListener = new AdizListener() {
                @Override
                public void onLoad() {
                        //
                }

                @Override
                public void onFail(@NonNull AdizError loadError) {
                        int code = loadError.getCode(); // 错误代码
                        String message = loadError.getMessage(); // 错误信息
                }

                @Override
                public void onShow() {
                        //
                }

                @Override
                public void onClick() {
                        //
                }

                @Override
                public void onPaidEvent(@NonNull AdRevenueData adRevenueData) {
                        double revenue = adRevenueData.getRevenue(); // 广告显示时的收入
                        String currency = adRevenueData.getCurrency(); // 广告显示时的收入货币代码
                }

                @Override
                public void onClose() {
                        // requestDestroyAd();
                }
        };

        public void requestInitAd(Activity activity, String hiveAdKey) {

                if(TextUtils.isEmpty(hiveAdKey)) {
                        // 创建一个应用打开广告实例。 (如果没有输入广告密钥(HiveAdKey),则在Hive Adiz初始化期间将使用默认密钥(is_default=true)创建实例。)
                        appOpen = AdizAppOpen.initialize(activity, adizListener);
                } else {
                        // 通过输入hiveAdKey可以创建应用打开广告实例。
                        appOpen = AdizAppOpen.initialize(activity, hiveAdKey, adizListener);
                }

                // requestLoadAd();
        }

        public void requestInitAdWithPlacementId(Activity activity, String placementId) {

                if(TextUtils.isEmpty(placementId)) {
                        // 创建一个应用打开广告实例。 (如果没有输入广告密钥(HiveAdKey),则在Hive Adiz初始化期间将使用默认密钥(is_default=true)创建实例。)
                        appOpen = AdizAppOpen.initialize(activity, adizListener);
                } else {
                        // 您可以通过输入placementId来创建应用打开广告实例。
                        appOpen = AdizAppOpen.initializeWithPlacementId(activity, placementId, adizListener);
                }

                // requestLoadAd();
        }

        private void requestLoadAd() {
                // 加载应用打开广告。
                if(appOpen != null && appOpen.isInitialized()) appOpen.load();
        }

        private void  requestDestroyAd() {
                // 移除应用打开广告。
                if(appOpen != null) appOpen.destroy();
        }
}