Özel etkinlikler oluştur

Özel etkinlikler, yayıncıların AdMob olmayan bir üçüncü taraf reklam ağı için şelale uyumlulaştırması eklemek amacıyla uyumlulaştırma desteklenen reklam ağlarının tümünü kapsar. Bu kılavuzda, Android ve iOS için geliştirilmiş mevcut bir özel etkinliğin Unity projesinde iOS.

Ön koşullar

  • Başlayın bölümünü tamamlayın. Birliğiniz uygulamada Google Mobile Ads Unity eklentisi içe aktarılmıştır.

  • Android ve iOS için geliştirilmiş özel etkinlik bağdaştırıcıları. Özel oluşturmak için etkinlik bağdaştırıcıları, aşağıdaki adımları uygulayarak Android ve iOS.

Özel etkinlik tanımlama

Özel bir etkinliğin uyumlulaştırmaya katılabilmesi için ilgili etkinliğin AdMob web arayüzünde tanımlanmalıdır. Bir özel etkinlik için Android ve iOS uyumlulaştırma grupları.

Bu ekran görüntüsünde, bazı örnek özel etkinlik ayarları gösterilmektedir:

Parametreleri doldurma
Sınıf Adı (iOS)

iOS için, özel etkinliği uygulayan sınıfın adını girin.

Sınıfınız Swift uygulamasında kullanılıyorsa sınıf adının önüne uygulama / çerçeve modülünün adı (örneğin, appName.className) bilgileri gösterilir.

Projenizde birden fazla hedef varsa veya projenizde birden çok hedef varsa hedef ad gereklidir proje adı, hedef addan farklı. Hedef adı ile birlikte şöyle görünür: appName_targetName.className. Ayrıca, tire gibi alfanümerik olmayan karakterleri alt çizgi.

Sınıf Adı (Android) Android için Class Name öğesi için sağladığınız değerin şu olduğundan emin olun: Android için tam sınıf adı (örneğin, com.google.ads.mediation.sample.customevent.SampleCustomEvent).
Şirket Etkinlik için benzersiz bir ad girin.
Parametre Özel etkinliğinize bir dize bağımsız değişkeni iletmek istiyorsanız, örneğin reklam birimi kimliği.

Özel etkinlik kitaplıklarını içe aktarın

Özel etkinliklerin çalışması için ek kitaplıkların eklenmesi gerekebilir gerekir. Örneğin, aşağıdaki kitaplıkları dahil etmeniz gerekebilir:

  • Android üçüncü taraf SDK'sı
  • Android üçüncü taraf özel etkinliği
  • iOS üçüncü taraf reklam SDK'sı
  • iOS üçüncü taraf özel etkinliği

Kütüphane türleri

Android veya iOS kodunu Unity projesine aktarmanın çeşitli yolları vardır. şunları içerir:

  • Harici Bağımlılığı kullanarak önceden oluşturulmuş Android veya iOS yapılarını içe aktarma Unity yöneticisi
  • AAR eklentilerini ve Android kitaplıklarını içe aktarma
  • Java ve Kotlin kaynak dosyalarını içe aktarma
  • iOS kaynak dosyalarını ve statik kitaplıkları içe aktarma

Kullandığınız kitaplıkların nasıl paketlendiğine bağlı olarak farklı bir içe aktarma stratejisi kullanır. Her bir seçenek daha sonra daha ayrıntılı bir şekilde açıklanacaktır.

(Önerilir) Önceden oluşturulmuş Android veya iOS yapılarını içe aktarın

Harici Unity için Bağımlılık Yöneticisi Bu eklenti, GoogleMobileAds eklentisine dahildir.

Mevcut yapıları içe aktarmak için bir yapılandırma dosyası oluşturarak içe aktarılmalıdır. Dosya adı ve yolu aşağıdaki koşullara tabidir:

  • Dosya, /Editor/ klasöründe bulunmalıdır.
  • Dosya adı Dependencies.xml ile bitmelidir.

Örneğin, varsayımsal bir reklam ağı için özel etkinlik bağdaştırıcılarını içe aktarmak üzere dosyayı AdPub ise oluşturun:

Assets/AdPub/Editor/AdPubDependencies.xml

Sonra, AdPubDependencies.xml dosyasında bağımlılıklarınızı tanımlayın. Kurallar yapılandırma adımlarını şu adreste bulabilirsiniz: Unity Building için Harici Bağımlılık Yöneticisi Başlatıldı. İlgili içeriği oluşturmak için kullanılan Aşağıdaki kod snippet'i, Android ve iOS SDK ile özel etkinliği içerir. varsayımsal bir "AdPub" için kitaplıklar reklam ağında çalışır.

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>

Özel etkinlik yapınızın gerekli reklama zaten bağımlılığı varsa ağ SDK'sını kullanıyorsanız SDK bağımlılığını açıkça tanımlamanız gerekmez: Örnek

Harici Bağımlılık Yöneticisi, yapılandırma değişikliklerini otomatik olarak izler ve bağımlılıkları çözmekten bahsedeceğiz. Alternatif olarak, şu menü komutunu kullanın:

Assets > External Dependency Manager > Android Resolver > Force Resolve

AAR eklentilerini ve Android kitaplıklarını içe aktarma

Unity, *.aar dosyalarının yanı sıra Android kitaplık projelerinin de içe aktarılmasını destekler. Eğer Android özel etkinliğiniz bu şekilde paketlenmiştir. Daha fazla bilgi için AAR eklentileri ve Android Kitaplıklar'da bu kitapla ilgili talimatlar için Unity projenize nasıl dahil edeceğinizi.

Java ve Kotlin kaynak dosyalarını içe aktarma

Unity 2018.2 veya sonraki sürümlerden biri (Android özel etkinlik kodunuzdaysa) için derlenmemiş *.java veya *.kt dosyalarından yararlanmak istiyorsanız Java veya Kotlin kaynak dosyalarını kullanabilirsiniz. .

iOS kaynak dosyalarını ve statik kitaplıkları içe aktarma

Unity; *.framework yapıları, *.h ve *.m kaynak dosyalarını destekler. İçe aktarılıyor iOS yapıları ve kaynak dosyaları, Unity'nin yerel reklam kılavuzunda açıklanmıştır inceleyin.

Reklam inceleyici ile özel etkinlikleri test etme

Test amacıyla Reklam İnceleyici kullanılabilir doğru şekilde içe aktarılıp aktarılmadığını kontrol etmenizi sağlar. Reklam Denetleyici sadece hareketlerle veya minimum düzeyde kodla programlı bir şekilde açılabilir.

(İsteğe bağlı) C# komut dosyalarından üçüncü taraf SDK yerel yöntemlerini çağırma

Üçüncü taraf reklam ağı SDK'larının, şunları gerektirecek özel şartları olabilir: doğrudan Android veya iOS yöntemlerini çağırarak. Bu yöntemleri çağırma süreci aşağıdaki gibidir:

  1. Platform istemcileri için ortak bir arayüz tanımlayın
  2. Desteklenmeyen platformlar için varsayılan istemci uygulama
  3. Android yöntemlerini çağırmak için bir Android istemcisi uygulama
  4. iOS yöntemlerini çağırmak için bir iOS istemcisi uygulama
  5. Bir müşteriyi uygulama fabrika ayarlarına iOS ve Android istemcileri arasında geçiş yapma
  6. Tüm üçüncü taraf reklam ağı SDK'sı işlevlerine erişmek için bir API tanımlayın

Aşağıdaki bölüm, bu adımların varsayımsal bir dönüşümde nasıl "AdPub" adlı reklam ağı Android'de yöntemlere çağrı yapabilen bir C# API'sinde ve iOS:

Android

package com.adpub.android;

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

iOS

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

Platform istemcileri için ortak bir arayüz tanımlayın

Temel kodu temsil eden bir yöntemle IAdPubClient arayüzü oluşturun Android ve iOS API.

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

Desteklenmeyen platformlar için varsayılan istemci tanımlama

Aşağıdaki özelliklere sahip IAdPubClient arayüzünü uygulayarak bir DefaultClient sınıfı oluşturun: yöntem adını günlüğe kaydeder. Unity düzenleyicide ve diğer tüm platformlarda diğer platformlara odaklanmanızı sağlar.

Assets/AdPub/Common/DefaultClient.cs

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

iOS platform istemcisini uygulama

Şu tarihte IAdPubClient arayüzünü uygulayan bir iOSAdPubClient sınıfı oluşturun: iOS. Bu uygulama, Çağrı yapılacak InteropServices iOS AdPubSdk sınıfındaki setHasUserConsent() yöntemi.

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

Sonra, tanımlanan GADUAdPubSetHasUserConsent() yöntemini uygulayın bölümünü ziyaret edin. C yöntemiyle AdPubClientBridge.m oluşturma Unity'den yöntem çağrısını işlemek ve çağırmak için GADUAdPubSetHasUserConsent() AdPubSDK.

AdPubClientBridge, bir iOS kaynak dosyasıdır ve Unity'nin yerel reklam kılavuzunda açıklandığı şekilde Plugins/iOS klasörü hakkında daha fazla bilgi edinin.

Assets/AdPub/Plugins/iOS/AdPubClientBridge.m

#import <AdPubSDK/AdPubSDK.h>

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

Android platform istemcisini uygulama

Şu tarihte IAdPubClient arayüzünü uygulayan bir AndroidAdPubCient sınıfı oluşturun: Android Bu uygulama, Android Java yardımcısını sınıflar işlevini çağırın.setHasUserConsent()

Android Java yardımcı sınıfları yalnızca Android derleme hatalarını önlemek için UNITY_ANDROID derleyiciyi kullanın sarmalama yönergesi kodu snippet'inde gösterildiği gibi ekleyin. Alternatif olarak Assembly tanımlar .

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

Doğru istemci uygulamasını döndürmek için fabrika yöntemi oluşturma

Artık her platformda istemci uygulamalarını bildiğinize göre Doğru uygulamasını döndürmek için AdPubClientFactory sınıfını kullanın. Çalışma zamanı platformuna bağlı olarak IAdPubClient arayüzü. Bu sınıfta kullanılanlar derleyici yönergelerini doğru IAdPubClientistemciyi döndürür.

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

Her arayüz yöntemi için herkese açık bir API tanımlayın

AdPubApi IAdPubClient arayüzü. Bu sınıf, AdPubClientFactory uygulamasını kullanarak IAdPubClient örneğinin bir örneğidir ve temel SDK için bu istemciyi çağırır. işlevler sunar.

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

Yeni tanımlanan API'nizi çağırın

Yukarıda tanımlanan API'yi şu şekilde çağırabilirsiniz:

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

Diğer üçüncü taraf reklam ağı bağdaştırıcısı örnekleri

Google Mobil Reklamlar Unity eklentisi GitHub'ı ziyaret edin veri deposu C# API'lerini uygulayan üçüncü taraf uyumlulaştırma bağdaştırıcılarına ilişkin diğer örnekler için sarmalama özelliğini kullanabilirsiniz.