Buat peristiwa kustom

Peristiwa kustom memungkinkan penayang menggunakan mediasi AdMob untuk menambahkan mediasi waterfall untuk jaringan iklan pihak ketiga yang bukan salah satu dari jaringan iklan yang didukung. Panduan ini menjelaskan cara menggunakan peristiwa kustom yang ada yang dibuat untuk Android dan iOS dalam project Unity.

Prasyarat

  • Selesaikan bagian Mulai. Aplikasi Unity Anda harus sudah memiliki plugin Google Mobile Ads Unity yang diimpor.

  • Adaptor peristiwa kustom yang sudah dibuat untuk Android dan iOS. Untuk membuat adaptor peristiwa kustom, lihat panduan peristiwa kustom kami tentangAndroid daniOS.

Menentukan peristiwa kustom

Agar peristiwa kustom dapat berpartisipasi dalam mediasi, peristiwa kustom harus ditentukan di AdMob antarmuka web. Tambahkan peristiwa kustom ke grup mediasi Android dan iOS.

Screenshot ini menampilkan beberapa contoh setelan peristiwa kustom:

Cara mengisi parameter
Nama Kelas (iOS)

Untuk iOS, masukkan nama kelas yang menerapkan peristiwa kustom.

Jika class Anda diterapkan di Swift, Anda harus menambahkan awalan pada nama class dengan nama modul aplikasi / frameworknya (misalnya, appName.className).

Nama target wajib diisi jika Anda memiliki beberapa target dalam project atau jika nama project berbeda dengan nama target. Dengan nama target, akan terlihat seperti ini: appName_targetName.className. Selain itu, jangan lupa untuk mengganti karakter non-alfanumerik seperti tanda hubung dengan garis bawah.

Nama Kelas (Android) Untuk Android, pastikan nilai yang Anda berikan untuk Class Name adalah nama class yang sepenuhnya memenuhi syarat untuk Android (misalnya com.google.ads.mediation.sample.customevent.SampleCustomEvent).
Label Masukkan nama unik untuk peristiwa.
Parameter Jika ingin meneruskan argumen string ke peristiwa kustom, misalnya, ID unit iklan.

Mengimpor library peristiwa kustom

Peristiwa kustom mungkin memerlukan library tambahan agar disertakan agar dapat berfungsi dengan benar. Misalnya, Anda mungkin perlu menyertakan library berikut:

  • SDK pihak ketiga Android
  • Peristiwa kustom pihak ketiga Android
  • SDK iklan pihak ketiga iOS
  • Peristiwa kustom pihak ketiga iOS

Jenis library

Ada beberapa cara untuk mengimpor kode Android atau iOS ke project Unity, termasuk:

  • Mengimpor artefak Android atau iOS bawaan menggunakan External Dependency Manager untuk Unity
  • Mengimpor plugin AAR dan library Android
  • Mengimpor file sumber Java dan Kotlin
  • Mengimpor file sumber iOS dan library statis

Bergantung pada paket library yang digunakan, Anda mungkin memerlukan strategi impor yang berbeda untuk setiap library. Setiap opsi akan dibahas secara lebih mendetail nanti.

(Direkomendasikan) Mengimpor artefak Android atau iOS bawaan

Impor artefak bawaan dari Maven atau CocoaPods menggunakan External Dependency Manager untuk Unity. Plugin ini disertakan dengan plugin GoogleMobileAds.

Untuk mengimpor artefak yang ada, buat file konfigurasi untuk menentukan impor Anda. Nama file dan jalur memiliki persyaratan berikut:

  • File harus ada di folder /Editor/.
  • Nama file harus diakhiri dengan Dependencies.xml.

Misalnya, untuk mengimpor adaptor peristiwa kustom untuk jaringan iklan fiktif yang bernama AdPub, buat file:

Assets/AdPub/Editor/AdPubDependencies.xml

Selanjutnya, tentukan dependensi Anda di dalam file AdPubDependencies.xml. Aturan untuk mengonfigurasi impor dapat ditemukan di External Dependency Manager untuk Memulai Unity. Cuplikan kode berikut mencakup Android dan iOS SDK serta library peristiwa kustom untuk jaringan iklan "AdPub" fiktif.

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>

Jika artefak peristiwa kustom Anda sudah memiliki dependensi pada SDK jaringan iklan yang diperlukan, Anda tidak perlu menentukan dependensi SDK secara eksplisit: Contoh

External Dependency Manager otomatis memantau perubahan konfigurasi dan menyelesaikan dependensi. Anda juga dapat menjalankan resolusi manual dengan perintah menu berikut:

Assets > External Dependency Manager > Android Resolver > Force Resolve

Mengimpor plugin AAR dan library Android

Unity mendukung impor file *.aar serta project library Android. Jika peristiwa kustom Android Anda dikemas dengan cara ini, lihat plugin AAR dan Library Android untuk mengetahui petunjuk cara menyertakan file tersebut dalam project Unity Anda.

Mengimpor file sumber Java dan Kotlin

Mulai Unity 2018.2 atau yang lebih tinggi, jika kode peristiwa kustom Android Anda terdiri dari file *.java atau *.kt yang tidak dikompilasi, Anda dapat menggunakan file sumber Java atau Kotlin sebagai plugin.

Mengimpor file sumber iOS dan library statis

Unity mendukung file sumber *.framework, file sumber *.h, dan *.m. Mengimpor artefak dan file sumber iOS dijelaskan dalam Panduan Unity untuk plugin native.

Menguji peristiwa kustom dengan pemeriksa iklan

Pemeriksa iklan dapat digunakan untuk menguji bahwa peristiwa kustom telah diimpor dengan benar ke aplikasi Anda. Pemeriksa iklan dapat dibuka hanya dengan gestur atau secara terprogram dengan kode minimal.

(Opsional) Memanggil metode native SDK pihak ketiga dari skrip C#

SDK jaringan iklan pihak ketiga mungkin memiliki persyaratan khusus yang memerlukan panggilan metode Android atau iOS secara langsung. Proses untuk memanggil metode ini secara langsung adalah sebagai berikut:

  1. Menentukan antarmuka umum untuk klien platform
  2. Mengimplementasikan klien default untuk platform yang tidak didukung
  3. Mengimplementasikan klien Android untuk memanggil metode Android
  4. Mengimplementasikan klien iOS untuk memanggil metode iOS
  5. Menerapkan factory klien untuk beralih secara bersyarat antara klien iOS dan Android
  6. Menentukan API untuk mengakses semua fungsi SDK jaringan iklan pihak ketiga

Bagian berikut menunjukkan cara penerapan langkah-langkah ini untuk jaringan iklan fiktif yang disebut "AdPub" di C# API yang dapat memanggil metode di Android dan iOS:

Android

package com.adpub.android;

public class AdPubSdk
{
    public static void setHasUserConsent(boolean hasUserConsent);
}

iOS

@interface AdPubSdk : NSObject
+ (void)setHasUserConsent:(BOOL)hasUserConsent;
@end

Menentukan antarmuka umum untuk klien platform

Buat antarmuka IAdPubClient dengan metode yang merepresentasikan API Android dan iOS yang mendasarinya.

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);
    }
}

Menentukan klien default untuk platform yang tidak didukung

Buat class DefaultClient yang mengimplementasikan antarmuka IAdPubClient yang hanya mencatat nama metode. Gunakan implementasi ini untuk editor Unity dan semua platform selain Android atau iOS.

Assets/AdPub/Common/DefaultClient.cs

namespace AdPub.Common
{
    public class DefaultClient : IAdPubClient
    {
        public void SetHasUserConsent(bool hasUserConsent)
        {
            Debug.Log("SetHasUserConsent was called.");
        }
    }
}

Mengimplementasikan klien platform iOS

Buat class iOSAdPubClient yang mengimplementasikan antarmuka IAdPubClient di iOS. Implementasi ini menggunakan InteropServices untuk memanggil metode setHasUserConsent() di class 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

Selanjutnya, terapkan metode GADUAdPubSetHasUserConsent() yang ditentukan di atas. Buat AdPubClientBridge.m dengan metode C GADUAdPubSetHasUserConsent() untuk menangani panggilan metode dari Unity, dan memanggil AdPubSDK.

AdPubClientBridge adalah file sumber iOS dan harus ditempatkan di dalam folder Plugins/iOS seperti yang dijelaskan dalam Panduan Unity untuk plugin native.

Assets/AdPub/Plugins/iOS/AdPubClientBridge.m

#import <AdPubSDK/AdPubSDK.h>

void GADUAdPubSetHasUserConsent(BOOL hasUserConsent) {
  [AdPubSDK setHasUserConsent:hasUserConsent];
}

Mengimplementasikan klien platform Android

Buat class AndroidAdPubCient yang mengimplementasikan antarmuka IAdPubClient di Android. Implementasi ini menggunakan class helper Java Android untuk memanggil metode statis Android setHasUserConsent().

Karena class helper Java Android hanya tersedia selama runtime Android, Anda dapat mencegah error kompilasi menggunakan perintah compiler UNITY_ANDROID untuk menggabungkan class seperti yang ditampilkan dalam cuplikan kode. Atau, Anda dapat menggunakan definisi Assembly di Unity 2017.4 dan yang lebih baru untuk menyelesaikan masalah ini.

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

Membuat metode factory untuk menampilkan implementasi klien yang benar

Setelah Anda memiliki implementasi klien untuk setiap platform, buat class AdPubClientFactory untuk menampilkan implementasi antarmuka IAdPubClient yang benar, bergantung pada platform runtime. Class ini menggunakan perintah compiler untuk menampilkan klien IAdPubClient yang benar.

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
        }
    }
}

Menentukan API publik untuk setiap metode antarmuka

Buat class AdPubApi yang memiliki panggilan metode untuk setiap metode klien di antarmuka IAdPubClient Anda. Class ini menggunakan AdPubClientFactory untuk mendapatkan instance IAdPubClient dan memanggil klien tersebut untuk fungsi SDK yang mendasarinya.

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);
        }
    }
}

Memanggil API yang baru ditetapkan

Berikut adalah cara memanggil API yang didefinisikan di atas:

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);
    }
}

Contoh adaptor jaringan iklan pihak ketiga tambahan

Buka repositori GitHub plugin Google Mobile Ads Unity untuk mengetahui contoh tambahan adaptor mediasi pihak ketiga yang menerapkan C# API untuk menggabungkan panggilan ke metode iOS dan Android.