Buat peristiwa kustom

Peristiwa kustom memungkinkan penayang yang menggunakan mediasi AdMob 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 Mulai. Aplikasi Unity Anda harus sudah mengimpor plugin Google Mobile Ads Unity.

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

Menentukan peristiwa kustom

Agar dapat berpartisipasi dalam mediasi, peristiwa kustom harus ditentukan di antarmuka web AdMob. 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 class yang menerapkan peristiwa kustom.

Jika class Anda diterapkan di Swift, Anda perlu menambahkan awalan pada nama class dengan nama modul aplikasi / framework-nya (misalnya, appName.className).

Nama target diperlukan jika Anda memiliki beberapa target dalam project atau jika nama project berbeda dengan nama target. Dengan nama target, perintahnya 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 acara.
Parameter Jika Anda ingin meneruskan argumen string ke peristiwa kustom, misalnya ID unit iklan.

Mengimpor library peristiwa kustom

Peristiwa kustom mungkin memerlukan penyertaan library tambahan 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 pustaka

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

  • Mengimpor artefak Android atau iOS yang telah dibuat sebelumnya menggunakan External Dependency Manager untuk Unity
  • Mengimpor plug-in AAR dan library Android
  • Mengimpor file sumber Java dan Kotlin
  • Mengimpor file sumber dan library statis iOS

Bergantung pada cara pengemasan library yang Anda gunakan, Anda mungkin memerlukan strategi impor yang berbeda untuk setiap library. Setiap opsi akan dibahas lebih mendetail nanti.

(Direkomendasikan) Mengimpor artefak Android atau iOS yang sudah dibuat sebelumnya

Impor artefak yang telah dibuat sebelumnya dari Maven atau CocoaPods menggunakan External Dependency Manager for 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 hipotetis 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 for Unity Getting Started. Cuplikan kode berikut menyertakan SDK Android dan iOS serta library peristiwa kustom untuk jaringan iklan "AdPub" hipotetis.

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

Pengelola Dependensi Eksternal secara 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 plug-in AAR dan library Android

Unity mendukung pengimporan file *.aar serta project library Android. Jika peristiwa kustom Android Anda dikemas dengan cara ini, lihat Plugin AAR dan Library Android untuk mengetahui petunjuk tentang 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 dan library statis iOS

Unity mendukung artefak *.framework, *.h, dan file sumber *.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 dalam aplikasi Anda. Pemeriksa iklan dapat dibuka hanya dengan gestur atau secara terprogram dengan kode minimal.

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

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

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

Bagian berikut menunjukkan cara langkah-langkah ini diterapkan untuk jaringan iklan hipotetis bernama "AdPub" dalam API C# 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 penerapan 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 panggil 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 menerapkan 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 UNITY_ANDROID direktif kompilator untuk memaketkan class seperti yang ditunjukkan dalam cuplikan kode. Atau, Anda dapat menggunakan Definisi assembly di Unity 2017.4 dan yang lebih baru untuk mengatasi 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

Buat metode pabrik untuk menampilkan penerapan klien yang benar

Setelah memiliki implementasi klien untuk setiap platform, buat class AdPubClientFactory untuk menampilkan implementasi antarmuka IAdPubClient yang benar, bergantung pada platform runtime. Class ini menggunakan direktif 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);
        }
    }
}

Panggil API yang baru Anda tentukan

Berikut cara memanggil API yang ditentukan 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 contoh tambahan adapter mediasi pihak ketiga yang menerapkan API C# untuk memanggil metode iOS dan Android.