跳轉至

Android

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 廣告密鑰,也會顯示測試廣告。在商業發佈時,請禁用測試模式。

測試模式啟用方法有兩種。
<

  • 在 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 同意弹出窗口是否正常工作时
  • 运行 广告检查器 以分析和调试广告请求时

在測試設備上顯示廣告的方法有兩種。

  • 在注册测试设备到哈伊夫控制台后,设置为 使用广告单元 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. 在應用程式中實現可以重新調出GDPR同意彈出窗口的按鈕UI。
  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

        PrivacySettings 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 地址時顯示。在開發階段,無論 IP 地址如何,都可以強制顯示 GDPR 同意彈出窗口以測試彈出窗口的顯示,為此需要設置 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?) {
                        // ... 生略
                }
        })
}
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

        PrivacySettings 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 步 將 AppLovin 廣告來源添加到 AdMob 將 Pangle 廣告來源添加到 AdMob 將 Unity Ads 廣告來源添加到 AdMob 將 Meta 廣告來源添加到 AdMob
第 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) 在獎勵型廣告(rewarded, rewarded 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()

全屏廣告(Interstitial)

佔據整個螢幕的全屏廣告。

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() // 錯誤代碼
            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()) {
            // 创建插页广告实例。
            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() {
        // 顯示插頁廣告。
        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(); // 錯誤代碼
            String message = loadError.getMessage(); // 錯誤信息
        }

        @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() // 錯誤代碼
            var message = loadError.getMessage() // 錯誤訊息
        }

        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(); // 錯誤代碼
                        String message = loadError.getMessage(); // 錯誤信息
                }

                @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 位置 = PositionType.TOP;
                // if(banner != null) banner.show(位置);
        }

        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(); // Revenue when ad is shown
                        String currency = adRevenueData.getCurrency(); // Currency code for revenue when ad is shown
                }
        };

        public void requestInitAd(Activity activity, String hiveAdKey) {

                if(TextUtils.isEmpty(hiveAdKey)) {
                        // 創建一個原生廣告實例。(如果未輸入 HiveAdKey,則使用在 Hive Adiz 初始化期間接收到的默認鍵設置為 is_default=true 創建實例。)
                        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,则使用在Hive Adiz初始化期间接收到的默认密钥is_default=true创建实例。)
                        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 位置 = PositionType.TOP;
                // 如果(nativeAd != null && nativeAd.isLoaded()) nativeAd.show(位置);
        }

        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,則使用在 Hive Adiz 初始化期間接收到的默認密鑰(is_default=true)創建實例。)
                        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();
        }
}