文章目录

  • 前言
  • 一、苹果内购是什么?
  • 二、Unity接入内购
    • 1.开启内购
    • 2.使用内购
  • 总结

前言

Unity接入苹果内购前,需要提前配置好产品的内购ID以及拥有苹果账号,关于这个提前准备各位需要自行百度解决(笔者是运维那边配置好了内购ID直接发ID给我使用即可)


一、苹果内购是什么?

大多数游戏在苹果商城下载的游戏,付费时不可避免的都要通过苹果的内购来进行付款(切支付的除外),虽然不可避免的都要接受苹果的抽成,但总得来说,还是相对方便的。那么以下是在Unity中加入内购的方法。

二、Unity接入内购

1.开启内购

1、通过Window->General->Services,打开Unity服务面板。
2、选择In-App Purchasing。
3、如果没有工程ID需要创建,选择是否应用针对13岁以下的儿童。创建了可跳过这步。
4、将Off改成On,即内购开启完成。

图解如下:





2.使用内购

使用内购的方法主要有两种,一种是通过Unity安装好的UnityIAP来创建内购按钮,并且给按钮配置好相应的内购ID,即可使用.第二种是自己写个内购ID管理,然后通过按钮调用点击方法来验证返回ID并给予奖励.(笔者使用的是第二种方法,第一种方法太过繁琐麻烦就没使用和研究了.)
直接创建IAPManager脚本,完整代码如下:

using UnityEngine;
using UnityEngine.Purchasing;
using System;
using System.Collections;
using System.Collections.Generic;[Serializable]
public class Products  //产品类
{public string id;  //产品内购IDpublic int productType; //产品类型
}public class IAPManager : MonoBehaviour, IStoreListener
{public static IAPManager instance;  //单例public List<Products> products = new List<Products>();//所有产品列表,公有为了方便直接输入public string publicKey;//游戏的公共密钥,在苹果ITC后台创建APP的时候有个ConfigurationBuilder builder;private IStoreController m_Controller;private IAppleExtensions m_AppleExtensions;private static bool isInited = false;private bool isInitFailed = false;public GameObject wait;//购买产品等待回应时显示的旋转动画,因为要跨场景所以使用的预制体GameObject waitPanel;//实例化预制体后的对象public void Awake(){if (instance != null){Destroy(gameObject);return;}instance = this;DontDestroyOnLoad(this);if (!isInited)InitPurchase();}//初始化内购void InitPurchase(){Debug.Log("初始化");var module = StandardPurchasingModule.Instance();builder = ConfigurationBuilder.Instance(module);for (int i = 0; i < products.Count; i++){builder.AddProduct(products[i].id,(ProductType)products[i].productType);}UnityPurchasing.Initialize(this, builder);}/// <summary>/// 初始化成功/// </summary>/// <param name="controller">Controller.</param>/// <param name="extensions">Extensions.</param>public void OnInitialized(IStoreController controller, IExtensionProvider extensions){Debug.Log("初始化成功");m_Controller = controller;m_AppleExtensions = extensions.GetExtension<IAppleExtensions>();m_AppleExtensions.RegisterPurchaseDeferredListener(OnDeferred);isInited = true;}/// <summary>/// iOS ⽹网络延迟错误/// </summary>/// <param name="item">Item.</param>private void OnDeferred(Product item){Debug.Log("⽹网络连接不不稳");}/// <summary>/// 初始化失败/// </summary>/// <param name="error">Error.</param>public void OnInitializeFailed(InitializationFailureReason error){isInitFailed = true;Debug.Log("初始化失败");Debug.Log("IAPInitializeFailed!!!" + "Reason:" + error);}/// <summary>/// 恢复购买/// </summary>public void RestorePurchases(){if (Application.platform == RuntimePlatform.IPhonePlayer ||Application.platform == RuntimePlatform.OSXPlayer){if (!isInited){//loading.SetActive(false);InitPurchase();}StartCoroutine("InitAndRestore");}}IEnumerator InitAndRestore(){if (isInitFailed || !isInited){//初始化失败StopCoroutine("InitAndRestore");}yield return new WaitUntil(() =>{return m_Controller != null && m_AppleExtensions != null;});m_AppleExtensions.RestoreTransactions((result) =>{// The first phase of restoration. If no more responses are received on ProcessPurchase then// no purchases are available to be restored.Debug.Log("RestorePurchases continuing: " + result + ". If no further messages, no purchases available to restore.");if (result){//产品已经restore,不不过官⽅方的解释是恢复过程成功了了,并不不代表所购买的物品都恢复了了}else{// 恢复失败}StopCoroutine("InitAndRestore");});}/// <summary>/// 按钮点击  也可以重写为传入产品ID  此处是序列号,按钮调用的时间为这个,参数为产品内购ID/// </summary>/// <param name="index">Index.</param>public void OnPurchaseClicked(int index){if (Application.platform == RuntimePlatform.IPhonePlayer ||Application.platform == RuntimePlatform.OSXPlayer ||Application.platform == RuntimePlatform.OSXEditor){waitPanel = Instantiate(wait, transform);waitPanel.transform.SetParent(GameObject.Find("Canvas").transform, false);if (!isInited)InitPurchase();StartCoroutine("InitAndPurchase", index);}}IEnumerator InitAndPurchase(int index){if (isInitFailed || !isInited){//初始化失败StopCoroutine("InitAndPurchase");}yield return new WaitUntil(() =>{return m_Controller != null && m_AppleExtensions != null;});m_Controller.InitiatePurchase(products[index].id);StopCoroutine("InitAndPurchase");}/// <summary>/// 购买成功回调/// </summary>/// <returns>The purchase.</returns>/// <param name="e">E.</param>public PurchaseProcessingResultProcessPurchase(PurchaseEventArgs e){Debug.Log("购买成功回调");if (e.purchasedProduct.definition.id == products[0].id)  //产品ID验证要发放什么奖励{//此处可以对订单进行验证,因为我们项目吧验证放到服务器了,所以我们可以把购买成功后的凭证发给服务器去验证//这个购买验证码特别特别长,验证分为沙盒验证和真实验证 就不赘述了//处理}else if (e.purchasedProduct.definition.id == products[1].id){}else if (e.purchasedProduct.definition.id == products[2].id){}else if (e.purchasedProduct.definition.id == products[3].id){}else if (e.purchasedProduct.definition.id == products[4].id){}else if (e.purchasedProduct.definition.id == products[5].id){}else if (e.purchasedProduct.definition.id == products[6].id){}else if (e.purchasedProduct.definition.id == products[7].id){}else if (e.purchasedProduct.definition.id == products[8].id){}else if (e.purchasedProduct.definition.id == products[9].id){}else if (e.purchasedProduct.definition.id == products[10].id){}else if (e.purchasedProduct.definition.id == products[11].id){}else if (e.purchasedProduct.definition.id == products[12].id){}if (waitPanel)Destroy(waitPanel);return PurchaseProcessingResult.Complete;}public void OnPurchaseFailed(Product i, PurchaseFailureReason p){//购买失败的逻辑if (waitPanel)Destroy(waitPanel);//Debug.Log("购买失败的逻辑");}
}

注释已经解释清楚,代码参考链接为:
Unity接入苹果内购(IAP)

Tips:如果你后面更新了IAP的版本,并且出现错误的话,可以删除原来的Assets下的Purchasing文件夹。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了如何在Unity中接入苹果内购。希望本篇文章对大家有所帮助,欢迎大家下方评论。

Unity接入苹果内购相关推荐

  1. Unity接入苹果内购(IAP)

    Unity接入苹果内购(IAP) 前言 苹果支付流程 配置App 配置商品 协议.税务和银行业务 沙盒测试账号 Unity(IAP) 测试 前言 第一次发帖,有点激动嘿嘿!话不多说直接奔主题,项目中需 ...

  2. 真正手把手教你用unity接入苹果内购(IAP)

    原帖:真正手把手教你用unity接入苹果内购(IAP) http://www.manew.com/thread-100403-1-1.html (出处: -[游戏蛮牛]-ar增强现实,虚拟现实,uni ...

  3. Unity接入iOS内购

    1.内购种类 consumable:可消费的,如游戏中的金币,用完还可以再购买. non-consumable:不可销毁的,一次购买,永久生效.比如去广告,解锁游戏关卡,这种商品只能购买一次. sub ...

  4. Unity接入三星内购

    文章目录 前言 一.SDK下载 二.接入步骤 1.导入SDK 2.请求商业卖家状态 3.注册应用程序 4.添加应用内商品 5.添加测试用户 总结 前言 因公司需要,接入三星内购,Unity是支持三星商 ...

  5. Unity接入GooglePlay内购V4(源生Android方式)

    Unity接GooglePlay In-App Billing坑还是蛮多的,各种坑. 接的方式目前来看有三种: 采用Unity IAP插件,开启Unity的IAP Service 采用Android源 ...

  6. Unity接入OneStore内购

    前言 OneStore是韩国第一大android应用市场,访问官网可能需要你科学上网才能正常访问. [中文]OneStore开发工具 [中文]在Unity中使用ONE store In-App支付 国 ...

  7. java(jfinal) 接入ios苹果内购(连续包月订阅),服务端将二次验证。

    大致流程: 1.ios端进行支付,然后收到苹果的一串数据(也叫收据),然后ios端将其转码为BASE64编码的字符串. 2.ios端请求服务端接口,将数据传给服务端,服务端拿到数据后,通过一系列处理后 ...

  8. 苹果内购和 Apple Pay

    作者:CC老师_MissCC 链接:http://www.jianshu.com/p/e3bc47e81785 來源:简书 苹果内购 1.什么是内购? 如果你购买的商品,是在本app中使用和消耗的,就 ...

  9. iOS:苹果内购实践

    iOS 苹果的内购 一.介绍 苹果规定,凡是虚拟的物品(例如:QQ音乐的乐币)进行交易时,都必须走苹果的内购通道,苹果要收取大约30%的抽成,所以不允许接入第三方的支付方式(微信.支付宝等),当然开发 ...

最新文章

  1. 搭建Harbor企业级docker仓库
  2. Java设计模式(十八):享元设计模式
  3. python django开发工具_利用pyCharm编辑器创建Django项目开发环境-python开发工具第一篇...
  4. 蓝桥杯题目 计算后续日期
  5. 数据中心监控软件 - ManageEngine OpManager
  6. 2021年起,WPS Office纳入全国计算机等级考试二级考试软件
  7. linux mentohust dhcp,Ubuntu下Mentohust的配置
  8. 2018最新第三方支付牌照公司名单「完整」
  9. 【lzy学习笔记-dive into deep learning】数学预备 2.1-2.4
  10. 如何把一台电脑变成服务器
  11. 局域网win7计算机如何互访,局域网Win7与WinXP电脑不能互访怎么办?
  12. css实现人走路效果,纯css实现机器人走路动画
  13. 做一个前端网页送给女朋友~轮播图+纪念日
  14. 亚马逊开店如何优化店铺?
  15. 使用jquery.fly插件实现添加购物车抛物动画
  16. matlab 拐点 c语言,如何使用Matlab找到含噪数据序列的拐点?
  17. Redhat linux 安装 gcc编译器,Gcc源码包,rpm包安装方法!
  18. 修改tp-wr841n-v8的flash
  19. 【买卖股票的最佳时机】
  20. host文件的详解与修改方式

热门文章

  1. 一看就懂的驱动程序介绍与安装教程
  2. 推荐一个程序员业余写的小说
  3. mysql语句 execute、executeQuery和executeUpdate之间的区别
  4. mysql executequery返回值_使用executequery数据库
  5. 在计算机技术中采用二进制代码只有什么,在计算机技术中采用二进制.doc
  6. JavaScript技术
  7. 【幻化万千戏红尘】qianfengDay29-Json解析、Gson解析、FASTJSON解析基础学习:
  8. cgroup隔离的知识点
  9. centos7升级gcc版本,无需手动下载源码编译
  10. 编写程序接收用户输入分数信息,如果分数在0—100之间,输出成绩。如果成绩不在该范围内,抛出异常信息,提示分数必须在0—100之间。