跳轉至

Unity

AdKit for ADOP: Unity

AdKit for ADOP(以下簡稱 AdKit for ADOP)是一個廣告模組,使用 ADOP 的 API 並根據 ADOP 的指導方針進行開發。使用 AdKit 與 Hive SDK,日誌數據會發送到分析伺服器,以便您可以跳過廣告分析。

本指南解释了如何实现 AdKit,并通过修复在集成 Unity 包时发生的错误来简化过程。请阅读此页面以使用 AdKit 以及支持 SDK。

安裝

  1. 在此下載並安裝最新版本的 AdKit for ADOP。
  2. 在 Unity 工具欄中,選擇 Assets > Import Package > Custom Package... 下的 .unitypackage 文件,然後點擊 Import

  3. 匯入後,檢查 Assets 資料夾下是否已創建 AdKit 和 ADOP 相關的檔案和資料夾。

  4. 這裡下載並安裝最新版本的 EDM4U。
    • 如果您使用的是 Hive SDK v4,其中包含 EDM4U,則可以跳過此步驟。
Warning

在開發過程中測試 AdKit 時,您必須應用 test 廣告金鑰。

更新

卸載您正在使用的AdKit並安裝最新版本以進行更新。

設定

請按照以下每個平台的指南來配置 AdKit。

Android

將格式為 ca-app-pub-XXXXX~YYYYY 的 AdMobId 添加到在 Unity 項目中生成的 Assets/Plugins/Android/AndroidManifest.xml 文件中。

    <application>
            <!-- AdKit -->
            <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-XXXXX~YYYYY"/>
            <meta-data android:name="com.google.android.gms.ads.AD_MANAGER_APP" android:value="true" />
            <!-- AdKit -->
    </application>

iOS

GADApplicationIdentifier 添加到 Unity 建立的 Xcode 專案的 Info.plist 中,並以字串類型輸入格式為 ca-app-pub-XXXXX~YYYYY 的 AdMobId。

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-XXXXX~YYYYY</string>

iOS 14及更高版本中,将SKAdNetworkItems添加到Info.plist中。(使用Assets/Bidmad/Editor/BidmadPostProcessBuild.cs文件进行构建时,SKAdNetworkIdentifier将自动添加。)

如何使用

iOS

當你建立一個 iOS 專案時,Unity 會生成 UnityFramework 目標,該目標的行為類似於 DynamicFramework

  1. 設定 EDM4U(基於 1.2.179)\n確保在 Unity 編輯器的 iOS Resolver Settings(菜單:Assets > External Dependency Manager > iOS Resolver > Settings)中設置為構建 static_framwork。

  1. Assets/HIVEAdKit/Editor/AdKitPostprocess.cs文件中,取消注释导入dynamicFramework的行。这些行的位置如下。

(string Name, string Source)[] dynamicFrameworks = {
   //("FBLPromises.xcframework", "Libraries/Bidmad/Plugins/iOS"), 
   ("OMSDK_Pubmatic.xcframework","Pods/OpenWrapSDK/OpenWrapSDK"),
   //("ADOPUtility.xcframework", "Pods/ADOPUtility"),
   //("OMSDK_Teadstv.xcframework", "Pods/TeadsSDK/Frameworks"), 
   //("TeadsSDK.xcframework", "Pods/TeadsSDK/Frameworks"), 
   //("IASDKCore.xcframework", "Pods/Fyber_Marketplace_SDK/IASDKCore"),
   //("AdFitSDK.framework","Pods/AdFitSDK/Frameworks")
};
僅在static_framework被檢查為構建時取消註解這些行。取消註解上面的行以啟用它們可能會在您使用動態框架時導致衝突。

  1. 建立專案。建置完成後,打開專案根目錄中的 Podfile 以檢查檔案設定。
     source 'https://github.com/Com2uSPlatformCorp/HiveAdKit-iOS.git'
     source 'https://cdn.cocoapods.org/'

     platform :ios, '12.0'

     target 'UnityFramework' do
       pod 'BidmadAdFitAdapter', '3.12.7.4'
       pod 'BidmadADOPCoupangAdapter', '1.0.0.3'
       pod 'BidmadAppLovinAdapter', '12.2.1.0'
       pod 'BidmadAtomAdapter', '1.0.0.3'
       pod 'BidmadFyberAdapter', '8.2.6.0'
       pod 'BidmadGoogleAdManagerAdapter', '11.2.0.0'
       pod 'BidmadGoogleAdMobAdapter', '11.2.0.0'
       pod 'BidmadIronSourceAdapter', '7.8.0.0.0'
       pod 'BidmadPangleAdapter', '5.8.0.7.0'
       pod 'BidmadPartners/AdMobBidding', '1.0.3'
       pod 'BidmadPubmaticAdapter', '3.2.0.3'
       pod 'BidmadSDK', '6.6.1'
       pod 'BidmadTeadsAdapter', '5.0.27.3'
       pod 'BidmadUnityAdsAdapter', '4.9.3.0'
       pod 'BidmadVungleAdapter', '7.2.2.0'
       pod 'HiveAdKit_ADOP_PrivacyInfo', '1.4.6'
       pod 'OpenBiddingHelper', '6.6.1'
     end
     target 'Unity-iPhone' do
     end
     use_frameworks!
  1. 在運行 pod install 後,通過打開工作區來進行 Xcode 設置。檢查 General 標籤時,所需的動態 / 框架會自動嵌入,如下所示:

Note

[與 Facebook SDK 部署相關的問題] Facebook SDK 提供作為動態框架的構建,而廣告模塊則將其作為靜態框架提供,但 Podfile 只支持這兩種框架中的一種。因此,當您在 Unity 上構建並應用 Facebook 時,請遵循以下附加設置以解決 Facebook SDK 與廣告模塊之間的崩潰問題。
<

在 Xcode 构建的 TARGET 列表中添加额外的库依赖。


添加 FBSDKAMKit、FBSDKCoreKit_Baseic、FBSDKCoreKit、FBSDKLoginKit 和 FBSDKShareKit 框架作为动态框架。


Note

请参考隐私调查指南以获取有关在分发您的应用程序时填写隐私调查表的信息。

ADOP Proguard 設定

如果您正在使用 Proguard,请添加以下 ADOP Proguard 设置。

  -keep class com.adop.sdk.** { *; }
  -keep class ad.helper.openbidding.** { *; }
  -keep class com.adop.adapter.fc.** { *; }
  -keep class com.adop.adapter.fnc.** { *; }
  -keepnames class * implements java.io.Serializable
  -keepclassmembers class * implements java.io.Serializable {
      static final long serialVersionUID;
      private static final java.io.ObjectStreamField[] serialPersistentFields;
      !static !transient ;
      private void writeObject(java.io.ObjectOutputStream);
      private void readObject(java.io.ObjectInputStream);
      java.lang.Object writeReplace();
      java.lang.Object readResolve();
  }
  -keepclassmembers class * {
      @android.webkit.JavascriptInterface ;
  }

  # Pangle
  -keep class com.bytedance.sdk.** { *; }
  -keep class com.bykv.vk.openvk.component.video.api.** { *; }

  # Tapjoy
  -keep class com.tapjoy.** { *; }
  -keep class com.moat.** { *; }
  -keepattributes JavascriptInterface
  -keepattributes *Annotation*
  -keep class * extends java.util.ListResourceBundle {
  protected Object[][] getContents();
  }
  -keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
  public static final *** NULL;
  }
  -keepnames @com.google.android.gms.common.annotation.KeepName class *
  -keepclassmembernames class * {
  @com.google.android.gms.common.annotation.KeepName *;
  }
  -keepnames class * implements android.os.Parcelable {
  public static final ** CREATOR;
  }
  -keep class com.google.android.gms.ads.identifier.** { *; }
  -dontwarn com.tapjoy.**

測試廣告金鑰在 ADOP 中

使用 ADOP 發出的測試廣告金鑰是必需的。

// ANDROID Environment
    public static string adopAppKey =                       "6933aab2-7f78-11ed-a117-026864a21938";
    public static string rewardVideoUnitId =                "7d9a2c9e-5755-4022-85f1-6d4fc79e4418";
    public static string InterstitialAdUnitId =             "e9acd7fc-a962-40e4-aaad-9feab1b4f821";
    public static string AdaptiveBannerAdUnitId =           "944fe870-fa3a-4d1b-9cc2-38e50b2aed43";
// IOS Environment
    public static string adopAppKey =                       "6b097551-7f78-11ed-a117-026864a21938";
    public static string rewardVideoUnitId =                "29e1ef67-98d2-47b3-9fa2-9192327dd75d";
    public static string InterstitialAdUnitId =             "228b95a9-6f42-46d8-a40d-60f17f751eb1";
    public static string AdaptiveBannerAdUnitId =           "1c3e3085-333f-45af-8427-2810c26a72fc";

// Other Environments (Only the mobile envs supported.)
    public static string adopAppKey = "NotSuport";
    public static string rewardVideoUnitId = "NotSuport";
    public static string InterstitialAdUnitId = "NotSuport";
    public static string AdaptiveBannerAdUnitId = "NotSuport";

初始化 AdKit

為了初始化 ADOP 廣告,必須發出 adopAppKey。發出的 adopAppKey 必須用作 ADOP 廣告初始化方法的參數。

Note

當執行重置時,如果您位於EEA和英國地區,將自動出現GDPR同意彈出窗口。在其他地區,請立即執行重置。 如果您的遊戲針對EEA和英國地區,請確保您的GDPR同意彈出窗口根據GDPR消息指南設置。

// For commercial distribution
HIVEAdKit.InitializeWithShowGDPRConsent(adopAppKey, false, null);

// When testing GDPR
HIVEAdKit.GDPR.Reset();
HIVEAdKit.InitializeWithShowGDPRConsent(adopAppKey, true, testDeviceId);

回調

要使用回調,必須將 BidmadManager 註冊為 GameObject。

GameObject bidmadManager = new GameObject("BidmadManager");
bidmadManager.AddComponent<BidmadManager>();
DontDestroyOnLoad(bidmadManager);

高級設定

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

獎勵廣告

獎勵廣告會獎勵觀看視頻一段時間的用戶,並且一次只能加載一個廣告。

// Set Event Callback
EventHandlers eventHandlers = new EventHandlers.Builder()
                                               .OnAdLoaded(OnAdLoadedCB)
                                               .OnAdOpening(OnAdOpeningCB)
                                               .OnAdClosed(OnAdClosedCB)
                                               .OnAdFailed(OnAdFailedCB)
                                               .OnAdReward(OnAdRewardCB)
                                               .Build();
// Create RewardVideoAd Instance
RewardVideoAd = HIVEAdKit.RewardVideo.Initialize(rewardVideoUnitId, eventHandlers);
// Load RewardVideoAd
HIVEAdKit.RewardVideo.LoadAd(RewardVideoAd, "Unity-RewardVideo-Load-AdPlacementInfo");
// Show RewardVideoAd
if( HIVEAdKit.RewardVideo.IsLoaded(RewardVideoAd) ) {
   HIVEAdKit.RewardVideo.Show(RewardVideoAd, "Unity-RewardVideo-Show-AdPlacementInfo");
}

插播廣告

插播廣告是覆蓋遊戲介面的全螢幕廣告。

// Set Event Callback
EventHandlers eventHandlers = new EventHandlers.Builder()
                                               .OnAdLoaded(OnAdLoadedCB)
                                               .OnAdOpening(OnAdOpeningCB)
                                               .OnAdClosed(OnAdClosedCB)
                                               .OnAdFailed(OnAdFailedCB)
                                               .OnAdClick(OnAdClickCB)
                                               .Build();
// Create InterstitialAd Instance                                               
InterstitialAd = HIVEAdKit.Interstitial.Initialize(InterstitialAdUnitId, eventHandlers);
// Load InterstitialAd
HIVEAdKit.Interstitial.LoadAd(InterstitialAd, "Unity-Interstitial-Load-AdPlacementInfo");
// Show InterstitialAd
if( HIVEAdKit.Interstitial.IsLoaded(InterstitialAd) ) {
   HIVEAdKit.Interstitial.Show(InterstitialAd, "Unity-Interstitial-Show-AdPlacementInfo");
}

自適應橫幅類型

自適應橫幅類型廣告是一種佔據螢幕位置的滾動橫幅。您可以使用 BannerPosition 或任何 yPos 值來調整橫幅位置。

如果您提供 yPos 來調整橫幅位置,橫幅將對齊在螢幕底部,然後會根據您指定的 yPos 值向上移動。

// the example codes using the BannerPosition 
// Set Event Callback
EventHandlers eventHandlers = new EventHandlers.Builder()
                                               .OnAdLoaded(OnAdLoadedCB)
                                               .OnAdClosed(OnAdClosedCB)
                                               .OnAdFailed(OnAdFailedCB)
                                               .OnAdClick(OnAdClickCB)
                                               .Build();

// Create AdaptiveBanner Instance at Top of View
AdaptiveBannerAd = HIVEAdKit.AdaptiveBanner.Initialize(AdaptiveBannerAdUnitId, HIVEAdKit.AdaptiveBanner.BannerPosition.Top, eventHandlers);

// Create AdaptiveBanner Instance at Bottom of View
AdaptiveBannerAd = HIVEAdKit.AdaptiveBanner.Initialize(AdaptiveBannerAdUnitId, HIVEAdKit.AdaptiveBanner.BannerPosition.Bottom, eventHandlers);

// Automatic Load & Show AdaptiveBanner
HIVEAdKit.AdaptiveBanner.LoadAd(AdaptiveBannerAd, "Unity-AdaptiveBanner-Load-AdPlacementInfo");

// Destroy AdaptiveBanner
HIVEAdKit.AdaptiveBanner.Destroy(AdaptiveBannerAd);
// This example shows adjusting the banner position with specifiying the yPos value.
// Set Event Callback
EventHandlers eventHandlers = new EventHandlers.Builder()
                                               .OnAdLoaded(OnAdLoadedCB)
                                               .OnAdClosed(OnAdClosedCB)
                                               .OnAdFailed(OnAdFailedCB)
                                               .OnAdClick(OnAdClickCB)
                                               .Build();

// Set yPos
var yPos  = 100;
AdaptiveBannerAd = HIVEAdKit.AdaptiveBanner.Initialize(AdaptiveBannerAdUnitId, yPos, eventHandlers);

// Automatic Load & Show AdaptiveBanner
HIVEAdKit.AdaptiveBanner.LoadAd(AdaptiveBannerAd, "Unity-AdaptiveBanner-Load-AdPlacementInfo");

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

測試廣告

在開發過程中,對於廣告主來說,當測試廣告被點擊時不被收費是很重要的。如果您在測試模式之外過多地點擊廣告,則會被視為無效行為。因此,請注意不要成為被報告的目標帳戶。

參考Google Developers以使用測試廣告。

卸載

要卸載 AdKit for ADOP,請移除 Unity 專案中的以下資料夾。

  • 資產/Bidmad
  • 資產/HIVEAdKit
  • 資產/HIVEAdKit_範例