Version: 2018.2
内购推荐 (IAP Promo)
内购推荐 (IAP Promo) 广告位

内购推荐 (IAP Promo) 集成

概述

重要注意事项:游戏必须在初始化 Unity Ads 之前先初始化 Unity IAP 才能正常使用内购推荐 (IAP Promo)。

本集成指南涵盖四个主要步骤:

在 Unity Editor 中准备项目

设置 Unity 服务

要使用内购推荐 (IAP Promo),您需要:

1.配置项目以使用 Unity 服务。 2.在项目中启用 Unity IAP SDK (1.2+) 和 Unity Ads SDK (2.3+)。

设置 Unity IAP

IAP Promo requires a supported version of the Unity IAP SDK (1.17+). To acquire the latest IAP SDK, either enable In-App Purchasing in the Services window (Window > Services), or import it from the Asset store. If you’re enabling it from the Services window, be sure to Import the Asset package when prompted.

在 Editor 的 Services 窗口中启用 Unity IAP
在 Editor 的 Services 窗口中启用 Unity IAP

请参阅有关设置 IAP 的文档以了解其他信息。

设置 Unity Ads

内购推荐 (IAP Promo) 需要受支持的 Unity Ads SDK 版本。Unity 建议从 Asset Store 导入最新的 Unity Ads SDK (3.0+) 以获得此 SDK。

请参阅设置 Unity Ads 以了解其他信息。

实现

在设置所需服务后,即可在游戏中实现它们。

实现 IAP

初始化有两个选项:无码或脚本。

使用 Codeless IAP

Codeless IAP 能为您处理初始化。如果使用 Codeless IAP 初始化,必须在代码的其他位置调用 Unity Ads 初始化方法。

要使用 Codeless IAP,请填充__商品目录__ (Product Catalog),然后创建 IAP 监听器 (IAP Listener) 来获取该目录:

  1. In the Editor, select Window > UnityIAP > IAP Catalog to open the IAP Catalog window. This window lists all of your previously configured Products. You must have at least one Product configured in your Product Catalog. For a complete walkthrough on setting up Products, see Codeless IAP.

  2. In the IAP Catalog window, select App Store Export > Cloud JSON to export a local copy of the Product Catalog.
    Exporting an IAP Product Catalog to JSON

  3. 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.

使用脚本

如果不使用 Codeless IAP,必须通过脚本手动初始化 Unity IAP。请参阅以下代码示例:

using UnityEngine;
using UnityEngine.Purchasing;

public class IAPManager : MonoBehaviour, IStoreListener {
  private IStoreController controller;
  
  //The following products must be added to the Product Catalog in the Editor:
  private const string coins100 = "100.gold.coins";
  private const string coins500 = "500.gold.coins";

  public int coin_count = 0;

  void Awake () { 
    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) { 
    this.controller = controller; Debug.Log ("Initialization Successful"); 
  }
  
  public void OnInitializeFailed(InitializationFailureReason error) { 
    Debug.Log ("UnityIAP.OnInitializeFailed (" + error + ")")
  }
  
  public void OnPurchaseFailed (Product item, PurchaseFailureReason reason) { 
    Debug.Log("UnityIAP.OnPurchaseFailed (" + item + ", " + reason + ")"); 
  }

  public PurchaseProcessingResult ProcessPurchase (PurchaseEventArgs e) {
    string purchasedItem = e.purchasedProduct.definition.id;
    
    switch (purchasedItem) { 
      case coins100: Debug.Log ("IAPLog: Congratualtions you are richer!"); 
      coin_count += 100; 
      Debug.Log ("IAPLog: Coin count: " + coin_count); 
      break; 
      
      case coins500: Debug.Log ("IAPLog: Congratualtions you are richer!"); 
      coin_count += 500; 
      Debug.Log ("IAPLog: Coin count: " + coin_count);
      break;
    }
    return PurchaseProcessingResult.Complete;
  }

  public void Buy(string productId) { 
    Debug.Log ("UnityIAP.BuyClicked (" + productId + ")");
    controller.InitiatePurchase (productId);
  }
}

实现 Unity Ads

无论使用的是 Codeless IAP 还是手动 IAP 初始化方法,都必须初始化 Unity Ads。以下代码示例显示了要调用的初始化方法:

using UnityEngine;
using UnityEngine.Monetization;

public class AdManager : MonoBehaviour {

  public bool testMode = true;
  private const string adPlacement = "video";
  private const string promoPlacement = "promo";

  #if UNITY_IOS
    private string gameId = "0000000"; // Your iOS game ID here
  #elif UNITY_ANDROID
    private string gameId = "9999999"; // Your Android game ID here
  #else
    private string gameId = "0123456"; // Prevents Editor Errors
  #endif

  private void Awake () {
    if (Monetization.isSupported && !Monetization.isInitialized) {
      Monetization.Initialize (gameId, testMode); 
    }
  }

  public void ShowVideoAd () { 
    ShowAdPlacementContent ad = Monetization.GetPlacementContent (adPlacement) as ShowAdPlacementContent; ad.Show (); 
  }

  public void ShowPromo () { 
    PromoAdPlacementContent promo = Monetization.GetPlacementContent (promoPlacement) as PromoAdPlacementContent; promo.Show (); 
  }
}

在开发者控制面板 (Developer Dashboard) 中配置推荐 (Promotions)

导航至 Operate 控制面板的 Monetization 部分可配置内购推荐 (IAP Promo) 优惠:

  • 使用广告位可控制__推荐 (Promotions)__ 在游戏中的显示时机和方式。
  • 使用商品界面可导入__商品目录__并管理每个商品的创意资源。
  • 定义推荐 (Promotions) 的参数,例如运行时间、包含的__广告位__和__商品__以及目标用户。

测试集成结果

通过实现以下示例代码来调用内购推荐 (IAP Promo) 内容:

public void ShowPromo()
{
    Advertisement.Show (placementID);
}

按 Editor 中的 Play 可检查__广告位__提出请求时是否显示测试广告。要查看真实的推荐广告素材资源,必须在生产模式下将游戏发布到设备。




内购推荐 (IAP Promo)
内购推荐 (IAP Promo) 广告位