Unity
Hive AdKit สำหรับ ADOP: Unity¶
Hive AdKit สำหรับ ADOP (ต่อไปนี้เรียกว่า AdKit สำหรับ ADOP) ใช้ API ของ ADOP และพัฒนาขึ้นตามคู่มือการพัฒนา ADOP เมื่อใช้ AdKit สำหรับ ADOP ร่วมกับ Hive SDK หรือโมดูลแยกต่างหาก จะมีการส่งบันทึกไปยังเซิร์ฟเวอร์การวิเคราะห์เพื่อข้ามการวิเคราะห์โฆษณาแยกต่างหาก คู่มือนี้จัดทำขึ้นเพื่อช่วยแก้ไขข้อผิดพลาดที่เกิดขึ้นในกระบวนการนำแพ็คเกจ Unity ที่ ADOP จัดเตรียมไว้มาใช้สำหรับผู้ใช้ Hive SDK และลดความยุ่งยากในการทดลองและข้อผิดพลาด เพื่อความสะดวกในการใช้งาน เรียนรู้เกี่ยวกับเวอร์ชันที่รองรับ AdKit สำหรับ ADOP และวิธีการนำไปใช้
การติดตั้ง¶
- ดาวน์โหลดและติดตั้ง AdKit for ADOP เวอร์ชันล่าสุด
- ในแถบเครื่องมือ Unity ให้เลือก Assets > Import Package > Custom Package... และเลือกไฟล์ .unitypackage จากนั้นคลิก Import.

- หลังจากการนำเข้าเสร็จสิ้น ให้ตรวจสอบว่าได้สร้างไฟล์และโฟลเดอร์ที่เกี่ยวข้องกับ Hive AdKit และ ADOP ในโฟลเดอร์ Assets หรือไม่
- ดาวน์โหลดและติดตั้งเวอร์ชันล่าสุดของ EDM4U ที่นี่.
- Hive SDK v4 มี EDM4U รวมอยู่ด้วย หากคุณใช้ Hive SDK v4 ให้ข้ามขั้นตอนนี้ไปได้เลย.
Warning
เมื่อทำการทดสอบ AdKit ในระหว่างการพัฒนา ต้องใช้ คีย์โฆษณาทดสอบ เสมอ
อัปเดต¶
โปรดลบ AdKit ที่คุณใช้งานอยู่ ลบ และติดตั้งเวอร์ชันล่าสุดเพื่ออัปเดต
การตั้งค่า¶
โปรดตั้งค่า AdKit ตามคำแนะนำสำหรับแต่ละระบบปฏิบัติการด้านล่าง
- Android
กรุณาเพิ่มค่า `AdMobId` ในรูปแบบ ca-app-pub-XXXXX~YYYYY ในไฟล์ Assets/Plugins/Android/AndroidManifest.xml ที่สร้างขึ้นในโปรเจกต์ Unity. - iOS
เพิ่ม GADApplicationIdentifier ลงในไฟล์Info.plistของโปรเจกต์ Xcode ที่สร้างขึ้นจากการสร้าง Unity และกรอกค่า AdMobId ในรูปแบบ ca-app-pub-XXXXX~YYYYY เป็นประเภท String. iOS 14 ขึ้นไป ให้เพิ่ม รายการ SKAdNetwork ของ ADOP ลงในไฟล์ Info.plist (จะถูกเพิ่มโดยอัตโนมัติเมื่อทำการสร้างโดยใช้ไฟล์ Assets/Bidmad/Editor/BidmadPostProcessBuild.cs)
การนำไปใช้¶
iOS PrivacyInfo¶
โปรดดูข้อมูลที่จำเป็นสำหรับแบบสอบถามความเป็นส่วนตัวเมื่อเผยแพร่แอปใน คู่มือ Privacy Survey.
การตั้งค่า ADOP Proguard¶
หากคุณกำลังใช้ Proguard คุณต้องเพิ่มการตั้งค่า ADOP Proguard ด้านล่างนี้
-keep class com.adop.sdk.** { *; }
-keep class ad.helper.openbidding.** { *; }
-keep class com.adop.sdk.adapter.**{ *; }
-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 <fields>;
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 <methods>;
}
# 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 환경
public static string adopAppDomain = "common-serving-bidmad.adop.co.kr";
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 환경
public static string adopAppDomain = "common-serving-bidmad.adop.co.kr";
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";
// 기타 환경 (모바일이 아닌 환경은 미지원)
public static string adopAppDomain = "NotSuport";
public static string rewardVideoUnitId = "NotSuport";
public static string InterstitialAdUnitId = "NotSuport";
public static string AdaptiveBannerAdUnitId = "NotSuport";
Hive การเริ่มต้น AdKit¶
ต้องออก adopAppDomain เพื่อเริ่มต้นโฆษณา ADOP โดยเป็นสิ่งจำเป็น adopAppDomain ที่ออกจะต้องถูกใช้เป็นพารามิเตอร์ในวิธีการเริ่มต้นโฆษณา ADOP
Warning
ตั้งแต่เวอร์ชัน AdKit 1.5.1 เป็นต้นไป AppKey ที่เคยใช้จะถูกเปลี่ยนเป็น AppDomain AppDomain ไม่สามารถใช้งานร่วมกับ AppKey เดิมได้ ดังนั้นเพื่อทำการเริ่มต้น Hive AdKit คุณจะต้องขอ AppDomain ใหม่ สำหรับข้อมูลเกี่ยวกับ AppDomain กรุณาติดต่อทีมงานบริหารของแผนกแพลตฟอร์มเทคแล็บ
Note
เมื่อดำเนินการรีเซ็ต หากอยู่ในภูมิภาคยุโรปและสหราชอาณาจักร (EEA & UK) จะมีการแสดงป๊อปอัปการยินยอม GDPR โดยอัตโนมัติ ในภูมิภาคอื่นจะทำการรีเซ็ตทันที
Warning
หากคุณใช้ Hive SDK คุณต้องเรียกใช้ AuthV4.setup หลังจากเสร็จสิ้นการเริ่มต้น Hive AdKit หากมีการแสดงการแจ้งเตือนการยินยอม ATT (APP Tracking Transparency) และหน้าจอยินยอม GDPR ปรากฏขึ้น แอปอาจถูกปฏิเสธในการตรวจสอบแอปของ Apple
- หากเกมมีเป้าหมายที่ยุโรปและสหราชอาณาจักร (EEA & UK) ให้ตรวจสอบว่าป๊อปอัปการยินยอม GDPR ตั้งค่าให้ตรงตามแนวทางการเขียนข้อความ GDPRหรือไม่ <
// 상용 배포시
HIVEAdKit.InitializeWithShowGDPRConsent(adopAppDomain, false, null, consentState => {
/*
동의 = 1, 비동의 = 0, 알수없음 = -1, 필요없음 = -2
초기화 완료 콜백으로 GDPR 동의 상태 결과 값 consentState가 전달됩니다. 결과값에 따른 별도 처리가 필요하지 않습니다.
*/
Debug.Log(TAG + "::InitializeWithShowGDPRConsent consentState : " + consentState);
});
// GDPR 테스트 사용시
HIVEAdKit.GDPR.Reset();
HIVEAdKit.InitializeWithShowGDPRConsent(adopAppDomain, true, testDeviceId, consentState => {
/*
동의 = 1, 비동의 = 0, 알수없음 = -1, 필요없음 = -2
초기화 완료 콜백으로 GDPR 동의 상태 결과 값 consentState가 전달됩니다. 결과값에 따른 별도 처리가 필요하지 않습니다.
*/
Debug.Log(TAG + "::InitializeWithShowGDPRConsent consentState : " + consentState);
});
การใช้ Callback¶
ในการใช้ Callback คุณต้องลงทะเบียน BidmadManager เป็น GameObject
GameObject bidmadManager = new GameObject("BidmadManager");
bidmadManager.AddComponent<BidmadManager>();
DontDestroyOnLoad(bidmadManager);
ฟังก์ชันการตั้งค่าข้อมูลเพิ่มเติม¶
// GameData ตัวอย่าง
[Serializable]
public class SendInfo
{
public int level;
public int gold;
}
SendInfo addtionalInfo = new SendInfo();
addtionalInfo.level = 1;
addtionalInfo.gold = 100;
// ส่งในรูปแบบ JSON Obejct
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");
}
โฆษณาประเภท Interstitial¶
โฆษณาที่ครอบคลุมทั้งหน้าจอ
// 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");
}
โฆษณาประเภท Adaptive Banner¶
เป็นแบนเนอร์เลื่อนที่ครอบคลุมบางส่วนของหน้าจอ คุณสามารถปรับตำแหน่งของแบนเนอร์ได้โดยการป้อนค่า BannerPosition หรือค่า yPos ที่เฉพาะเจาะจง เมื่อป้อนค่า yPos เพื่อปรับตำแหน่งของแบนเนอร์ ตำแหน่งของแบนเนอร์จะเคลื่อนที่ขึ้นไปตามค่าที่ระบุ yPos จากสถานะจัดเรียงที่ด้านล่าง
// 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);
// yPos 값을 지정하여 사용하는 예제입니다.
// 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
ลบ¶
Hive หากต้องการลบ AdKit for ADOP โปรดลบโฟลเดอร์ในโครงการ Unity ตามรายการด้านล่าง
-
- ทรัพย์สิน/Bidmad
- ทรัพย์สิน/HIVEAdKit
- ทรัพย์สิน/HIVEAdKit_Example