跳转至

安卓

Adiz Android

Adiz Android 是 Hive 提供的一个 Android 广告模块,旨在简化使用 AdMob 提供的广告曝光功能。Adiz Android 提供的广告类型如下:

  • 插页广告
  • 横幅广告
  • 原生广告
  • 激励广告
  • 激励插页广告
  • 应用打开广告

要安装和使用 Adiz Android,请按照下面的指南进行。

安装

将 Adiz 库条目添加到应用级 Gradle 文件(app/build.gradle)。

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

要支持 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 广告密钥,也会显示测试广告。在商业发布期间禁用测试模式。

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

  • 在Hive控制台注册测试设备后,使用演示广告进行设置(推荐):
    请参考控制台指南的管理测试设备部分。
  • 使用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

如果您进行测试而未注册测试设备,实际广告将被视为无效流量,您的 AdMob 账户可能会被封锁,从而阻止进一步的广告曝光。当您注册测试设备时,在广告曝光期间将显示“测试模式”或“测试广告”(原生广告)。在商业分发期间,您必须停用测试设备。


横幅广告、插页广告或奖励广告


原生广告


使用 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)。将复制的测试设备ID输入到DEVICE_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?) {
                        // ... omitted
                }
        })
}
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()) {
                                // ... omitted
                        }
                }
        });
}


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()) {
                                // ... omitted
                        }
                }
        });
}


广告检查器使用

广告检查器是一个应用内覆盖工具,实时分析在测试设备上请求和显示实际广告的过程。它会告知您加载广告所需的时间,如果显示失败,则提供失败的原因。您还可以指定特定的广告网络,以检查广告是否正常显示,如果存在问题,您可以在代码级别进行调试。所有这些都是在广告检查器用户界面旁边完成的。它包含在 Google Mobile Ads SDK 版本 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);

如果游戏面向欧洲和英国(欧洲经济区和英国),则必须显示GDPR(通用数据保护条例)同意弹窗。只有当用户的设备IP地址来自欧洲和英国(欧洲经济区和英国)时,GDPR同意弹窗才会显示。Adiz通过Google UMP(用户消息平台)支持GDPR同意弹窗的显示。在AdMob控制台中创建GDPR消息后,初始化Adiz以向来自欧洲和英国的用户显示GDPR弹窗。

Warning

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

GDPR 消息创建

1) 访问 Google AdMob 仪表板并创建您的 GDPR 消息。在创建 GDPR 消息之前,请参考GDPR 消息创建指南

在创建GDPR消息时,您必须将希望使用的调解添加到广告合作伙伴列表中。 以下是如何添加调解的方法。

1) 前往 Google AdMob 仪表板上的 隐私与消息 > 欧洲法规 > 设置 选项卡,然后点击“广告合作伙伴审核 > 自定义广告合作伙伴”的编辑图标。 2) 检查所有在 GDPR 下获得 Google 认证的调解合作伙伴以批量添加,或仅选择所需的调解合作伙伴并点击 添加

如果您已经编写了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) {
                                    // ... omitted
                                    // 决定是否在应用程序中显示按钮以重新打开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()) {
            // ... omitted
            // 决定是否在应用中显示按钮以重新打开GDPR同意弹出窗口
            boolean isPrivacyOptionsRequired = AdizConsentManager.isPrivacyOptionsRequired();
            if(isPrivacyOptionsRequired) {
                // 在应用中显示按钮。 (当按钮被点击时,调用showPrivacyOptionsForm()以显示GDPR同意弹出窗口)
                showGDPRConsentPopupButton();
            } else {
                // 不在应用中显示按钮。
                // 根据应用的需求进行其他处理。
            }
        }
    }
    });
    }


    public void showPrivacyOptionsForm(Activity activity) {
            // Call GDPR consent options form
            if(AdizConsentManager.isPrivacyOptionsRequired()) {
                    AdizConsentManager.showPrivacyOptionsForm(activity, new AdizConsentManager.ConsentListener() {
                            @Override
                            public void onResult(@NonNull AdizError error) {
                                    // No need to do any error handling.
                            }
                    });
            }
    }

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

您可以使用未成年同意标签(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 中设置的同意年龄将自动适用于该年龄以下的用户。

然而,如果用户在执行 Adiz.initialize 之前直接调用 AdizConsentManager.setUserPrivacySettings API,则 Hive SDK 设置的同意年龄设置将不适用,并且在 AdizConsentManager.setUserPrivacySettings API 调用期间设置的值将优先考虑。

 

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?) {
                        // ... omitted
                }
        })
}
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()) {
                                // ... omitted
                        }
                }
        });
}

GDPR 测试设备设置

GDPR 同意弹窗仅在设备的 IP 地址来自欧洲或英国时显示。在开发阶段,可以强制显示 GDPR 同意弹窗,而不考虑 IP 地址,以测试弹窗显示,为此,必须设置 GDPR 测试设备。通过在 Hive 控制台中设置测试设备,可以轻松进行测试。 使用 setTestDevice 方法进行设置的方法如下,与 在测试设备上显示广告 的方法相同。

  1. 通过初始化来初始化Adiz。这是一个初始化过程,用于检查测试设备ID,无需编写GDPR同意消息。
  2. 检查logcat输出,确认设备ID的消息。以下是一个示例消息。

    使用新的ConsentDebugSettings.Builder().addTestDeviceHashedId("33BE2250B43518CCDA7DE426D04EE231")将其设置为调试设备。
    
  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?) {
                        // ... omitted
                }
        })
}
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()) {
                                // ... omitted
                        }
                }
        });
}

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?) {
                        // ... omitted
                }
        })
}
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; // Change to true if it is for children

        隐私设置 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()) {
                                // ... omitted
                        }
                }
        });
}

添加广告调解

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

添加 AdMob 中介

我们将继续在 AdMob 控制台中集成广告源。请按照下表继续。

AppLovin Liftoff Monetize Meta Audience Network Pangle Unity Ads ironSource
步骤 1 设置 AppLovin 配置 设置 Liftoff Monetize 配置 设置 Meta Audience Network 配置 设置 Pangle 配置 设置 Unity Ads 配置 设置 ironSource 配置
步骤 2 将 AppLovin 广告源添加到 AdMob 将 Liftoff Monetize 广告源添加到 AdMob 将 Meta Audience Network 广告源添加到 AdMob 将 Pangle 广告源添加到 AdMob 将 Unity Ads 广告源添加到 AdMob 将 ironSource 广告源添加到 AdMob
步骤 3 添加 Adiz 适配器

添加 Adiz 适配器

将库依赖添加到应用级 build.gradle

dependencies {
    // ... (생략)

    implementation 'com.com2us.android.adiz:hive-adiz:2.1.3' // 공통 (필수 추가)

    implementation 'com.com2us.android.adiz:hive-adiz-adapter-applovin:2.1.3'   // AppLovin 연동시 추가
    implementation 'com.com2us.android.adiz:hive-adiz-adapter-liftoff:2.1.3'    // Liftoff Monetize 연동시 추가
    implementation 'com.com2us.android.adiz:hive-adiz-adapter-meta:2.1.3'       // Meta Audience Network 연동시 추가
    implementation 'com.com2us.android.adiz:hive-adiz-adapter-pangle:2.1.3'     // Pangle 연동시 추가
    implementation 'com.com2us.android.adiz:hive-adiz-adapter-unityads:2.1.3'   // Unity Ads 연동시 추가
    implementation 'com.com2us.android.adiz:hive-adiz-adapter-ironsource:2.1.3' // ironSource 연동시 추가
}

 

根据集成 Pangle 或 ironSource 时使用的 Gradle 版本添加配置代码。

  • 如果您使用的是 Gradle 7.0 或更高版本,请在项目级 settings.gradledependencyResolutionManagement 部分添加 repository 设置。

    // 当使用 Gradle 7.0 或更高版本时,配置 settings.gradle
    
    依赖解析管理 {
            仓库 {
                    maven { url 'https://artifact.bytedance.com/repository/pangle/' }   // 集成 Pangle 时添加
            maven { url 'https://android-sdk.is.com/' }                         // 集成 ironSource 时添加
            }
    }
    
  • 如果您使用的是低于 7.0 的 Gradle 版本,请在项目级 build.gradleallprojects 部分添加 repository 设置。

    // 使用低于7.0版本的Gradle时的build.gradle配置
    
    allprojects {
            repositories {
                    maven {
                            url 'https://artifact.bytedance.com/repository/pangle'  // Add when integrating Pangle
                url 'https://android-sdk.is.com/'                       // Add when integrating ironSource
                    }
    
            }
    }
    

 

要检查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>();

                尝试 {
                    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) 用户在基于奖励的广告中(rewarded, rewarded interstitial)广告曝光后接收奖励的时间点 X
var adizListener = object : AdizListener() {
    override fun onLoad() {
        // Called when the ad is loaded.
        // If the ad load is successful, you need to call the ad instance's .show() at the desired point to display the ad.
    }

    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() {
        // Called when the ad is closed.
        // Banner, Native ads do not have an onClose callback.
    }

    override fun onRewarded(rewardItem: RewardItem) {         
        // 当观看广告时创建奖励时调用,适用于奖励和奖励插页广告。
        var itemType = rewardItem.itemType // 奖励物品类型
        var itemAmount = rewardItem.itemAmount // 奖励物品数量   
    } 
}
AdizListener adizListener = new AdizListener() {
    @Override
    public void onLoad() {
        // Called when the ad is loaded.
        // If the ad load is successful, you need to call the ad instance's .show() at the desired point to display the ad.
    }

    @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) {
        // Called when a reward occurs for watching the ad in rewarded, rewarded interstitial ads.
        String rewardType = rewardItem.getItemType(); // Reward item type
        int rewardAmount = rewardItem.getItemAmount(); // Reward item quantity
    }
};

错误代码

在接收到 onFail()Adiz.InitializeAdizListener 时,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 // revenue when ad is exposed
            var currency = adRevenueData.currency // currency code for revenue when ad is exposed
        }

        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.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(); // 广告曝光时的收入
                        String currency = adRevenueData.getCurrency(); // 广告曝光时的收入货币代码
                }
        };

        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.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() {
                // Remove the native ad.
                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() {
                // Remove the native ad.
                if(nativeAd != null) nativeAd.destroy();
        }
}

奖励广告

这是一个奖励广告,用户在观看广告一定时间后会获得奖励。一旦奖励被授予,奖励项目的信息将通过 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();
        }
}

奖励插页广告

这是一个奖励插页广告,用户在观看广告一定时间后会获得奖励。一旦奖励被授予,奖励项目的信息将通过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() {
                // Removes the rewarded interstitial ad.
                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() {
                // Removes the rewarded interstitial ad.
                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() {
                // Removes the app opening ad.
                if(appOpen != null) appOpen.destroy();
        }
}