Unity接入IAP内购(Android,IOS)最新流程,第一篇:内购接入

2024-06-04 6322阅读

从0开始接入Unity IAP

  • 欢迎进入Unity内购系列
    • 整体流程介绍
    • 第一篇(内购接入)
    • 接入环境
    • 一、创建空工程
    • 二、添加IAP插件
    • 三、写代码
    • 四、Google后台配置
    • 五、IOS后台配置
    • 六、打包测试
    • 七、Demo

      欢迎进入Unity内购系列

      你好! 这将是一个系列的文章

      第一篇 介绍客户端里支付的调起以及购买。

      第二篇 介绍后台对购买结果的验证以及发货(IOS)。

      第三篇 介绍后台对购买结果的验证以及发货(Android)。

      第四篇 介绍后台对内购退单问题的处理(IOS欺诈检测以及欺诈信息反馈)。

      整体流程介绍

      我们是用的Unity客户端+PHP后台。

      客户端内完成内购 -> 内购结果发送给PHP后台 -> PHP后台向IOS或Google后台请求验证订单真实性 -> 验证通过则进行发货 -> 正常情况到此就结束了

      非正常情况:如果玩家后期在IOS或Google申请退款,如果退款成功,则IOS或Google会向我们提供的接口发送通知,这时我们需要对退款订单进行处理

      第一篇(内购接入)

      本篇介绍unity里内购插件IAP的接入,这一篇只包含客户端内支付的调起以及购买。

      流程非常简单,不需要开启Unity Service等服务,也不需要Google后台服务公钥,只需5分钟即可完成接入,只需要按照我的流程,就一定能成功。

      接入环境

      本篇介绍unity里内购插件IAP的接入,这一篇只包含客户端内支付的调起以及购买。

      1. unity版本: 2021.3.21f1;其中JDK、NDK、SDK使用unity自带的。
      2. IAP版本: 4.10.0;

      一、创建空工程

      使用2021.3.21f1创建3D核心模板空工程

      二、添加IAP插件

      1、打开Package Manager,选择Unity Register,找到In App Purchasing,点击Install。

      Unity接入IAP内购(Android,IOS)最新流程,第一篇:内购接入 第1张

      2、IAP导入完成之后会有一个弹窗让我们Link Project,这里我们不用管,选Close就可以了。

      不要选Link Project,因为那些是给单机游戏用的,需要客户端内自己验证订单的情况下要选Link Project,然后还要填入Google的公钥以及其他设置。

      Unity接入IAP内购(Android,IOS)最新流程,第一篇:内购接入 第2张

      三、写代码

      1、创建UI,新建2个按钮,一个挂载脚本的空物体。

      2、新建脚本,代码如下,将脚本拖到空物体上。

      3、给按钮点击事件赋值。

      Unity接入IAP内购(Android,IOS)最新流程,第一篇:内购接入 第3张

      using System;
      using UnityEngine;
      using UnityEngine.Purchasing;
      using UnityEngine.Purchasing.Extension;
      using UnityEngine.UI;
      public class MyIAP : MonoBehaviour, IDetailedStoreListener
      {
          IStoreController m_StoreController; // The Unity Purchasing system.
          void Start()
          {
              InitializePurchasing();
          }
          void InitializePurchasing()
          {
              var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
              //Add products that will be purchasable and indicate its type.
              //初始化产品列表,这里要跟IOS和Google后台的产品列表一致
              builder.AddProduct("acepro_diamond1", ProductType.Consumable);
              builder.AddProduct("acepro_diamond2", ProductType.Consumable);
              builder.AddProduct("acepro_diamond3", ProductType.Consumable);
              builder.AddProduct("acepro_diamond4", ProductType.Consumable);
              builder.AddProduct("acepro_diamond5", ProductType.Consumable);
              builder.AddProduct("acepro_diamond6", ProductType.Consumable);
              UnityPurchasing.Initialize(this, builder);
          }
          //测试用的,正式代码可删除
          public void BuyDimaond1()
          {
              BuyProduct("acepro_diamond1");
          }
          //测试用的,正式代码可删除
          public void BuyDimaond2()
          {
              BuyProduct("acepro_diamond2");
          }
          //购买时调用的接口,外部只需调用这一个接口即可
          public void BuyProduct(string pruductid)
          {
              //开始购买
              m_StoreController.InitiatePurchase(m_StoreController.products.WithID(pruductid));
          }
          public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
          {
              //初始化成功
              Debug.Log("In-App Purchasing successfully initialized");
              m_StoreController = controller;
          }
          public void OnInitializeFailed(InitializationFailureReason error)
          {
              //初始化失败
              OnInitializeFailed(error, null);
          }
          public void OnInitializeFailed(InitializationFailureReason error, string message)
          {
              //初始化失败
              var errorMessage = $"Purchasing failed to initialize. Reason: {error}.";
              if (message != null)
              {
                  errorMessage += $" More details: {message}";
              }
              Debug.Log(errorMessage);
          }
          public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
          {
              //Retrieve the purchased product
              var product = args.purchasedProduct;
              //Add the purchased product to the players inventory
              //付款成功,通知服务器发货
              //此处需要自行添加逻辑,通知自己的服务器发货,我这边就省略了。
              /*
               ***
               ***
               ***
               */
              Debug.Log($"Purchase Complete - Product: {product.definition.id}");
              //We return Complete, informing IAP that the processing on our side is done and the transaction can be closed.
              return PurchaseProcessingResult.Complete;
          }
          public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason)
          {
              //付款失败
              Debug.Log($"Purchase failed - Product: '{product.definition.id}', PurchaseFailureReason: {failureReason}");
          }
          public void OnPurchaseFailed(Product product, PurchaseFailureDescription failureDescription)
          {
              //付款失败
              Debug.Log($"Purchase failed - Product: '{product.definition.id}'," +
                  $" Purchase failure reason: {failureDescription.reason}," +
                  $" Purchase failure details: {failureDescription.message}");
          }
      }
      

      四、Google后台配置

      Google后台配置。(暂时无图,等有图了再补上)

      只需要添加应用内商品,并激活即可,不需要其他设置。

      五、IOS后台配置

      IOS后台配置。(暂时无图,等有图了再补上)

      只需要添加应用内商品,并激活即可,不需要其他设置。

      六、打包测试

      Google测试前提条件:

      1、手机开启***,否则无法完成初始化而且无法调起内购。

      2、需要Google账号添加可用的银行卡。如果可以正常调起内购,并且显示了价格等信息,基本上是没有问题的,客户端内购买的流程就算结束了。

      打包设置里面需要注意的地方我已经用红框标记了

      1、版本号需要比自己google商店的最新版本一样或者比google版本高,如果比google版本低,会提示当前版本不支持google结算等提示,另外google后台的商品也需要设置为激活状态,否则也会出现当前版本不支持google结算等提示

      2、keystore换成自己的,而且要跟google上的一致。如果加入了Google Play 签名计划,那么也是无法完成内购的,需要提包到google测试轨道,如果没有加入Google Play 签名计划,可以本地打包直接测试。

      3、包名肯定是需要一致的。

      总的来说就是要和自己google上的应用,包名、签名、版本一致就可以了。

      Unity接入IAP内购(Android,IOS)最新流程,第一篇:内购接入 第4张

      Unity接入IAP内购(Android,IOS)最新流程,第一篇:内购接入 第5张

      Unity接入IAP内购(Android,IOS)最新流程,第一篇:内购接入 第6张

      七、Demo

      其中的代码可直接使用,APK可直接运行,第一个商品是有效的,第二个商品是无效的。

      Unity接入IAP内购(Android,IOS)最新流程,第一篇:内购接入 第7张

      Unity接入IAP内购(Android,IOS)最新流程,第一篇:内购接入 第8张

      Demo地址如下:

      Unity IAP完整Demo,内含可运行APK


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]