自訂事件可讓發布商使用 AdMob 中介服務,為其他第三方廣告聯播網新增刊登序列中介服務 支援的廣告聯播網中 本指南說明如何使用專為 Android 和 Android 平台建立的現有自訂事件 Unity 專案中的 iOS 應用程式。
必要條件
完成開始使用。您的 Unity 應用程式應該已匯入 Google 行動廣告 Unity 外掛程式。
專為 Android 和 iOS 打造的自訂事件轉接程式。如要建立自訂回應,請按照下列步驟操作: 事件轉接程式,請參閱自訂事件指南 Android 和 iOS。
定義自訂事件
自訂事件必須符合下列條件,自訂事件才能加入中介服務 是在網頁介面上 AdMob 定義。新增 自訂事件套用到 Android 和 iOS 中介服務群組。
這張螢幕截圖顯示一些自訂事件設定範例:
如何填寫參數 | |
---|---|
課程名稱 (iOS) |
如果是 iOS,請輸入導入自訂事件的類別名稱。 如果您的類別是透過 Swift 導入,則必須在類別名稱前面加上
應用程式 / 架構模組的名稱 (例如
如果專案中有多個目標,或是
專案名稱與目標名稱不同。有了目標名稱
看起來會像這樣: |
課程名稱 (Android) | 若是 Android,請確保您提供給 Class Name 的值為
Android 的完整類別名稱 (例如 com.google.ads.mediation.sample.customevent.SampleCustomEvent )。
|
標籤 | 請輸入事件的專屬名稱。 |
參數 | 如果您想將字串引數傳遞至自訂事件,例如 廣告單元 ID |
匯入自訂事件程式庫
自訂事件可能需要加入其他程式庫才能運作 正確做法。舉例來說,您可能需要加入下列程式庫:
- Android 第三方 SDK
- Android 第三方自訂事件
- iOS 第三方廣告 SDK
- iOS 第三方自訂事件
程式庫類型
在 Unity 專案中,有多種方法可以匯入 Android 或 iOS 程式碼。 包括:
- 使用外部依附元件匯入預先建立的 Android 或 iOS 構件 Unity 專用 Manager
- 匯入 AAR 外掛程式和 Android 程式庫
- 匯入 Java 和 Kotlin 來源檔案
- 匯入 iOS 來源檔案和靜態程式庫
視您使用的程式庫的封裝方式而定,可能需要不同的 為每個程式庫匯入策略我們稍後會詳細說明每個選項。
(建議) 匯入預先建立的 Android 或 iOS 構件
使用 外部 Unity 的依附元件管理工具。 GoogleMobileAds 外掛程式包含這個外掛程式。
如要匯入現有成果,請建立設定檔來定義 匯入。檔案名稱和路徑必須符合下列條件:
- 檔案必須位於
/Editor/
資料夾中。 - 檔案名稱結尾必須是
Dependencies.xml
。
例如,為假想廣告聯播網匯入自訂事件轉接程式
名稱為 AdPub
,請建立檔案:
Assets/AdPub/Editor/AdPubDependencies.xml
接著,請在 AdPubDependencies.xml
檔案中定義依附元件。規則
如要設定匯入作業,請前往
用於取得 Unity 的外部依附元件管理工具
已開始。
下列程式碼片段包含 Android 和 iOS SDK 和自訂事件
適用於假想「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>
如果您的自訂事件構件已依附於必要的廣告 聯播網 SDK,您不必明確定義 SDK 依附元件: 範例
外部依附元件管理工具會自動監控設定變更 並解析依附元件您也可以使用 以下選單指令:
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 的原生指南
外掛程式)。
使用廣告檢查器測試自訂事件
廣告檢查器 自訂事件已正確匯入您的應用程式。廣告 只要使用手勢就能開啟檢查器,只要利用最少的程式碼,即可以程式輔助方式開啟。
(選用) 從 C# 指令碼呼叫第三方 SDK 原生方法
第三方廣告聯播網 SDK 可能有特殊需求 直接呼叫 Android 或 iOS 方法呼叫這些方法的程序 直接如下:
- 為平台用戶端定義通用介面
- 為不支援的平台導入預設用戶端
- 實作用於呼叫 Android 方法的 Android 用戶端
- 實作 iOS 用戶端以呼叫 iOS 方法
- 實作用戶端 將工廠調整為特定狀態 在 iOS 和 Android 用戶端之間切換
- 定義用於存取所有第三方廣告聯播網 SDK 功能的 API
下一節說明如何針對假想實作這些步驟 「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
介面
Android 和 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);
}
}
為不支援的平台定義預設用戶端
建立實作 IAdPubClient
介面的 DefaultClient
類別。
只會記錄方法名稱請將此實作用於 Unity 編輯器和所有
平台。
Assets/AdPub/Common/DefaultClient.cs
namespace AdPub.Common
{
public class DefaultClient : IAdPubClient
{
public void SetHasUserConsent(bool hasUserConsent)
{
Debug.Log("SetHasUserConsent was called.");
}
}
}
實作 iOS 平台用戶端
建立實作 IAdPubClient
介面的 iOSAdPubClient
類別
iOS 裝置。這項實作方式會使用
InteropServices 呼叫
iOS AdPubSdk
類別中的 setHasUserConsent()
方法。
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()
方法
。使用 C
方法建立 AdPubClientBridge.m
GADUAdPubSetHasUserConsent()
用於處理 Unity 的方法呼叫,並叫用
AdPubSDK
。
AdPubClientBridge
是 iOS 來源檔案,必須放置在
如 Unity 原生指南 所述,Plugins/iOS
資料夾
外掛程式。
Assets/AdPub/Plugins/iOS/AdPubClientBridge.m
#import <AdPubSDK/AdPubSDK.h>
void GADUAdPubSetHasUserConsent(BOOL hasUserConsent) {
[AdPubSDK setHasUserConsent:hasUserConsent];
}
實作 Android 平台用戶端
建立實作 IAdPubClient
介面的 AndroidAdPubCient
類別
Android。此實作使用 Android Java 輔助程式
類別
呼叫 Android 靜態方法 setHasUserConsent()
。
由於 Android Java 輔助類別只能在 Android 期間使用
執行階段,您可以使用 UNITY_ANDROID
編譯器
要換行的指令
如程式碼片段所示或者,您也可以使用 Assembly
定義
,即可解決這個問題。
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
類別,其中包含檔案中的每個用戶端方法呼叫的方法:
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);
}
}
其他第三方廣告聯播網轉接程式範例
前往 Google 行動廣告 Unity 外掛程式 GitHub 外掛程式 存放區 查看導入 C# API 的第三方中介服務轉接程式更多範例 可將呼叫納入 iOS 和 Android 方法。