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

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

เมื่อสร้างโปรเจกต์ iOS จะมีการสร้างเป้าหมาย UnityFramewok ที่ทำงานเป็น DynamicFramework

  1. การตั้งค่า EDM4U (ตามเวอร์ชัน 1.2.179) ตรวจสอบว่าการตั้งค่าการสร้าง static_framework ถูกตั้งค่าไว้ใน iOS Resolver Settings ของ Unity (เมนู: Assets > External Dependency Manager > iOS Resolver > Settings)

  2. ในไฟล์ Assets/HIVEAdKit/Editor/AdKitPostprocess.cs ให้ยกเลิกการคอมเมนต์ dynamicFramework Import ตำแหน่งคอมเมนต์อยู่ด้านล่างนี้

    (string Name, string Source)[] dynamicFrameworks = {
            // ("AdFitSDK.framework","Pods/AdFitSDK/Frameworks"),
            // ("AdPopcornSSP.xcframework", "Pods/AdPopcornSSP"), 
            // ("AppLovinSDK.xcframework", "Pods/AppLovinSDK/applovin-ios-sdk-13.0.0"),
            // ("BidmadSDK.xcframework", "Pods/BidmadSDK"),
            // ("NaverAdsServices.xcframework", "Pods/Naver-Ads-Services/NaverAdsServices/xcframework"), 
            ("OMSDK_Navercorp.xcframework","Pods/NAMSDK/NAMSDK/xcframework/libraries"),
            ("OMSDK_Pubmatic.xcframework","Pods/OpenWrapSDK/OpenWrapSDK"),
            // ("OMSDK_Teadstv.xcframework", "Pods/TeadsSDK/Frameworks"), 
            // ("TeadsSDK.xcframework", "Pods/TeadsSDK/Frameworks"), 
    };
    

    การยกเลิกการแสดงความคิดเห็นจะดำเนินการเฉพาะเมื่อเลือกstatic_frameworkและสร้างเท่านั้น หากใช้ Dynamic Framework การยกเลิกการแสดงความคิดเห็นเพื่อเปิดใช้งานโค้ดดังกล่าวอาจทำให้เกิดการชนกันได้

  3. สร้างโปรเจกต์ โปรเจกต์จะถูกสร้างเสร็จแล้ว เปิด Podfil ที่สร้างขึ้นในเส้นทางรากโปรเจกต์เพื่อตรวจสอบการตั้งค่าไฟล์

    source 'https://github.com/Com2uSPlatformCorp/HiveAdKit-iOS.git'
    source 'https://cdn.cocoapods.org/'
    
    แพลตฟอร์ม :ios, '12.0'
    
        target 'UnityFramework' do
        pod 'BidmadAdFitAdapter', '3.12.7.10.0'
        pod 'BidmadAdpieAdapter', '1.6.1.10.0'
        pod 'BidmadAdPopcornAdapter', '2.6.5.10.0'
        pod 'BidmadAppLovinAdapter', '13.0.0.10.0'
        pod 'BidmadAtomAdapter', '1.0.0.10.0'
        pod 'BidmadFyberAdapter', '8.3.2.10.0'
        pod 'BidmadGoogleAdManagerAdapter', '11.10.0.10.0'
        pod 'BidmadGoogleAdMobAdapter', '11.10.0.10.0'
        pod 'BidmadIronSourceAdapter', '8.3.0.0.10.0'
        pod 'BidmadPangleAdapter', '6.2.0.7.10.0'
        pod 'BidmadPartners/AdMobBidding', '1.0.5'
        pod 'BidmadPubmaticAdapter', '3.2.0.10.0'
        pod 'BidmadSDK', '6.11.0'
        pod 'BidmadTeadsAdapter', '5.0.27.10.0'
        pod 'BidmadUnityAdsAdapter', '4.12.3.10.0'
        pod 'BidmadVungleAdapter', '7.4.1.10.0'
        pod 'HiveAdKit_ADOP_PrivacyInfo', '1.5.1'
        pod 'OpenBiddingHelper', '6.11.0'
    end
    target 'Unity-iPhone' do
    end
    use_frameworks! 
    
  4. หลังจากรัน pod install ให้เปิดเวิร์กสเปซเพื่อทำการตั้งค่า Xcode ตรวจสอบแท็บ General จะพบว่า Dynamic Framework ที่จำเป็นถูกฝังโดยอัตโนมัติเหมือนดังภาพด้านล่าง

Note

[ปัญหาเกี่ยวกับการเผยแพร่ Facebook SDK]
Facebook SDK มีให้บริการเฉพาะในรูปแบบ DynamicFramework และโมดูลโฆษณาให้บริการเฉพาะในรูปแบบ StaticFramework แต่การตั้งค่าใน Podfile รองรับเพียงหนึ่งในสองรูปแบบนี้เท่านั้น ดังนั้นเมื่อสร้างจาก Unity จะต้องทำการตั้งค่าเพิ่มเติมตามวิธีด้านล่างเพื่อแก้ไขความขัดแย้งระหว่าง Facebook SDK และโมดูลโฆษณา
เพิ่มการพึ่งพาห้องสมุดเพิ่มเติมในเป้าหมายหลักของการสร้าง Xcode


เพิ่มเฟรมเวิร์ก FBSDKAMKit, FBSDKCoreKit_Baseic, FBSDKCoreKit, FBSDKLoginKit, FBSDKShareKit เป็น DynamicFramework

???+ note หากต้องการข้อมูลในการกรอกแบบสอบถามข้อมูลส่วนบุคคลเมื่อเผยแพร่แอป โปรดดูที่ คู่มือการสำรวจความเป็นส่วนตัว

การตั้งค่า 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