เหตุการณ์ที่กำหนดเองช่วยให้ผู้เผยแพร่โฆษณาใช้ Ad Managerได้ สื่อกลางเพื่อเพิ่มการแสดงโฆษณาสื่อกลางตามลำดับขั้น (Waterfall Mediation) สำหรับเครือข่ายโฆษณาบุคคลที่สาม ของเครือข่ายโฆษณาที่รองรับ คู่มือนี้จะอธิบายวิธีใช้เหตุการณ์ที่กำหนดเองที่มีอยู่ซึ่งสร้างมาสำหรับ Android และ iOS ในโปรเจ็กต์ Unity
ข้อกำหนดเบื้องต้น
ดำเนินการเริ่มต้นใช้งานให้เสร็จสมบูรณ์ เอกภาพของคุณ แอปควรมีการนำเข้าปลั๊กอิน Unity สำหรับโฆษณาในอุปกรณ์เคลื่อนที่ของ Google อยู่แล้ว
อะแดปเตอร์เหตุการณ์ที่กําหนดเองซึ่งสร้างสําหรับ Android และ iOS อยู่แล้ว เพื่อสร้างแบบกำหนดเอง อะแดปเตอร์เหตุการณ์ โปรดดูคู่มือเหตุการณ์ที่กำหนดเองของเราที่ Android และ iOS
กําหนดเหตุการณ์ที่กําหนดเอง
หากต้องการให้เหตุการณ์ที่กำหนดเองเข้าร่วมในสื่อกลาง เหตุการณ์ที่กำหนดเองจะต้อง ที่กำหนดไว้ใน Ad Manager อินเทอร์เฟซเว็บ เพิ่ม เหตุการณ์ที่กำหนดเองไปยัง กลุ่มสื่อกลาง Android และ iOS
วิธีกรอกพารามิเตอร์ | |
---|---|
ชื่อชั้นเรียน (iOS) |
สำหรับ iOS ให้ป้อนชื่อคลาสที่ใช้งานเหตุการณ์ที่กำหนดเอง หากใช้งานชั้นเรียนของคุณใน Swift คุณต้องใส่คำนำหน้าชื่อชั้นเรียนด้วย
ชื่อแอป / โมดูลเฟรมเวิร์ก (เช่น
ต้องระบุชื่อเป้าหมายหากคุณมีเป้าหมายหลายรายการในโปรเจ็กต์หรือหาก
ชื่อโปรเจ็กต์แตกต่างจากชื่อเป้าหมาย ด้วยชื่อเป้าหมาย
จะมีลักษณะดังนี้ |
ชื่อชั้นเรียน (Android) | สำหรับ Android โปรดตรวจสอบว่าค่าที่คุณให้กับ Class Name คือ
ชื่อคลาสที่มีคุณสมบัติครบถ้วนของ Android (เช่น com.google.ads.mediation.sample.customevent.SampleCustomEvent )
|
ป้ายกำกับ | ป้อนชื่อที่ไม่ซ้ำสําหรับเหตุการณ์ |
พารามิเตอร์ | หากคุณต้องการส่งอาร์กิวเมนต์สตริงไปยังเหตุการณ์ที่กำหนดเอง เช่น รหัสหน่วยโฆษณา |
นำเข้าไลบรารีเหตุการณ์ที่กำหนดเอง
เหตุการณ์ที่กำหนดเองอาจต้องมีการรวมไลบรารีเพิ่มเติมจึงจะทำงานได้ อย่างเหมาะสม ตัวอย่างเช่น คุณอาจต้องใส่ไลบรารีต่อไปนี้
- SDK ของบุคคลที่สามสำหรับ Android
- เหตุการณ์ที่กำหนดเองของบุคคลที่สามใน Android
- SDK โฆษณาของบุคคลที่สามสำหรับ iOS
- เหตุการณ์ที่กำหนดเองของบุคคลที่สามใน iOS
ประเภทของไลบรารี
การนำเข้าโค้ด Android หรือ iOS ไปยังโปรเจ็กต์ Unity นั้นทำได้หลายวิธี ซึ่งรวมถึง
- การนำเข้าอาร์ติแฟกต์ Android หรือ iOS ที่สร้างไว้ล่วงหน้าโดยใช้ทรัพยากร Dependency ภายนอก เครื่องมือจัดการสำหรับ Unity
- การนำเข้าปลั๊กอิน AAR และไลบรารี Android
- การนำเข้าไฟล์ต้นทาง Java และ Kotlin
- การนำเข้าไฟล์ต้นฉบับของ iOS และไลบรารีแบบคงที่
ทั้งนี้ขึ้นอยู่กับลักษณะการจัดแพ็กเกจไลบรารีที่คุณใช้ คุณอาจต้อง กลยุทธ์การนำเข้าสำหรับแต่ละไลบรารี เราจะกล่าวถึงแต่ละตัวเลือกอย่างละเอียดในภายหลัง
(แนะนำ) นำเข้าอาร์ติแฟกต์ Android หรือ iOS ที่สร้างไว้ล่วงหน้า
นำเข้าอาร์ติแฟกต์ที่สร้างไว้ล่วงหน้าจาก Maven หรือ CocoaPods โดยใช้ภายนอก Dependency Manager สำหรับ Unity ปลั๊กอินนี้มาพร้อมกับปลั๊กอิน GoogleMobileAds
หากต้องการนำเข้าอาร์ติแฟกต์ที่มีอยู่ ให้สร้างไฟล์การกำหนดค่าเพื่อกำหนด การนำเข้า ชื่อไฟล์และเส้นทางมีข้อกําหนดต่อไปนี้
- ไฟล์ต้องอยู่ในโฟลเดอร์
/Editor/
- ชื่อไฟล์ต้องลงท้ายด้วย
Dependencies.xml
ตัวอย่างเช่น เพื่อนําเข้าอะแดปเตอร์ของเหตุการณ์ที่กําหนดเองสําหรับเครือข่ายโฆษณาสมมติ
ชื่อ AdPub
ให้สร้างไฟล์:
Assets/AdPub/Editor/AdPubDependencies.xml
ถัดไป ให้กำหนดทรัพยากร Dependency ภายในไฟล์ AdPubDependencies.xml
กฎ
คุณสามารถดูการกำหนดค่าการนำเข้าได้ที่
เครื่องมือจัดการทรัพยากร Dependency ภายนอกสำหรับการรับ Unity
เริ่มต้นแล้ว
ข้อมูลโค้ดต่อไปนี้มี SDK ของ Android และ iOS รวมถึงเหตุการณ์ที่กำหนดเอง
ไลบรารีของ "AdPub" สมมติ เครือข่ายโฆษณา
Assets/AdPub/Editor/AdPubDependencies.xml
<dependencies>
<androidPackages>
<androidPackage spec="com.adpub.android:adpub-sdk:1.0.0" />
<androidPackage spec="com.adpub.android:adpub-custom-event:1.0.0">
<repositories>
<repository>https://repo.maven.apache.org/maven2/</repository>
<repository>https://dl.google.com/dl/android/maven2/</repository>
</repositories>
</androidPackage>
</androidPackages>
<iosPods>
<iosPod name="AdPubSDK" version="1.0" />
<iosPod name="AdPubCustomEvent" version="1.0">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>
</iosPod>
</iosPods>
</dependencies>
หากอาร์ติแฟกต์เหตุการณ์ที่กําหนดเองมีทรัพยากร Dependency ในโฆษณาที่จําเป็นอยู่แล้ว SDK เครือข่าย คุณไม่จำเป็นต้องระบุทรัพยากร Dependency ของ SDK อย่างชัดเจน ดังนี้ ตัวอย่าง
เครื่องมือจัดการการขึ้นต่อกันภายนอกจะตรวจสอบการเปลี่ยนแปลงการกำหนดค่าโดยอัตโนมัติ และแก้ไขทรัพยากร Dependency ได้ นอกจากนี้ คุณยังสามารถใช้การแก้ไขปัญหาด้วยตนเองโดยใช้ คำสั่งเมนูต่อไปนี้
Assets > External Dependency Manager > Android Resolver > Force Resolve
นำเข้าปลั๊กอิน AAR และไลบรารี Android
Unity รองรับการนำเข้าไฟล์ *.aar
และโปรเจ็กต์ไลบรารี Android ถ้า
เหตุการณ์ที่กำหนดเองของ Android ของคุณจัดอยู่ในแพ็กเกจด้วยวิธีนี้ โปรดดูที่ปลั๊กอิน AAR และ Android
ไลบรารีสำหรับวิธีการเกี่ยวกับ
วิธีรวมไฟล์เหล่านั้นไว้ในโปรเจ็กต์ Unity
นำเข้าไฟล์ต้นทางของ Java และ Kotlin
เริ่มตั้งแต่ Unity 2018.2 ขึ้นไป หากโค้ดเหตุการณ์ที่กำหนดเองของ Android ประกอบด้วย
ของไฟล์ *.java
หรือ *.kt
ที่ไม่ได้คอมไพล์ คุณจะใช้ไฟล์ต้นฉบับ Java หรือ Kotlin ได้
เป็นปลั๊กอิน
นำเข้าไฟล์ต้นฉบับของ iOS และไลบรารีแบบคงที่
Unity รองรับอาร์ติแฟกต์ *.framework
, *.h
และไฟล์ต้นทาง *.m
รายการ กำลังนำเข้า
ดูคำอธิบายอาร์ติแฟกต์และไฟล์ต้นฉบับของ iOS ได้ในคู่มือสำหรับ Unity สำหรับโฆษณาเนทีฟ
ปลั๊กอิน
ทดสอบเหตุการณ์ที่กำหนดเองด้วยเครื่องมือตรวจสอบโฆษณา
เครื่องมือตรวจสอบโฆษณาสามารถใช้เพื่อทดสอบ ว่ามีการนำเข้าเหตุการณ์ที่กำหนดเองไปยังแอปพลิเคชันอย่างถูกต้อง โฆษณา เครื่องมือตรวจสอบสามารถเปิดได้ด้วยท่าทางสัมผัสหรือใช้แบบเป็นโปรแกรมด้วยโค้ดที่น้อยที่สุด
(ไม่บังคับ) เรียกใช้เมธอดเนทีฟของ SDK บุคคลที่สามจากสคริปต์ C#
SDK เครือข่ายโฆษณาบุคคลที่สามอาจมีข้อกำหนดพิเศษซึ่งต้องใช้ การเรียกใช้วิธีการของ Android หรือ iOS โดยตรง กระบวนการเรียกใช้เมธอดเหล่านี้ โดยตรงดังนี้
- กำหนดอินเทอร์เฟซทั่วไปสำหรับไคลเอ็นต์แพลตฟอร์ม
- ใช้ไคลเอ็นต์เริ่มต้นสำหรับแพลตฟอร์มที่ไม่รองรับ
- ใช้ไคลเอ็นต์ Android สำหรับการเรียกเมธอด Android
- ใช้ไคลเอ็นต์ iOS สำหรับการเรียกเมธอดของ iOS
- ใช้งานไคลเอ็นต์ ค่าเริ่มต้นเป็นอย่างมีเงื่อนไข สลับระหว่างไคลเอ็นต์ iOS และ Android
- กำหนด API สำหรับการเข้าถึงฟังก์ชันการทำงานทั้งหมดของ SDK เครือข่ายโฆษณาของบุคคลที่สาม
ส่วนต่อไปนี้แสดงวิธีนำขั้นตอนเหล่านี้ไปใช้สำหรับสมมติฐาน เครือข่ายโฆษณาที่ชื่อ "AdPub" ใน C# API ที่สามารถเรียกใช้เมธอดใน Android ได้ และ iOS
Android
package com.adpub.android;
public class AdPubSdk
{
public static void setHasUserConsent(boolean hasUserConsent);
}
iOS
@interface AdPubSdk : NSObject
+ (void)setHasUserConsent:(BOOL)hasUserConsent;
@end
กำหนดอินเทอร์เฟซทั่วไปสำหรับไคลเอ็นต์แพลตฟอร์ม
สร้างอินเทอร์เฟซ IAdPubClient
โดยใช้เมธอดที่แสดงถึงองค์ประกอบพื้นฐาน
API ของ Android และ iOS
Assets/AdPub/Common/IAdPubClient.cs
namespace AdPub.Common
{
public interface IAdPubClient
{
///<summary>
/// Sets a flag indicating if the app has user consent for advertisement.
///</summary>
void SetHasUserConsent(bool hasUserConsent);
}
}
กำหนดไคลเอ็นต์เริ่มต้นสำหรับแพลตฟอร์มที่ไม่รองรับ
สร้างคลาส DefaultClient
ที่ใช้อินเทอร์เฟซ IAdPubClient
ที่
เพียงแต่บันทึกชื่อเมธอด ใช้การติดตั้งใช้งานนี้สำหรับตัวแก้ไข Unity และ
แพลตฟอร์มอื่นๆ ที่ไม่ใช่ Android หรือ iOS
Assets/AdPub/Common/DefaultClient.cs
namespace AdPub.Common
{
public class DefaultClient : IAdPubClient
{
public void SetHasUserConsent(bool hasUserConsent)
{
Debug.Log("SetHasUserConsent was called.");
}
}
}
ใช้ไคลเอ็นต์แพลตฟอร์ม iOS
สร้างคลาส iOSAdPubClient
ที่ใช้อินเทอร์เฟซ IAdPubClient
ใน
iOS การติดตั้งใช้งานนี้ใช้
InteropServices ที่จะเรียกใช้
เมธอด setHasUserConsent()
ในคลาส AdPubSdk
ของ iOS
Assets/AdPub/Platforms/iOS/iOSAdPubClient.cs
// Wrap this class in a conditional operator to make sure it only runs on iOS.
#if UNITY_IOS
// Reference InteropServices to include the DLLImportAttribute type.
using System.Runtime.InteropServices;
using AdPub.Common;
namespace AdPub.Platforms.Android
{
public class iOSAdPubClient : IAdPubClient
{
public void SetHasUserConsent(bool hasUserConsent)
{
GADUAdPubSetHasUserConsent(hasUserConsent);
}
[DllImport("__Internal")]
internal static extern void GADUAdPubSetHasUserConsent(bool hasUserConsent);
}
}
#endif
ต่อไป ให้ใช้เมธอด GADUAdPubSetHasUserConsent()
ที่กำหนดไว้
ที่ด้านบน สร้าง AdPubClientBridge.m
ด้วยเมธอด C
GADUAdPubSetHasUserConsent()
เพื่อจัดการการเรียกเมธอดจาก Unity และเรียกใช้
AdPubSDK
AdPubClientBridge
เป็นไฟล์ต้นฉบับของ iOS และต้องวางอยู่ภายใน
Plugins/iOS
โฟลเดอร์ตามที่อธิบายไว้ในคำแนะนำของ Unity สำหรับโฆษณาเนทีฟ
ปลั๊กอิน
Assets/AdPub/Plugins/iOS/AdPubClientBridge.m
#import <AdPubSDK/AdPubSDK.h>
void GADUAdPubSetHasUserConsent(BOOL hasUserConsent) {
[AdPubSDK setHasUserConsent:hasUserConsent];
}
ใช้ไคลเอ็นต์แพลตฟอร์ม Android
สร้างคลาส AndroidAdPubCient
ที่ใช้อินเทอร์เฟซ IAdPubClient
ใน
Android การใช้งานนี้ใช้ ตัวช่วยเหลือ Java สำหรับ Android
ชั้นเรียน
เพื่อเรียกเมธอดแบบคงที่ของ Android setHasUserConsent()
เนื่องจากคลาสตัวช่วย Java สำหรับ Android นั้นมีเฉพาะในช่วง Android
คุณสามารถป้องกันข้อผิดพลาดในการคอมไพล์ได้โดยใช้คอมไพเลอร์ UNITY_ANDROID
คำสั่งเพื่อตัด
คลาสตามที่แสดงในข้อมูลโค้ด อีกวิธีหนึ่งคือ คุณสามารถใช้ Assembly
คำจำกัดความ
ใน Unity 2017.4 ขึ้นไปเพื่อแก้ไขปัญหานี้
Assets/AdPub/Platforms/Android/AndroidAdPubClient.cs
// Wrap this class in a conditional operator to make sure it only runs on Android.
#if UNITY_ANDROID
// Reference the UnityEngine namespace which contains the JNI Helper classes.
using UnityEngine;
using AdPub.Common;
namespace AdPub.Platforms.Android
{
public class AndroidAdPubClient : IAdPubClient
{
public void SetHasUserConsent(bool hasUserConsent)
{
// Make a reference to the com.adpub.AdPubSDK.
AndroidJavaClass adPubSdk = new AndroidJavaClass("com.adpub.AdPubSdk");
// Call the native setHasUserConsent method of com.adpub.AdPubSDK.
adPubSdk.CallStatic("setHasUserConsent", hasUserConsent);
}
}
}
#endif
สร้างเมธอดจากโรงงานเพื่อส่งคืนการติดตั้งใช้งานไคลเอ็นต์ที่ถูกต้อง
เมื่อคุณติดตั้งใช้งานไคลเอ็นต์ในทุกแพลตฟอร์มแล้ว ให้สร้าง
AdPubClientFactory
เพื่อส่งคืนการติดตั้งใช้งาน
IAdPubClient
ขึ้นอยู่กับแพลตฟอร์มรันไทม์ คลาสนี้ใช้
คอมไพเลอร์
คำสั่งเพื่อ
แสดงไคลเอ็นต์ IAdPubClient
ที่ถูกต้อง
Assets/AdPub/Common/AdPubClientFactory.cs
namespace AdPub.Common
{
public class AdPubClientFactory
{
// Return the correct platform client.
public static IAdPubClient GetClient()
{
#if !UNITY_EDITOR && UNITY_ANDROID
return new AdPub.Platforms.Android.AndroidAdPubClient();
#elif !UNITY_EDITOR && UNITY_IOS
return new AdPub.Platforms.iOS.iOSAdPubClient();
#else
// Returned for the Unity Editor and unsupported platforms.
return new DefaultClient();
#endif
}
}
}
กำหนด API สาธารณะสำหรับวิธีอินเทอร์เฟซแต่ละวิธี
สร้างคลาส AdPubApi
ที่มีการเรียกใช้เมธอดสำหรับเมธอด Client แต่ละเมธอดใน
IAdPubClient
ชั้นเรียนนี้ใช้ AdPubClientFactory
เพื่อรับ
ของ IAdPubClient
และเรียกไคลเอ็นต์นั้นสำหรับ SDK ที่เกี่ยวข้อง
ที่มีประโยชน์
Assets/AdPub/AdPubApi.cs
using AdPub.Common;
namespace AdPub
{
public class AdPubApi
{
private static readonly IAdPubClient client = GetAdPubClient();
// Returns the correct client for the current runtime platform.
private static IAdPubClient GetAdPubClient()
{
return AdPubClientFactory.GetClient();
}
// Sets the user consent using the underlying SDK functionality.
public static void SetHasUserConsent(bool hasUserConsent)
{
client.SetHasUserConsent(hasUserConsent);
}
}
}
เรียกใช้ API ที่คุณกำหนดใหม่
ต่อไปนี้คือวิธีเรียก API ที่ระบุไว้ด้านบน
Assets/Scripts/AdPubController.cs
using UnityEngine;
using AdPub;
public class AdPubController : MonoBehaviour
{
// TODO: Get consent from the user and update this userConsent field.
public bool userConsent;
// Called on startup of the GameObject it's assigned to.
public void Start()
{
// Pass the user consent to AdPub.
AdPubApi.SetHasUserConsent(userConsent);
}
}
ตัวอย่างเพิ่มเติมของอะแดปเตอร์เครือข่ายโฆษณาของบุคคลที่สาม
ไปที่GitHub สำหรับปลั๊กอินสำหรับโฆษณาบนอุปกรณ์เคลื่อนที่ของ Google Mobile ที่เก็บ ดูตัวอย่างเพิ่มเติมของอะแดปเตอร์สื่อกลางของบุคคลที่สามที่ใช้ C# API เพื่อรวมการโทรไปยังเมธอดของ iOS และ Android