跳转至

Unity

Adkit for AD(X): Unity

AdKit 是一个广告模块,修复了在处理 AD(X) Unity 包时发生的错误,并支持用户便利。逐一阅读此页面以使用 AdKit 以及支持 SDK。

安装

访问 Hive 开发者并下载和应用 AdKit。

  1. 从 Hive 开发者处下载最新版本的 AdKit 并在 此处 解压缩。
  2. 在 Unity 工具栏中,选择 .unitypackage 文件,路径为 Assets > Import Package > Custom Package…,然后点击 Import

  1. 导入完成后,检查Assets文件夹下是否创建了与AdKit和AD(X)相关的文件和文件夹。

Warning

在开发期间测试 AdKit 时,您必须应用 测试 广告密钥。

更新

卸载您正在使用的AdKit,并安装最新版本以进行更新。

如何使用

iOS (Unity 2019.4 及以上版本)

在Unity 2019.4及以上版本中构建iOS项目时,会创建一个名为**UnityFramework**的目标,它作为动态框架运行。

  1. EDM4U 配置(基于版本 1.2.171) 确保在 Unity 的 iOS Resolver Settings 中启用了 static_framework 构建设置(菜单:Assets > External Dependency Manager > iOS Resolver > Settings)。

  2. 从 Hive AdKit 的 1.5.0 版本开始,AppLovinSDK 作为动态框架提供。因此,如果您使用的是 static_framework,您必须执行以下步骤。

    Assets/HIVEAdKit/Editor/AdKitPostprocess.cs 文件中,取消注释 iOSAdd_DynamicFrameworks 函数中的 dynamicFramework Import。注释位置如下。

    (string Name, string Source) [] dynamicFrameworks = {
        // 如果您从 Hive AdKit 的 1.5.0 版本开始使用 AppLovinSDK 并且已设置 Pod Static,请取消注释下面的 AppLovinSDK 行。
        // ("AppLovinSDK.xcframework", "Pods/AppLovinSDK/applovin-ios-sdk-12.6.1"),
    }
    

    Warning

    仅在启用static_framework并且您正在构建时才可以取消注释。在使用动态框架时取消注释可能会导致冲突。

  3. 构建项目。构建完成后,打开生成的项目根路径中的 Podfile 以检查文件设置。

    source 'https://github.com/adxcorp/AdxLibrary_iOS_Release.git'
    source 'https://cdn.cocoapods.org/'
    
    platform :ios, '12.0'
    
    target 'UnityFramework' do
        pod 'ADXLibrary', '2.6.2'
        pod 'Google-Mobile-Ads-SDK', '~> 11.8.0'
    end
    target 'Unity-iPhone' do
    end
    use_frameworks!
    

  4. 继续进行 Xcode 配置。

iOS:解决Facebook SDK与广告模块之间的冲突

虽然 Facebook SDK 仅提供动态框架,但广告模块仅提供静态框架,并且 Podfile 配置仅支持这两种方法中的一种。因此,为了在 Unity 中应用 Facebook SDK,您需要解决 Facebook SDK 和广告模块之间的冲突,如下所示。

<

HIVEAdKit/Editor/AdKitPostprocess.cs文件中的iOSAdd_DynamicFrameworks函数中,取消对您正在使用的Facebook SDK的注释,以嵌入动态SDK。

   (string Name, string Source) [] dynamicFrameworks = {
       // If you are using AppLovinSDK starting from version 1.5.0 of Hive AdKit and have set Pod Static, uncomment the AppLovinSDK line below.
       // ("AppLovinSDK.xcframework", "Pods/AppLovinSDK/applovin-ios-sdk-12.6.1"),

       // If you are using the Facebook SDK, uncomment the lines below according to the SDK type you are using.
       // ("FBAEMKit.xcframework","Pods/FBAEMKit/XCFrameworks"),
       // ("FBSDKCoreKit_Basics.xcframework","Pods/FBSDKCoreKit_Basics/XCFrameworks"),
       // ("FBSDKCoreKit.xcframework","Pods/FBSDKCoreKit/XCFrameworks"),
       // ("FBSDKLoginKit.xcframework","Pods/FBSDKLoginKit/XCFrameworks"),
       // ("FBSDKShareKit.xcframework","Pods/FBSDKShareKit/XCFrameworks"),
       // ("FBSDKGamingServicesKit.xcframework","Pods/FBSDKGamingServicesKit/XCFrameworks")
   };
Warning

您只能取消注释您当前正在使用的 Facebook SDK。

特性

  • 奖励类型
    • AD(X) 不提供广告曝光的 API,但通知遵循 AdMob 指南
    • 发送日志取决于调用的 RewardVideo API,如果使用 AdKit API 和 Hive SDK。日志数据发送到分析服务器,支持此功能的最低版本如下。
      • Hive SDK v4.11.0
  • 插页式广告类型
  • 自适应横幅类型

有关如何使用 AdKit 的详细信息,请阅读以下指南。

初始化 AdKit

初始化、加载和显示所有类型广告(AD)之前的必要步骤

欧洲和英国目标

如果您的游戏面向欧洲和英国(欧洲经济区和英国),则需要显示GDPR(通用数据保护条例)同意弹出窗口。Adkit支持谷歌的UMP(用户消息平台)来显示GDPR同意弹出窗口。要使用谷歌UMP,请首先参考GDPR消息创建指南来撰写您的GDPR消息。

使用 Hive SDK 时,AuthV4.setup 会暴露 IDFA 消息,因此构建 IDFA 消息在根本上是可选的。然而,如果您使用 GDPR 消息,则必须根据 有关 IDFA 消息和 ATT 通知的详细说明 构建 IDFA 消息。

如果您已经制作了GDPR消息和IDFA消息,请按照下面所示使用InitializeWithShowADXConsent初始化Hive AdKit。

Important

如果您正在使用Hive SDK,则必须在完成Hive AdKit的初始化后执行AuthV4.setup。如果在显示ATT(应用追踪透明度)同意通知后出现GDPR同意屏幕,则您的应用可能会在Apple的应用审核中被拒绝。

// When targeting Europe & the UK for commercial distribution
int debugState = 0;
HIVEAdKit.InitializeWithShowADXConsent(appId, debugState, null, adkitConsentState =>
{
    /*
    * adkitConsentState : User's personal information usage and collection status for AD(X)
    * - 0 : No consent status exists
    * - 1 : Region where consent is not required
    * - 2 : User has refused the usage and collection of personal information
    * - 3 : User has consented to the usage and collection of personal information
    */
});

/* 
 * To test the GDPR consent popup, set debugState to 1 and configure testDeviceId to display the GDPR test popup.
 * The device ID for the Test Device (testDeviceId) can be found in the Android Logcat and Xcode console logs.
 * The testDeviceId is used only for testing. You must specify testDeviceId as null during commercial distribution.
 * Example Android log: Use new ConsentDebugSettings.Builder().addTestDeviceHashedId("ABCDEFGHIJKLMNOPQRSTUVWXYZ") to set this as a debug device.
 * Example Xcode log: To enable debug mode for this device, set: UMPDebugSettings.testDeviceIdentifiers = @[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
 */

int debugState = 1;
string testDeviceId = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
List testDevices = new List();
testDevices.Add(testDeviceId);

HIVEAdKit.InitializeWithShowADXConsent(appId, debugState, testDevices, adkitConsentState =>
{
    /*
    * adkitConsentState : User's personal information usage and collection status for AD(X)
    * - 0 : No consent status exists
    * - 1 : Region where consent is not required
    * - 2 : User has refused the usage and collection of personal information
    * - 3 : User has consented to the usage and collection of personal information
    */
});

在初始化 Hive AdKit 时,如果目标区域被确定为欧洲和英国(EEA & UK),则将自动显示GDPR同意屏幕,如下所示。

在iOS环境中,IDFA解释消息会在欧洲和英国以外的地区自动显示。

高级设置

// GameData Example
[Serializable]
public class SendInfo 
{
    public int level;
    public int gold;
}
SendInfo addtionalInfo = new SendInfo();
addtionalInfo.level = 1;
addtionalInfo.gold = 100;

// Send as a JSON Obejct format
HIVEAdKit.SetAdditionalInfo(JsonUtility.ToJson(addtionalInfo));

奖励类型

// Initialize Rewarded AD
// Initialize Rewarded AD
EventHandlers eventHandlers = new EventHandlers.Builder()
                                                .OnAdLoaded(OnAdLoadedCB)
                                                .OnAdOpening(OnAdOpeningCB)
                                                .OnAdClosed(OnAdClosedCB)
                                                .OnAdFailedToLoad(OnAdFailedToLoadCB)
                                                .OnAdFailedToShow(OnAdFailedToShowCB)
                                                .OnAdReward(OnAdRewardCB)
                                                .OnPaidEvent(OnPaidEventCB)
                                                .Build();
// Generate an instance
RewardVideoAd = HIVEAdKit.RewardVideo.Initialize(rewardVideoUnitId, eventHandlers);

// Load Rewarded AD
// Send AD loading information to Analytics
if( HIVEAdKit.RewardVideo.IsInitialzed(RewardVideoAd) ) {
    HIVEAdKit.RewardVideo.LoadAd(RewardVideoAd, "Unity-AdaptiveBanner-Show-AdditionalInfo");
}

// Show RewardVideo type
// Send AD loading information to Analytics
if( HIVEAdKit.RewardVideo.IsLoaded(RewardVideoAd) ) {
    HIVEAdKit.RewardVideo.Show(RewardVideoAd, "Unity-AdaptiveBanner-Show-AdditionalInfo");
}

插页类型

EventHandlers eventHandlers = new EventHandlers.Builder()
                                                .OnAdLoaded(OnAdLoadedCB)
                                                .OnAdOpening(OnAdOpeningCB)
                                                .OnAdClosed(OnAdClosedCB)
                                                .OnAdFailedToLoad(OnAdFailedToLoadCB)
                                                .OnAdClick(OnAdClickCB)
                                                .OnPaidEvent(OnPaidEventCB)
                                                .Build();
// Generate an instance
InterstitialAd = HIVEAdKit.Interstitial.Initialize(InterstitialAdUnitId, eventHandlers);

// Load
// Send AD loading information to Analytics
if( HIVEAdKit.Interstitial.IsInitialzed(InterstitialAd) ) {
     HIVEAdKit.Interstitial.Load(InterstitialAd, "Unity-AdaptiveBanner-Show-AdditionalInfo");
}

// Show
// Send AD loading information to Analytics
if( HIVEAdKit.Interstitial.IsLoaded(InterstitialAd) ) {
     HIVEAdKit.Interstitial.Show(InterstitialAd, "Unity-AdaptiveBanner-Show-AdditionalInfo");
}

自适应横幅类型

EventHandlers eventHandlers = new EventHandlers.Builder()
                                                            .OnAdLoaded(OnBannerAdLoadedCB)
                                                            .OnAdOpening(OnAdOpeningCB)
                                                            .OnAdClosed(OnAdClosedCB)
                                                            .OnAdFailedToLoad(OnAdFailedToLoadCB)
                                                            .OnAdClick(OnAdClickCB)
                                                            .OnPaidEvent(OnPaidEventCB)
                                                            .Build();
HIVEAdKit.AdaptiveBanner.AdPosition bannerPosition = HIVEAdKit.AdaptiveBanner.AdPosition.Top;
HIVEAdKit.AdaptiveBanner.AdSize adaptiveSize = HIVEAdKit.AdaptiveBanner.AdSize.AD_SIZE_320x50;

// Generate an instance
AdaptiveBannerAd = HIVEAdKit.AdaptiveBanner.Initialize(AdaptiveBannerAdUnitId, adaptiveSize, bannerPosition, eventHandlers);

// Load and show
// Send AD loading information to Analytics
HIVEAdKit.AdaptiveBanner.LoadAd(AdaptiveBannerAd, "Unity-AdaptiveBanner-Show-AdditionalInfo");

// Hide
HIVEAdKit.AdaptiveBanner.Destroy(AdaptiveBannerAd);

支持 iOS 14

以下是支持 iOS 14 及更高版本的 SKAdNetwork AD(X) 列表。AdKitPostprocess 基于 2021 年 1 月 29 日的更新。别忘了查看最新更新。

支持 Android 11

一个标签 <queries> 被添加到 AD(X) 库的 AndroidManifest.xml 文件中,以支持 Android 11。如果您在 Unity 上构建项目时检查到以下错误日志,请参考使用 Unity-Android 11 的指南。

  • Unity上的示例错误日志
  AndroidManifest.xml: AAPT: error: unexpected element <queries> found in <manifest>.

ADX Proguard 设置

库 AAR 文件包含 Proguard 的规则,因此设置会自动执行。  

Unity 集成通知

如果在 GoogleMobileAdsSettings 上删除了应用程序 ID,请转到 Unity > Assets > Google Mobile Ads > Settings,然后选择 延迟应用程序测量 复选框,然后再次清除它。

 

Gradle 和 Gradle 插件版本配置

我们推荐使用 Gradle 6.7.1 或更高版本来支持 Adkit 1.4.4 或更高版本。如果您使用低于 Gradle 1.4.4 的版本,您可能会遇到来自 AdMob Unity 插件的 "此功能需要 ASM7" 错误,可以通过以下解决方案之一来解决。

  • 更改 Gradle 和 Gradle 插件版本(推荐解决方案)
  • 更新 Unity 引擎
  • 注释 android.enableDexingArtifactTransform=false

 

有关如何更改 Gradle 和 Gradle 插件版本(更改为 Gradle 6.7.1+,Gradle 插件 4.2.0+),请参阅以下步骤。

  1. 更改为使用自定义基础 Gradle 模板。
    • 检查构建设置 > 项目设置 > 播放器 > 自定义基础 Gradle 模板。
    • Assets/Plugins/Android/baseProjectTemplate.gradle 将被生成。
  2. 更改 Gradle 插件版本。打开 Assets/Plugins/Android/baseProjectTemplate.gradle 文件并将版本更改为:com.android.tools.build:gradle:4.2.0
  3. 下载 Gradle。可以在 这里 下载 Gradle 6.7.1。下载后,将下载的文件解压到您想要的位置(例如:~/Users/honggd/gradle-6.7.1)。
  4. 在 Unity 中更改 Gradle 安装路径。
    1. 取消选中首选项 > 外部工具 > 随 Unity 安装的 Gradle。
    2. 将安装路径设置为您解压下载的 Gradle 文件的目录(例如:~/Users/honggd/gradle-6.7.1)。
  5. 确保 Player > 其他设置 > 标识 > 目标 API 级别为 33 或更高,并构建您的项目。

测试广告

在开发过程中,广告主在点击测试广告时不应被收费是很重要的。如果您在测试模式之外点击广告过多,将被视为无效操作。因此,请注意不要成为被举报的目标账户。请参考Google Developers以使用测试广告。

 

卸载

要卸载 AdKit for AD(X),请删除以下文件和文件夹列表。

    • 与 AdKit 相关
      • /Assets/HIVEAdKit
      • /Assets/HIVEAdKit_Example
    • 与 AD(X) 相关
      • /Assets/ADXLibrary
      • /Assets/GoogleMobilesAds
      • /Assets/MoPub
      • /Assets/Plugins/Android/GoogleMobileAdsPlugins
Note

与 AD(X) 相关的文件列表可能会根据 AdKit 中包含的 AD(X) 版本而有所不同。