ข้ามไปที่เนื้อหา

Unity

AdKit สำหรับ ADOP: Unity

AdKit สำหรับ ADOP (ต่อไปนี้เรียกว่า AdKit สำหรับ ADOP) เป็นโมดูลโฆษณาที่ใช้ API ของ ADOP และพัฒนาตามแนวทางจาก ADOP การใช้ AdKit กับ Hive SDK จะส่งข้อมูลบันทึกไปยังเซิร์ฟเวอร์ Analytics เพื่อให้คุณสามารถข้ามการวิเคราะห์โฆษณาได้

คู่มือนี้อธิบายวิธีการติดตั้ง AdKit และทำให้การแก้ไขข้อผิดพลาดที่เกิดขึ้นระหว่างการรวมแพ็คเกจ Unity ง่ายขึ้น อ่านหน้านี้เพื่อใช้ AdKit รวมถึง SDK สนับสนุน

การติดตั้ง

  1. ดาวน์โหลดและติดตั้งเวอร์ชันล่าสุดของ AdKit สำหรับ ADOP ที่นี่
  2. ในแถบเครื่องมือ Unity ให้เลือกไฟล์ .unitypackage ภายใต้ Assets > Import Package > Custom Package... และคลิก Import.

  3. หลังจากนำเข้าแล้ว ให้ตรวจสอบว่าไฟล์และโฟลเดอร์ที่เกี่ยวข้องกับ AdKit และ ADOP ได้ถูกสร้างขึ้นภายใต้โฟลเดอร์ Assets หรือไม่

  4. ดาวน์โหลดและติดตั้งเวอร์ชันล่าสุดของ EDM4U ที่นี่.
    • หากคุณกำลังใช้ Hive SDK v4 ซึ่งรวม EDM4U คุณสามารถข้ามขั้นตอนนี้ได้.
Warning

เมื่อทดสอบ AdKit ในระหว่างการพัฒนา คุณต้องใช้กุญแจโฆษณา test

อัปเดต

ถอนการติดตั้ง AdKit ที่คุณกำลังใช้งานและติดตั้งเวอร์ชันล่าสุดเพื่ออัปเดต

การตั้งค่า

โปรดทำตามคำแนะนำด้านล่างสำหรับแต่ละแพลตฟอร์มเพื่อกำหนดค่า AdKit.

Android

เพิ่ม AdMobId ซึ่งมีรูปแบบเป็น ca-app-pub-XXXXX~YYYYY ลงในไฟล์ Assets/Plugins/Android/AndroidManifest.xml ที่สร้างขึ้นในโปรเจกต์ Unity.

    <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 ลงใน Info.plist ของโปรเจกต์ Xcode ที่สร้างใน Unity build และป้อน AdMobId ซึ่งมีรูปแบบเป็น ca-app-pub-XXXXX~YYYYY ในรูปแบบประเภทสตริง

<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) ตรวจสอบให้แน่ใจว่าตั้งค่าเพื่อสร้าง static_framwork ใน iOS Resolver Settings (เมนู: Assets > External Dependency Manager > iOS Resolver > Settings) ของ Unity editor.

  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 ถูกเลือกสำหรับการสร้าง การยกเลิกการแสดงความคิดเห็นในบรรทัดด้านบนเพื่อเปิดใช้งานอาจทำให้เกิดความขัดแย้งเมื่อคุณใช้ Dynamic 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 โดยการเปิด workspace เมื่อเช็คแท็บ General จะพบว่า Dynamic / Frameworks ที่จำเป็นถูกฝังโดยอัตโนมัติดังนี้:

Note

[ปัญหาที่เกี่ยวข้องกับการใช้งาน Facebook SDK] Facebook SDK ให้การสร้างเป็น dynamic framework และโมดูลโฆษณาให้เป็น static framework อย่างไรก็ตาม Podfile รองรับเพียงหนึ่งในทั้งสอง framework เท่านั้น ดังนั้นเมื่อคุณสร้างใน Unity และใช้ Facebook ให้ปฏิบัติตามการตั้งค่าเพิ่มเติมด้านล่างเพื่อแก้ไขปัญหาการล่มระหว่าง Facebook SDK และโมดูลโฆษณา.

เพิ่มการพึ่งพาห้องสมุดเพิ่มเติมในรายการ TARGET ของการสร้าง Xcode.


<

เพิ่ม FBSDKAMKit, FBSDKCoreKit_Baseic, FBSDKCoreKit, FBSDKLoginKit, และ FBSDKShareKit เฟรมเวิร์กเป็นเฟรมเวิร์กแบบไดนามิก


Note

โปรดดูที่ คู่มือการสำรวจความเป็นส่วนตัว สำหรับข้อมูลเกี่ยวกับการกรอกแบบฟอร์มสำรวจความเป็นส่วนตัวเมื่อแจกจ่ายแอปของคุณ.

การตั้งค่า Proguard ของ ADOP

หากคุณกำลังใช้ Proguard ให้เพิ่มการตั้งค่า Proguard ของ ADOP ตามด้านล่างนี้

  -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

เมื่อทำการรีเซ็ต จะมีป๊อปอัปการยินยอม GDPR ปรากฏขึ้นโดยอัตโนมัติหากคุณอยู่ในภูมิภาค EEA & UK ในภูมิภาคอื่น ให้ทำการรีเซ็ตทันที หากเกมของคุณมุ่งเป้าไปที่ภูมิภาค EEA & UK ให้แน่ใจว่าป๊อปอัปการยินยอม GDPR ของคุณตั้งค่าไว้ตาม คู่มือการส่งข้อความ GDPR.

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

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

Callback

ในการใช้ Callback, 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 สำหรับ ADOP ให้ลบโฟลเดอร์ต่อไปนี้ภายในโปรเจกต์ Unity

  • สินทรัพย์/Bidmad
  • สินทรัพย์/HIVEAdKit
  • สินทรัพย์/HIVEAdKit_Example