跳轉至

Android

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);

如果遊戲的目標是歐洲和英國(EEA 和英國),則必須顯示 GDPR(一般數據保護條例)同意彈出窗口。只有當用戶的設備 IP 地址來自歐洲和英國(EEA 和英國)時,才會顯示 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消息,GDPR同意彈出窗口將在您初始化Adiz時自動出現。

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
                                    // Decide whether to display a button in the app to reopen the GDPR consent popup
                                    var isPrivacyOptionsRequired = AdizConsentManager.isPrivacyOptionsRequired()
                                    if(isPrivacyOptionsRequired) {
                                            // Display the button in the app. (When the button is clicked, showPrivacyOptionsForm() is called to display the GDPR consent popup)
                                            showGDPRConsentPopupButton()
                                    } else {
                                            // Do not display the button in the app.
                                            // Other processing desired by the app.
                                    }
                            }
                    }
            })
    }


    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
            // Decide whether to display a button in the app to reopen the GDPR consent popup
            boolean isPrivacyOptionsRequired = AdizConsentManager.isPrivacyOptionsRequired();
            if(isPrivacyOptionsRequired) {
                // Display the button in the app. (When the button is clicked, showPrivacyOptionsForm() is called to display the GDPR consent popup)
                showGDPRConsentPopupButton();
            } else {
                // Do not display the button in the app.
                // Other processing as desired by the app.
            }
        }
    }
    });
    }


    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; // Change to true if a child

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

        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()) {
                                // ... 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 時添加
            }
    }
    
  • 如果您使用的 Gradle 版本低于 7.0,请在项目级 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) 用戶在基於獎勵的廣告中(rewardedrewarded 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() {
        // 當廣告關閉時被調用。
        // 橫幅廣告、原生廣告沒有 onClose 回調。
    }

    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(); // 錯誤代碼
            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() {
        // Expose the interstitial ad.
        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(); // 錯誤代碼
                        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() {
                // Load the banner ad.
                if(banner != null && banner.isInitialized()) banner.load();
        }

        private void  requestShowAd() {
                // Expose the banner ad.
                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 // Revenue when ad is shown
                        var currency = adRevenueData.currency // Currency code for revenue when ad is shown
                }
        }

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

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

                // requestLoadAd()
        }

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

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

                // requestLoadAd()
        }

        fun requestLoadAd() {
                // 載入原生廣告。
                nativeAd?.let { 
                        if(it.isInitialized()) it.load()
                }
        }

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

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

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

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

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

public class NativeAdExample extends Activity {

        // 設定橫幅大小。
        BannerSize bannerSize = BannerSize.NORMAL;
        AdizNative nativeAd = null;

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

                //...

                // requestInitAd(this, null);
        }

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

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

                @Override
                public void onShow() {

                }

                @Override
                public void onClick() {
                        //
                }

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

        public void requestInitAd(Activity activity, String hiveAdKey) {

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

                // requestLoadAd();
        }

        public void requestInitAdWithPlacementId(Activity activity, String placementId) {

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

                // requestLoadAd();
        }

        private void requestLoadAd() {
                // Load the native ad.
                if(nativeAd != null && nativeAd.isInitialized()) nativeAd.load();
        }

        private void  requestShowAd() {
                // 顯示原生廣告。
                if(nativeAd != null && nativeAd.isLoaded()) nativeAd.show();

                // 設定橫幅位置
                // 位置類型 position = PositionType.TOP;
                // 如果(nativeAd != null && nativeAd.isLoaded()) nativeAd.show(position);
        }

        private void  requestDestroyAd() {
                // 移除原生廣告。
                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 // Reward item type
                        var itemAmount = rewardItem.itemAmount // Reward item quantity
                }
        }

        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() {
                // Load the rewarded ad.
                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)) {
                        // Creates an instance of rewarded interstitial ad (If the ad key (HiveAdKey) is not entered, the instance will be created with the default key (is_default=true) during Hive Adiz initialization.)
                        rewardedInterstitialAd = AdizRewardedInterstitial.initialize(activity, adizListener);
                } else {
                    // You can create an instance of rewarded interstitial ad by entering the 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()) {
                        // Creates an app opening ad instance.
                        appOpen = AdizAppOpen.initialize(activity, adizListener)
                } else {
                        // You can create an app opening ad instance by entering the 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();
        }
}