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

Unity

Hive AdKit สำหรับ ADOP: Unity

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

การติดตั้ง

  1. ดาวน์โหลดและติดตั้ง AdKit for ADOP เวอร์ชันล่าสุด
  2. ในแถบเครื่องมือ Unity ให้เลือก Assets > Import Package > Custom Package... และเลือกไฟล์ .unitypackage จากนั้นคลิก Import.
  3. หลังจากการนำเข้าเสร็จสิ้น ให้ตรวจสอบว่าได้สร้างไฟล์และโฟลเดอร์ที่เกี่ยวข้องกับ Hive AdKit และ ADOP ในโฟลเดอร์ Assets หรือไม่
  4. ดาวน์โหลดและติดตั้งเวอร์ชันล่าสุดของ 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.
    <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 และกรอกค่า AdMobId ในรูปแบบ ca-app-pub-XXXXX~YYYYY เป็นประเภท String.
    <key>GADApplicationIdentifier</key>
    <string>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