UDN
Search public documentation:

MicroTransactionsCH
English Translation
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 主页 > 平台接口架构 >微交易系统

微交易系统


概述


微交易(Micro-transactions )系统允许直接从游戏中购买道具(奖励内容、额外的等级等),也就是使用iOS上的in-app purchasing(在应用程序中购买)功能。

注意: 微交易功能目前仅限于在iOS平台上运行的游戏。

MicroTransactionBase


MicroTransactionBase 类是个基类,包含了执行微交易的功能。该类继承于 PlatformInterfaceBase ,并使用了那个类中包含的代理系统。每个平台(PC、iOS等)有它自己的继承于 CloudStorageBase 的子类,这些子类提供了针对那个特定平台的实现。

属性

  • AvailableProducts - 存放了可供购买的产品列表,当 MTD_PurchaseQueryComplete 调用返回完成后由 QueryForAvailablePurchases() 函数填充该列表。
  • LastError - 如果在购买过程中发生了错误,该项存放了最近一次错误的描述( string )。
  • LastErrorSolution - 如果在购买过程中发生了任何错误,该项存放了任何可能的解决方案的描述( string )。

函数

  • Init - 当初始化微交易系统时引擎调用的事件。
  • QueryForAvailablePurchases - 查询系统获得可供购买的产品,并返回是否成功发起了查询动作。
  • IsAllowedToMakePurchase - 返回是否允许用户进行购买。
  • BeginPurchase [Index] - 启动从 AvailableProducts 列表中购买产品的过程,并返回购买动作是否成功。
    • Index - Int 指出了到要购买的产品的 AvailableProducts 数组中的索引。

Delegates(代理)

EMicroTransactionDelegate 枚举值定义了可以接受函数调用返回的代理类型的ID。通过使用 平台接口代理系统来为其中任何一种类型分配代理。

  • MTD_PurchaseQueryComplete - 当通过 QueryForAvailablePurchases() 完成查找可购买产品时执行分配给这个ID的代理。
    • bSuccessful - TRUE。
    • Data - 不包含数据。
  • MTD_PurchaseComplete - 当完成一次购买产品尝试时执行分配给这个ID的代理。
    • bSuccessful - TRUE。
    • Data - IntValue 将包含 EMicroTransactionResult 中的其中一个枚举值, StringValue 具有使用 BeginPurchase 函数购买的产品的 PurchaseInfo 中的 Identifier(标识符) 。如果返回 MTR_Failed ,那么将会使用最近的本地化的可能的解决方案填充 LastErrorLastErrorSolution

产品


每个可购买的产品以 PurchaseInfo 的形式存储在 AvailableProducts 数组中。这个结构体包含了关于需要显示给用户的必要产品信息,并允许购买该产品。

  • Identifier - 一个 string(字符串) ,代表产品的唯一标识符。
  • DisplayName - 一个 string(字符串) ,存放了向用户显示的产品名称。
  • DisplayDescription - 一个 string(字符串) ,存放了向用户显示的产品描述。
  • DisplayPrice - 一个 string(字符串) ,存放了向用户显示的产品价格。

实现细节


针对虚幻引擎3 iOS游戏设置及使用In-App购买的一般流程如下所示:

  1. 确保在iOS Provisioning Portal中设置您的游戏使用微交易系统,并设置通过iTunes Connect应用程序可以购买的您的游戏中的产品。要想获得更多信息,请参照Apple开发者网站
  2. 根据您放置微交易系统功能的位置的不同,通常可以在 PostBeginPlay() 或其他初始化函数中通过调用 PlatformInterfaceBase 类的静态函数 GetMicroTransactionInterface() 来获得到 MicroTransactionBase= 对象的引用,并设置产品查询和购买调用返回的代理。
       var MicroTransactionBase MicroTrans;
    
       ...
    
       MicroTrans = class'PlatformInterfaceBase'.static.GetMicroTransactionInterface();
       MicroTrans.AddDelegate(MTD_PurchaseQueryComplete, OnProductQueryComplete);
       MicroTrans.AddDelegate(MTD_PurchaseComplete, OnProductPurchaseComplete);
       
    OnProductQueryCompleteOnProductPurchaseComplete 只是示例。这些可以是任何和 PlatformInterfaceDelegate 代理的签名相匹配的函数的名称。
       delegate PlatformInterfaceDelegate(const out PlatformInterfaceDelegateResult Result);
       
  3. 要想获得游戏中可购买的产品的列表,可以在 MicroTransactionBase 对象上调用 QueryForAvailablePurchases() 函数,并等待 MTD_PurchaseQueryComplete 函数返回,此时您可以处理 AvailableProducts(可购买的产品) 列表来将它们以您期望的方式显示给用户(一般是显示在某种菜单中)。
       MicroTrans.QueryForAvailablePurchases();
       
  4. 一旦获得了产品列表,可以通过在 MicroTransactionBase 对象上调用 BeginPurchase() 来购买产品,并且向该函数传入要购买的产品的索引。这一般是当用户按下菜单中的一个按钮时所产生的结果。
       MicroTrans.BeginPurchase(0);
       
    这将会尝试购买 AvailableProducts 中的第一个产品(索引为0)。

基本的实现可以在 UDKBase\Classes 目录的 CloudMenuMicroTransaction.uc 脚本中找到。