开发者控制台

适用于Unity的IAP v2.0插件

适用于Unity的IAP v2.0插件

本文档提供示例代码,展示如何使用适用于应用内购买 (IAP) v2.0 SDK的Unity插件。

您可以在这里下载Unity插件:

已根据Apache许可证2.0版(“许可证”)获得许可。您必须遵守许可证要求,否则不得使用此文件。许可证的副本位于https://aws.amazon.com/apache-2-0/或本文件附带的“许可证”文件中。本文件按“原样”分发,不附带任何明示或暗示的担保或条件。请查看许可证,了解约束许可证项下权限和限制的具体措辞。

方法和事件

您可以发起方法调用并侦听事件。方法调用发起请求,其中一些请求会返回响应。事件是系统生成的异步消息,这些消息是响应方法调用而发送的,目的是将请求的数据返回给您。

NotifyFulfillment外,所有方法调用都会向系统请求数据。当您发起数据请求时,系统会立即返回一个包含requestId字符串的对象,该字符串是唯一的请求标识字符串。请求的数据通过事件异步返回。NotifyFulfillment方法调用不会返回响应,因为其目的是告知亚马逊,您的应用已将购买的商品交付给用户。

要获取事件中包含的数据,必须定义处理程序函数并将其绑定到特定类型事件的事件侦听器。可在您的事件处理程序中访问返回的数据,其中包括与请求方法调用中返回的requestId相匹配的唯一requestId。如有必要,您可以使用requestId将特定请求与特定响应进行匹配。

在Unity中发起方法调用

要发起方法调用,必须执行以下一般步骤:

  1. 构造用于与插件交互的对象。
  2. 如果需要,构造用于将输入传递至操作的对象。
  3. 对于异步操作,定义在响应准备就绪时调用的回调函数。
  4. 调用操作,将任何必需的输入和/或回调函数作为参数传入。

GetUserData

GetUserData发起请求,要求检索当前登录用户的用户ID和市场。

using com.amazon.device.iap.cpt;

// 获取用于与插件交互的对象
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// 在没有输入的情况下调用同步操作
RequestOutput response = iapService.GetUserData();

//返回值
string requestIdString = response.RequestId;

Purchase

Purchase发起产品的购买流程。

using com.amazon.device.iap.cpt;

// 获取用于与插件交互的对象
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// 构造作为输入传递至操作的对象
SkuInput request = new SkuInput();

// 设置输入值
request.Sku = "sku";

// 在有输入对象的情况下调用同步操作
RequestOutput response = iapService.Purchase(request);

//返回值
string requestIdString = response.RequestId;

GetProductData

GetProductData发起请求,要求检索最多100个SKU的商品数据。

using com.amazon.device.iap.cpt;

// 获取用于与插件交互的对象
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// 构造作为输入传递至操作的对象
SkusInput request = new SkusInput();

// 创建SKU字符串列表
List<string> list = new List<string>();
list.Add("sku1");
list.Add("sku2");
list.Add("sku3");

// 设置输入值
request.Skus = list;

// 在有输入对象的情况下调用同步操作
RequestOutput response = iapService.GetProductData(request);

//返回值
string requestIdString = response.RequestId;

GetPurchaseUpdates

GetPurchaseUpdates发起请求,要求检索客户已购买和/或取消的商品的更新信息。

using com.amazon.device.iap.cpt;

// 获取用于与插件交互的对象
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// 构造作为输入传递至操作的对象
ResetInput request = new ResetInput();

// 设置输入值
request.Reset = true;

// 在有输入对象的情况下调用同步操作
RequestOutput response = iapService.GetPurchaseUpdates(request);

//返回值
string requestIdString = response.RequestId;

NotifyFulfillment

NotifyFulfillment向亚马逊通知关于购买履行的情况。

using com.amazon.device.iap.cpt;

// 获取用于与插件交互的对象
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// 构造作为输入传递至操作的对象
NotifyFulfillmentInput request = new NotifyFulfillmentInput();

// 设置输入值
request.ReceiptId = "receiptID";
request.FulfillmentResult = "FULFILLED";

// 在有输入对象的情况下调用同步操作
RequestOutput response = iapService.NotifyFulfillment(request);

在Unity中处理事件

要处理事件,必须执行以下一般步骤:

  1. 构造用于与插件交互的对象。
  2. 定义事件处理程序。
  3. 使用事件侦听器注册您的事件处理程序。

GetUserDataResponse

GetUserDataResponse返回来自GetUserData调用的响应。

using com.amazon.device.iap.cpt;

// 获取用于与插件交互的对象
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// 定义事件处理程序
private void EventHandler(GetUserDataResponse args)
{
    string requestId = args.RequestId;
    string userId = args.AmazonUserData.UserId;
    string marketplace = args.AmazonUserData.Marketplace;
    string status = args.Status;
}

// 注册事件处理程序
iapService.AddGetUserDataResponseListener(EventHandler);

PurchaseResponse

PurchaseResponse返回来自Purchase调用的响应。

using com.amazon.device.iap.cpt;

// 获取用于与插件交互的对象
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// 定义事件处理程序
private void EventHandler(PurchaseResponse args)
{
    string requestId = args.RequestId;
    string userId = args.AmazonUserData.UserId;
    string marketplace = args.AmazonUserData.Marketplace;
    string receiptId = args.PurchaseReceipt.ReceiptId;
    long cancelDate = args.PurchaseReceipt.CancelDate;
    long purchaseDate = args.PurchaseReceipt.PurchaseDate;
    string sku = args.PurchaseReceipt.Sku;
    string productType = args.PurchaseReceipt.ProductType;
    string status = args.Status;
}

// 注册事件处理程序
iapService.AddPurchaseResponseListener(EventHandler);

GetProductDataResponse

GetProductDataResponse返回来自GetProductData调用的响应。

using com.amazon.device.iap.cpt;

// 获取用于与插件交互的对象
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// 定义事件处理程序
private void EventHandler(GetProductDataResponse args)
{
    string requestId = args.RequestId;
    Dictionary<string, ProductData> productDataMap = args.ProductDataMap;
    List<string> unavailableSkus = args.UnavailableSkus;
    string status = args.Status;

    // 对于productDataMap中的每件商品,您可以获得给定SKU的以下值
    //(将“sku”替换为实际的SKU)
    string sku = productDataMap["sku"].Sku;
    string productType = productDataMap["sku"].ProductType;
    string price = productDataMap["sku"].Price;
    string title = productDataMap["sku"].Title;
    string description = productDataMap["sku"].Description;
    string smallIconUrl = productDataMap["sku"].SmallIconUrl;
}

// 注册事件处理程序
iapService.AddGetProductDataResponseListener(EventHandler);

GetPurchaseUpdatesResponse

GetPurchaseUpdatesResponse返回来自GetProductData调用的响应。

using com.amazon.device.iap.cpt;

// 获取用于与插件交互的对象
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// 定义事件处理程序
private void EventHandler(GetPurchaseUpdatesResponse args)
{
    string requestId = args.RequestId;
    string userId = args.AmazonUserData.UserId;
    string marketplace = args.AmazonUserData.Marketplace;
    List<PurchaseReceipt> receipts = args.PurchaseReceipts;
    string status = args.Status;
    boolean hasMore = args.HasMore;

    // 对于每个购买收据您可以获得以下值
    string receiptId = receipts[0].ReceiptId;
    long cancelDate = receipts[0].CancelDate;
    long purchaseDate = receipts[0].PurchaseDate;
    string sku = receipts[0].Sku;
    string productType = receipts[0].ProductType;
}

// 注册事件处理程序
iapService.AddGetPurchaseUpdatesResponseListener(EventHandler);

示例

为Puchaser类创建一个文件。添加以下代码:

    using System;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    using com.amazon.device.iap.cpt;

    	public class Purchaser : MonoBehaviour, IStoreListener
    	{
    		// 获取用于与插件交互的对象,该对象为IAP服务对象
               IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;
          }

添加一个方法来处理来自purchase函数的响应:

    // 定义事件处理程序
    private void EventHandler(GetPurchaseUpdatesResponse args)
    {
        string requestId = args.RequestId;
        string userId = args.AmazonUserData.UserId;
        string marketplace = args.AmazonUserData.Marketplace;
        List<PurchaseReceipt> receipts = args.PurchaseReceipts;
        string status = args.Status;
        boolean hasMore = args.HasMore;

        // 对于每个购买收据您可以获得以下值
        string receiptId = receipts[0].ReceiptId;
        long cancelDate = receipts[0].CancelDate;
        long purchaseDate = receipts[0].PurchaseDate;
        string sku = receipts[0].Sku;
        string productType = receipts[0].ProductType;
    }

    // 注册事件处理程序
    iapService.AddGetPurchaseUpdatesResponseListener(EventHandler);

现在我们已经准备好进行一些购买。将以下代码粘贴到实际用于购买先前定义的SKU“100_gold_stars”的任何函数中。

    // 构造作为输入传递至操作的对象
    SkuInput request = new SkuInput();

    // 设置输入值
    request.Sku = "100_gold_stars";

    // 在有输入对象的情况下调用同步操作
    RequestOutput response = iapService.Purchase(request);

    //返回值
    string requestIdString = response.RequestId;

当游戏收到来自purchase函数的响应时,方法EventHandler()将运行。


Last updated: 2022年1月15日