Unity接入OneStore内购
前言
OneStore是韩国第一大android应用市场,访问官网可能需要你科学上网才能正常访问。
[中文]OneStore开发工具
[中文]在Unity中使用ONE store In-App支付
国内手机可能不支持onestore,需要下载onestore的server和onestore的商店app
app:https://m.onestore.co.kr/mobilepoc/etc/marketDownloadGuide.omp
server:https://m.onestore.co.kr/mobilepoc/etc/downloadGuide.omp
设置OneStore
Github onestore_iap_release
下载地址
插件导入目录
Unity Plugin配置
Assets > Plugins > Android
文件 | 详情 |
---|---|
AndroidManifest.xml | Project Settings > Player > Publishing Settings > Build |
Iap_adapter-v1.3.0.aar | 负责Unity与ONE store In-App支付library的通信。 |
Iap_sdk-v19.00.00.aar | ONE store In-App支付library文件 |
Assets > Scripts > Purchase
文件 | 详情 |
---|---|
AndroidNative.cs | 在Unity中启动安卓 AlertDialog的实用程序文件。 |
GaaIapCallbackManager.cs | 负责从Unity调用Android发出的响应结果。 |
GaaIapCallManager.cs | 负责在Unity中调用In-App支付SDK中的函数。 |
GaaIapResultListener.cs | 接收来自GaaIapCallbackManager的响应结果,并加工数据以方便UI的写入。 |
GaaPurchaseResponse.cs | In-App支付library中使用的Value Object定义的文件。 |
Assets > StreamingAssets
文件 | 详情 |
---|---|
global-appstores.json | 在In-App支付SDK中查找Payment module所需的文件。 |
初始化OneStore IAP
初始化并连接ONE store In-App
支付
请求In-App支付之前,您必须通过以下操作连接到ONE store服务。
当您尝试通过GaaIapCallManager.StartConnection()
连接时,将在内部开始初始化SDK,并尝试与支付模块连接。此时,请参照global-appstores.json
中定义的支付模块信息。
using Gaa
public class YourUiScript: MonoBehaviour
{...public void StartConnection(){if (GaaIapCallManager.IsServiceAvailable() == false){GaaIapCallManager.StartConnection( /* your public key */ );}}...
}
可以通过GaaIapResultListener.PurchaseClientStateEvent()
获取有关确认连接响应的方法。
响应结果以GaaPurchaseResponse.IapResult
对象的形式传递。
IapResult.code
的值可通过GaaPurchaseResponse.ResponseCode
查看。
void PurchaseClientStateEvent(IapResult iapResult)
{if (iapResult.IsSuccess()){...}else if (iapResult.code == ResponseCode.RESULT_NEED_UPDATE){...}else if (iapResult.code == ResponseCode.RESULT_NEED_LOGIN){...}
}
退出应用软件时,您必须断开与支付模块的连接。
void OnDestroy(
{GaaIapCallManager.Destroy();
}
查询App商品信息
在开发者中心注册In-App商品时,生成的In-App商品ID用于查询In-App商品详情。如需查看In-App商品详情,请调用QueryProductDetails()
。指定In-App商品ID(productId)数组的值及其对应的商品类型。
In-App商品类型包括管理型商品、包月型商品,如果想要同时查看这两种类型,只需输入ProductType.ALL即可。
为了查询App商品详细信息,应用软件使用在ONE store开发者中心配置商品时定义的In-App商品ID来查询。 有关更多信息,请参照开发人员中心。
可通过GaaIapResultListener
的ProductDetailsSuccessEvent()
和ProductDetailsErrorEvent()
接收商品信息查询的响应结果值。
与Android和Unity的通信是字符串通信,由于一次传递的字符串长度有限,每次传递一个商品。
因此,ProductDetailsSuccessEvent(...,...,int count,int totalCount)
值很重要。
Ex)1件商品:count=1,totalCount=1/10件商品:count=1,totalCount=10…。
Count=10,totalCount=10。
string[] all_products = { inapp_p5000, inapp_p10000, inapp_p50000, auto_a100000 };
GaaIapCallManager.QueryProductDetails(all_products, ProductType.ALL);
List<ProductDetail> products = new List<ProductDetail>();
void ProductDetailsSuccessEvent(ProductDetail productDetail, int count, int totalCount)
{if (count == 1){products.Clear();}products.Add(productDetail);if (count == totalCount){// send ProductDetail List to UI}
}
void ProductDetailsErrorEvent(IapResult iapResult)
{if (iapResult.code == ResponseCode.RESULT_NEED_UPDATE){...}else if (iapResult.code == ResponseCode.RESULT_NEED_LOGIN){...}
}
In-App商品ID目录必须由应用软件自己的安全后端服务器管理。
请求购买
要购买In-App商品,请调用GaaIapCallManager.LaunchPurchaseFlow()
。
在调用时创建并指定GaaPurchaseResponse.PurchaseFlowParams
对象。必需的值包括In-App商品ID(productId)和商品类型(管理型商品:ProductType.INAPP,包月型商品:ProductType.AUTO)。
此外,还放入开发商随机输入的developerPayload(最多200byte)。此值可用于在付款后检查数据的一致性和附加数据。
ProductName用于更改在支付时向用户展示的In-App商品的名称,而不是注册的In-App商品ID的名称。
ONE store为用户提供了折扣券、返现等优惠促销。
开发商可以使用gameUserId
和promotionApplication
值在购买请求时允许或限制使用app的用户参与促销。
开发商通过选择该应用软件的唯一用户识别号以及是否参与促销活动进行传递,而ONE store将根据这些值应用用户的促销优惠。
void BuyProduct(string productId, string type){PurchaseFlowParams param = new PurchaseFlowParams();param.productId = productId;param.productType = type;//param.productName = "";//param.devPayload = "your Developer Payload";//param.gameUserId = "";//param.promotionApplicable = false;GaaIapCallManager.LaunchPurchaseFlow(param);}
调用LaunchPurchaseFlow()Method
时,将显示ONE store的支付界面。
下图表示ONE store的支付界面。
支付的响应通过GaaIapResultListener
的事件传递。
成功:PurchaseUpdatedSuccessEvent()
失败:PurchaseUpdatedErrorEvent()
由于“查询商品信息”等原因,count、totalCount都存在。
private List<PurchaseData> purchases = new List<PurchaseData>();
private List<string> signatures = new List<string>();void PurchaseUpdatedSuccessEvent(PurchaseData purchaseData, string signature, int count, int totalCount)
{if (purchaseData != null) {if (count == 1){purchases.Clear();signatures.Clear();}purchases.Add(purchaseData);signatures.Add(signature);if (count == totalCount){OnPurchaseUpdatedResponse(purchases, signatures);}}else{// no PurchaseData}
}void PurchaseUpdatedErrorEvent(IapResult iapResult)
{...
}
支付成功后,将创建一个唯一标识符“购买token”,即表示用户购买的购买ID。在应用软件中,您可以将购买token存储在本地,或者存储在安全后端服务器上,用于确认购买。
管理型商品的购买token对于每个购买ID都是唯一的,但包月型商品的购买token在更新期间保持不变。
用户还将通过电子邮件收到包含收据号码的交易收据。每次购买管理型商品时,您都会收到电子邮件,包月型产品在第一次购买时以及以后更新时都会收到电子邮件。
确认购买
如果您使用的是ONE store IAP library v6
或更高版本,则必须在3天内进行购买确认。如果无法确认购买,购买金额将退还。
您可以使用以下method之一确认购买:
对于消耗性产品,请使用 GaaIapCallManager.Consume()。
非消耗性产品,请使用 GaaIapCallManager.Acknowledge()
。
对于包月型商品,只需确认首次支付的购买即可。
PurchaseData
对象包含isAcknowledged()
method,该method显示是否已确认购买。在确认购买之前,使用这些method,您可以确定您的购买是否已被确认。
下面是显示包月型商品的购买确认方法的示例。
void PurchaseUpdatedSuccessEvent(PurchaseData purchaseData, string signature, int count, int totalCount)
{...if (purchaseData != null) {...if (purchaseData.IsAcknowledged() == false){GaaIapCallManager.Acknowledge(purchaseData, "your developer payload");}}...
}
请求登录ONE store
ONE store In-App
支付SDK必须登录后才能运行。
如果您以前登录过,ONE store会自动登录,但如果您需要登录,IapResult.code
会在API请求中发送到ResponseCode.RESULT_NEED_LOGIN
中。
传递RESULT_NEED_LOGIN后,必须调用GaaIapCallManager.LaunchLoginFlow()
method。
响应的结果可通过GaaIapResultListener.LoginFlowEvent()
查看。
下面是请求登录ONE store的示例。
GaaIapCallManager.LaunchLoginFlow();
void LoginFlowEvent(IapResult iapResult)
{if (iapResult.IsSuccess()) {// You need to specify the scenario after successful login.}
}
安装ONE store服务
如果ONE store服务的版本较低或不存在,则不能使用In-App支付。
当尝试通过GaaIapCallManager.StartConnection()
连接时,如果响应结果导致ResponseCode.RESULT_NEED_UPDATE
,则需要调用GaaIapCallManager.LaunchUpdateOrInstallFlow()
method。
响应的结果可通过GaaIapResultListener.UpdateOfInstallFlowEvent()
查看。
以下是如何安装ONE store服务的示例。
GaaiapCallManager.LaunchUpdateOrInstallFlow();
void UpdateOrInstallFlowEvent(IapResult iapResult)
{if (iapResult.IsSuccess()) {// If the installation is completed successfully,// you should try to reconnect with the ONE store service.GaaIapCallManager.StartConnection("your public key")} else {...}
}
Unity接入OneStore内购相关推荐
- Unity接入苹果内购(IAP)
Unity接入苹果内购(IAP) 前言 苹果支付流程 配置App 配置商品 协议.税务和银行业务 沙盒测试账号 Unity(IAP) 测试 前言 第一次发帖,有点激动嘿嘿!话不多说直接奔主题,项目中需 ...
- 真正手把手教你用unity接入苹果内购(IAP)
原帖:真正手把手教你用unity接入苹果内购(IAP) http://www.manew.com/thread-100403-1-1.html (出处: -[游戏蛮牛]-ar增强现实,虚拟现实,uni ...
- Unity接入苹果内购
文章目录 前言 一.苹果内购是什么? 二.Unity接入内购 1.开启内购 2.使用内购 总结 前言 Unity接入苹果内购前,需要提前配置好产品的内购ID以及拥有苹果账号,关于这个提前准备各位需要自 ...
- Unity接入三星内购
文章目录 前言 一.SDK下载 二.接入步骤 1.导入SDK 2.请求商业卖家状态 3.注册应用程序 4.添加应用内商品 5.添加测试用户 总结 前言 因公司需要,接入三星内购,Unity是支持三星商 ...
- Unity接入iOS内购
1.内购种类 consumable:可消费的,如游戏中的金币,用完还可以再购买. non-consumable:不可销毁的,一次购买,永久生效.比如去广告,解锁游戏关卡,这种商品只能购买一次. sub ...
- Unity接入GooglePlay内购V4(源生Android方式)
Unity接GooglePlay In-App Billing坑还是蛮多的,各种坑. 接的方式目前来看有三种: 采用Unity IAP插件,开启Unity的IAP Service 采用Android源 ...
- Unity与IOS内购恢复问题
Unity与IOS内购恢复问题 IOS这方面也接触了一段时间了,发现IOS内购最大的坑了就是恢复内购的问题.在asset store商店上面的所有关于iap的插件,其实都有相应的接口和函数,但是作为刚 ...
- Unity如何接入应用内购In-AppPurchase
一.前言 很多游戏需要接入内购IAP,对于苹果端,我们直接对接苹果就行了,但是android平台太多,国内,我们需要接入支付宝,微信,或者华为支付,小米支付等.国外,我们需要接入谷歌支付,亚马逊等等, ...
- C#接入steam内购
这一篇文章主要记录了C#服务端唤起steam交易授权页面时遇到的问题. 问题主要在于steam文档太难读了. 这一段是重点: 第一步:获取客户端请求生成订单时,要先请求GetUserInfo接口 请求 ...
最新文章
- MySQL学习随笔记录
- 据说这是个电子元器件采购的春天,我们该如何把握机遇?
- 有趣的HTML5/CSS3艺术网站
- HTML的五种经典布局方式(二)
- 计算机网络教室任课教师登记表,多媒体教室工作计划
- 创建字节跳动之前,张一鸣读过哪些硬核技术书?
- Hadoop集群安装(真分布式)
- java底层 文件操作,java底层是怎的对文件操作的
- 轻量级服务器与云服务器的区别
- 倒计时1周!聚焦金融科技,Gdevops北京站即将启程
- the problem was occurred when start ADT
- 数据库设计说明书的编写
- Linux服务器校准时间
- 李政轩讲核方法kernel Method 视频笔记
- Java生成随机整数
- Python中文文本分句 sentence tokenize
- STM32之BKP原理
- echarts地图 自定义区域
- ps中颜色和图片本身颜色不一样,白色呈米色
- Mac下嵌入式开发初步(二)
热门文章
- Azure 深入浅出[2] --- App Service的部署并查看应用Log
- nyoj 105 九的余数
- 查看服务器GPU型号
- 在web上面显示地图并定位
- 量子计算机可不可以穿越时空,俄罗斯宣称成功研制出第一台“时光机”,时空旅行将要成真?...
- Bootstrap 进度条媒体对象和 Well 组件
- 凸优化基础知识笔记-凸集、凸函数、凸优化问题
- 科学计算机算余切,科学计算机在线算(科学计算器如何算正态分布)
- 融资融券黑马选股分析系统主力意图大资金流出流入短线涨停板股票炒股软件
- exit code非0什么意思C语言,c++程序出现exit code -1073740940 (0xC0000374)