1.内购种类

  • consumable:可消费的,如游戏中的金币,用完还可以再购买。
  • non-consumable:不可销毁的,一次购买,永久生效。比如去广告,解锁游戏关卡,这种商品只能购买一次。
  • subscription:订阅的,这种一般用于新闻、杂志、或者app里面的月卡。可以按月或者按年收费。

对于subsription类型,其又分成3种:

  • non-renewing 到期后无需续订
  • auto-renewing 到期后自动续订,直到用户取消订阅
  • free-subscription 免费订阅

对于non-consumableauto-renewing类型,app内需要提供恢复购买功能(需要显著的按钮,否则无法过审),这样用户在切换或者添加设备的时候可以继续使用购买的商品。

2.商品

用户购买的商品分为两种类型:

  • built-in 内置商品,商品已经存在于应用内,购买后方可使用,比如游戏关卡等。
  • server-based 需要下载的商品,比如额外的资源包等。

server-based商品又分为两种:

  • self-hosted 开发者自己建立服务器存储商品资源。
  • App Store hosted 利用苹果app store存储商品资源。

3.流程


上图为官方支付流程
实际使用中,有些步骤不用特别拘泥,比如4和5是根据Apple Store返回的商品数据来展示在app上。实际一般游戏app内有商品相关的配置信息,界面的展示也一般是根据配置信息来设置的。

4.接入

确定证书中添加了IAP支付功能
确定app的bundle id和后台配置的一致

Unity官方文档:UnityIAP

4.1 IAP包安装

建议使用Unity自带的IAP来集成.
Window–>Package Manager打开包管理界面,搜索In App Purchasing,并安装

这样在unity中就可以打开IAP相关配置:
Window–>Unity IAP–>IAP Catalog

用户可以在这里配置内购相关信息。不过笔者不建议这里配置。

4.2

创建类IAPMgr:IStoreListener

  • 初始化
    public void Init(){var module = StandardPurchasingModule.Instance();ConfigurationBuilder builder = ConfigurationBuilder.Instance(module);builder.AddProduct("商品id1", ProductType.Consumable);builder.AddProduct("商品id2", ProductType.Consumable);        UnityPurchasing.Initialize(this, builder);}

商品描述信息通过apple后台配置。
商品id建议通过server透传给app,这样在调整商品id后可以避免重新出包。

  • 内置回调
    public void OnInitialized(IStoreController controller, IExtensionProvider extensions){Debug.Log("IAP initialize success");this.controller = controller;this.appleExtensions = extensions.GetExtension<IAppleExtensions>();this.googlePlayStoreExtensions = extensions.GetExtension<IGooglePlayStoreExtensions>();}public void OnInitializeFailed(InitializationFailureReason error){Debug.LogError("OnInitializeFailed, reason:" + error.ToString());}public void OnPurchaseFailed(Product i, PurchaseFailureReason p){Debug.LogError("OnPurchaseFailed,reason:" + p.ToString());if (this.onPurchaseFailed != null){this.onPurchaseFailed();this.onPurchaseFailed = null;}}public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e){Debug.LogError("purchase finished, apple return receipt:" + e.purchasedProduct.receipt);if (this.onPurchaseSuccess != null){this.onPurchaseSuccess(e.purchasedProduct.receipt);this.onPurchaseSuccess = null;}return PurchaseProcessingResult.Complete;}
  • 发起购买
    private Action onPurchaseFailed;private Action<string> onPurchaseSuccess;public void PurchaseProduct(string productId, Action onFailed, Action<string> onSuccess){this.onPurchaseFailed = onFailed;this.onPurchaseSuccess = onSuccess;if (controller != null){var product = controller.products.WithID(productId);if (product != null && product.availableToPurchase){controller.InitiatePurchase(productId);}else{Debug.LogError("no product with productId:" + productId);if (this.onPurchaseFailed != null){this.onPurchaseFailed();}}}else{Debug.LogError("controller is null,can not do purchase");if (this.onPurchaseFailed != null){this.onPurchaseFailed();}}}
  • 掉单处理
    会存在iOS那边支付成功,返回receipt后,app这边往server验证的时候因为网络等各种原因失败,因此需要处理掉单。
    笔者这边是在apple那边返回成功后,往未处理的订单列表中写入相关信息。等收到server发货通知后再删除对应订单信息。
    在app运行的合适时机(比如第一次进入主界面)向server请求,完成补单。

5.测试

测试使用沙盒环境即可(需要使用非越狱手机),沙盒环境测试的包只能是adhoc或者develop签名的。需要注意服务端沙盒环境对receipt的验证网址和正式环境是不一样的,这个需要服务端查验相关文档。

测试流程:

  • 先登出设备的app store账号
  • 进入app点击付费,拉出要求你登录账号进行购买的界面
  • 登入沙盒账号,完成购买

补充:上述测试流程已过时,较新版本的ios系统,在 设置-->iTunes Store与App Store-->沙盒账户中可以配置沙盒帐号,配置好后,测试时会自动使用该沙盒账户。

需要注意的是在进行支付相关后台设置的时候会有个基准货币的概念,支付时会根据汇率,转换为你当地货币类型。

参考:
Unity苹果(iOS)内购接入
iOS内购—— In-App Purchase(消耗型)
Unity IAP (App Store & Google Paly)

UnityIAPAppleConfiguration
iOS IAP支付常见问题汇总与解决
iOS IAP应用内购详细步骤和问题总结指南

Unity接入iOS内购相关推荐

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

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

  2. Unity接入苹果内购

    文章目录 前言 一.苹果内购是什么? 二.Unity接入内购 1.开启内购 2.使用内购 总结 前言 Unity接入苹果内购前,需要提前配置好产品的内购ID以及拥有苹果账号,关于这个提前准备各位需要自 ...

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

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

  4. Unity与IOS内购恢复问题

    Unity与IOS内购恢复问题 IOS这方面也接触了一段时间了,发现IOS内购最大的坑了就是恢复内购的问题.在asset store商店上面的所有关于iap的插件,其实都有相应的接口和函数,但是作为刚 ...

  5. Unity接入三星内购

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

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

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

  7. Unity IAP iOS 内购以及获取交易收据进行验证

    1. 准备工作,先到iTunesConnect 上进行添加内购项目和沙盒测试账号 创建APP 内购项目 选择其中一种类型,进行创建 填写内购项目的内容(其中的产品 ID 记住,在接下来有很多地方需要用 ...

  8. Unity接入OneStore内购

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

  9. iOS内购项目的接入与审核问题

    一.内购项目的创建 游戏内购项目就跟商品一样,需要在appstoreconnect后台对应用下创建APP内购买项目 app内购项目分为四种 消耗型项目–这类内购项目是指游戏内一次性购买的道具,元宝等 ...

最新文章

  1. jupyter的下载安装
  2. python基础知识整理-python爬虫基础知识点整理
  3. spring与springMVC配置扫描的问题
  4. oralce 角色 权限
  5. 【lLinux驱动】linux内核源码目录结构
  6. struts1,struts2,springMVC对比
  7. 如何删除虚拟机上的操作系统、删除新建的虚拟机
  8. 【ES8(2017)】async / await
  9. 全新Linux+Python高端运维班第一次作业
  10. python 股票历史数据相关性 监测绘图
  11. java浮点数转整数_(题目2)自己实现浮点数转换为整数
  12. Photoshop从入门到发疯(一)身份证添加水印
  13. python几行代码实现邮件解析
  14. redis数据类型总结
  15. osmconvert转换OpenStreetMap pbf文件至osm等格式矢量
  16. 解读焦虑:为什么不断赚钱却很心慌?
  17. idea更改MySQL依赖版本时错误:Duplicated tag: ‘properties‘ (position: START_TAG seen ...
  18. md5检验本地和服务器包的一致性
  19. 汽车计算机英语,架图你的行车电脑变成英文了怎么办??????
  20. Elastic 今日在纽交所上市,股价最高暴涨122%。

热门文章

  1. 云服务器被攻击进黑洞了怎么解决
  2. up and UP……
  3. python秒表小项目_Python语言写秒表计时器的GUI的方法|Python秒表案例教程
  4. 阿里巴巴新零售内容AI平台创新与实践 | CNCC技术论坛
  5. 27个人买饮料,3个空瓶换1瓶,问至少买多少瓶,才能每个人都能喝到一瓶?
  6. 游侠一直显示连接服务器,在游侠平台自己开的服务器 朋友第二次以后就无法进入...
  7. 神之刃最新服务器,移动游戏平台大作《神之刃》持续火爆
  8. 各大高校科研预警期刊汇总
  9. 感受DataGrid给数据操作带来的便利(3)
  10. win10自带截图(Win+Shift+S快捷键)