要使用内购推荐 (IAP Promo),您需要:
1.配置项目以使用 Unity 服务。 2. Enable Unity IAP and Unity Ads in your Project.
内购推荐 (IAP Promo) 需要受支持的 Unity IAP SDK 版本 (1.17+)。要获取最新 IAP SDK,请在 Services 窗口 (Window > Services) 中启用 __In-App Purchasing__,或者从 Asset Store 将其导入。如果是从 Services 窗口启用,务必在系统提示时选择导入 (Import) 资源包。
请参阅有关设置 IAP 的文档以了解其他信息。
内购推荐 (IAP Promo) 需要受支持的 Unity Ads SDK 版本 (2.2+)。请从 Asset Store 导入最新的 Unity Ads SDK 以获得此 SDK。这样就能为项目启用 Unity Ads。
请参阅设置 Unity Ads 以了解其他信息。
在设置所需服务后,即可在游戏中实现它们。
必须在初始化 Unity Ads 之前先初始化 IAP 才能使用__推荐 (Promotions)__。初始化有两个选项:无码或脚本。
Codeless IAP handles initialization for you. To use Codeless IAP, populate a Product Catalog, then create an IAP Listener to fetch that catalog.
To populate a codeless Product Catalog:
1.在 Editor 中,选择 Window > UnityIAP > IAP Catalog 以打开 IAP Catalog 窗口。该窗口会列出您以前配置的所有商品。必须在__商品目录__中至少配置一个__商品__。有关设置__商品__的完整过程,请参阅 Codeless IAP。
Next, create an IAP Listener. Select Window > Unity IAP > Create IAP Listener, and add it to the first scene of your game. The listener fetches your Product Catalog as soon as the game boots. This avoids errors where the game requests Promotions but a Product isn’t ready because the codeless button hasn’t appeared in the scene yet.
If you initialize Unity IAP manually through a script, you can add logic to ensure that IAP always initializes before Unity Ads, as shown in the code example below:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Advertisements;
using UnityEngine.Events;
using UnityEngine.Purchasing;
using UnityEngine.UI;
[RequireComponent(typeof(AdsManager))]
public class UnityIAP : MonoBehaviour, IStoreListener
{
private IStoreController controller;
private AdsManager ads;
private const string product_coins = "100.gold.coins";
private const string product_hat = "top_hat";
private const string product_elite = "elite_status";
private const string product_bundle = "gem_super_box";
public int coin_count = 0;
public int gems_count = 0;
public bool hat_owned = false;
public bool elite_member = false;
private void Awake()
{
this.ads = GetComponent<AdsManager>();
// 其中 AdsManager 是您的 Ads 初始化脚本
}
private void Start()
{
Debug.Log("UnityIAP.Init()");
// var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
StandardPurchasingModule module = StandardPurchasingModule.Instance();
ProductCatalog catalog = ProductCatalog.LoadDefaultCatalog();
ConfigurationBuilder builder = ConfigurationBuilder.Instance(module);
IAPConfigurationHelper.PopulateConfigurationBuilder(ref builder, catalog);
UnityPurchasing.Initialize(this, builder);
}
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
Debug.Log("UnityIAP.OnInitialized(...)");
this.controller = controller;
this.ads.Init();
// 其中 Init() 是您的 Unity Ads 初始化方法
}
public void OnInitializeFailed(InitializationFailureReason error)
{
Debug.Log("UnityIAP.OnInitializeFailed(" + error + ")");
this.ads.Init();
// 如果 IAP 初始化失败,您可能仍然希望初始化 Ads
}
public void Buy(string productId)
{
Debug.Log("UnityIAP.BuyClicked(" + productId + ")");
this.controller.InitiatePurchase(productId);
}
public void OnPurchaseFailed(Product item, PurchaseFailureReason r)
{
Debug.Log("UnityIAP.OnPurchaseFailed(" + item + ", " + r + ")");
}
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e)
{
string purchasedItem = e.purchasedProduct.definition.id;
switch (purchasedItem)
{
case product_coins:
Debug.Log("IAPLog: Congratualtions you are richer!");
coin_count += 100;
Debug.Log("IAPLog: Coin count: " + coin_count);
break;
case product_hat:
hat_owned = true;
Button topHatButton = GameObject.Find("buyTopHat").GetComponent<Button>();
topHatButton.interactable = false;
topHatButton.GetComponentInChildren<Text>().text = "That hat is dashing!";
Debug.Log("IAPLog: Hat owned: " + hat_owned);
break;
case product_elite:
elite_member = true;
Button eliteButton = GameObject.Find("buyElite").GetComponent<Button>();
eliteButton.interactable = false;
eliteButton.GetComponentInChildren<Text>().text = "Welcome to Elite Status";
Debug.Log("IAPLog: Elite member: " + elite_member);
break;
case product_bundle:
gems_count += 5000;
break;
}
return PurchaseProcessingResult.Complete;
}
}
Initializing Unity Ads from within the IAP initialization script’s OnInitialized()
callback method ensures the proper initialization sequence. This code sample illustrates the Unity Ads initialization method to call:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Advertisements;
using UnityEngine.Events;
using UnityEngine.Purchasing;
using UnityEngine.UI;
public class AdsManager : MonoBehaviour
{
#if UNITY_IOS
private string gameId = "0000000"; // 在此处输入您的 iOS 游戏 ID
#elif UNITY_ANDROID
private string gameId = "9999999"; // 在此处输入您的 Android 游戏 ID
#else
private string gameId = "0123456"; // 防止 Editor 错误
#endif
public void Init()
{
Debug.Log("UnityAds.Init()");
if (!Advertisement.isSupported || Advertisement.isInitialized)
{
Debug.Log("Could not initialize ads");
return;
}
Debug.Log("Initializing Unity Ads with game ID: " + gameId);
Advertisement.Initialize(gameId, false);
}
public void ShowAdUnit()
{
Debug.Log("Unity Ads Log: Ad shown");
Advertisement.Show("testAdButton"); // 在此处输入广告的广告位 ID
}
public void ShowPromo()
{
Debug.Log("Unity Ads Log: Promo Shown");
Advertisement.Show("testPromoButton"); // 在此处输入推荐 (Promo) 的广告位 ID
}
}
注意:如果使用 Codeless IAP 进行 IAP 初始化,必须在代码的其他位置调用 Unity Ads 初始化方法。
导航至开发者控制面板 (Developer Dashboard) 的内购推荐 (IAP Promo) 部分可配置内购推荐 (IAP Promo) 优惠:
通过实现以下示例代码来调用内购推荐 (IAP Promo) 内容:
public void ShowPromo()
{
Advertisement.Show (placementID);
}
按 Editor 中的 Play 可检查__广告位__提出请求时是否显示测试广告。要查看真实的推荐创意资源,必须在生产模式下将游戏发布到设备。