在Unity中使用One store In-App支付
Last updated
Last updated
ONE store支付插件在Unity环境拓展asset,提供在游戏中one store支付程序库的最新功能。本指南对设置project使用插件的方法,以及展现ONE store支付程序库功能的方法进行说明。
可以在GitHub的 Release 页面下载Unity用ONE store app内支付插件的最新版本。
在Unity菜单栏点击Assets > Import Package > Custom Package
找到下载位置选择.unitypackage文件。
Import Unity Package对话框内所有Assets都选上,点击Import。
导入Package生成新文件夹。这个文件夹里包括ONE store支付程序库。
Assets/OneStoreCorpPlugins
/Common
/Authentication
/Purchase
/AppLicenseChecker
EDM4U(External Dependency Manager for Unity)必须一起发行。 如果已经在使用,在Import Package阶段解除检测ExternalDependencyManager适用即可。
要在Project包含仓库及从属性,需要遵循如下阶段。
Project Settings > Player > Publishing Settings > Build
检测以下两方面
Custom Main Manifest
Custom Main Gradle Template
选择 Assets > External Dependency Manager > Android Resolver > Force Resolve
可以在mainTemplete.gradle
文件确认适用如下内容。
In-app Purchase从属性列出如下。 Assets/OneStoreCorpPlugins/Purchase/Editor/PurchaseDependencies.xml
App License Checker 从属性列出如下。 Assets/OneStoreCorpPlugins/AppLicenseChecker/Editor/AppLicenseCheckerDependencies.xml
需要在AndroidManifest.xml
文件设置。详细内容请参考公告事项。
如果不设置<queries>, 就无法在SDK找到ONE store服务。.
是强制SDK和全球store联动的选项。本功能从SDK v21.01.00版本开始适用。
发行组建版本中,本选项必须删除。
在研发阶段设置Log level,可以更仔细显示SDK的数据流向。以android.util.Log内定义的值为基础运作。
VERBOSE
2
DEBUG
3
INFO (default)
4
WARN
5
ERROR
6
发行组建版本网络安全比较弱,本选项需要删除。
为了请求app内支付,需要使用ONE store研发者中心提供的许可证密钥对PurchaseClientImpl
对象进行初始化。 调用Initialize()
函数完成基本配置。这是为了连接ONE store服务的先行操作。
PurchaseClientImpl
对象初始化结束后,如果通过QueryProductDetails()
请求商品信息,以IPurchaseCallback.OnProductDetailsSucceeded()
接收回复。
ProductType
如下
管理型商品
ProductType.INAPP
定期支付商品 (订阅商品)
ProductType.SUBS
包月型商品
(该商品今后本商品将不予支持) ProductType.AUTO
想一次性查询上述所有类型信息,请设置ProductType.ALL
。
ProductType.ALL
仅可在查询商品详细信息中使用,在请求购买,查询购买明细中无法使用。
应用程序内商品ID列表要在研发者的网络安全后端服务器上管理。
为了在app请求购买,要在基本线程调用Purchase()
函数。
以调用QueryProductDetails()
API获取的ProductDetail
对象的值为基础,生成PurchaseFlowParams
对象。
要生成PurchaseFlowParams
对象,需要使用PurchaseFlowParams.Builder
class。
SetDeveloperPayload()
作为研发者任意输入的值,最多为200byte。此值可以用于确认支付后信息的整合性和附加信息。
SetProductName()
在支付时想要更改显示商品名的情况下使用。
SetQuantity()
仅用于管理型app内商品,在购买数个同一商品时使用。
ONEstore正在进行为用户提供优惠券、现金卡等诸多优惠宣传活动。
研发公司可以在请求购买时使用gameUserId
、 promotionApplicable
参数,限制或允许app用户参与宣传活动。
研发公司传送app的固有用户识别号码及选择是否参与宣传活动,one store以此值为基础,适用用户的宣传优惠。
gameUserId
, promotionApplicable
参数作为选项值,仅在事先与ONE store事业部负责人协商宣传活动时使用,其他一般情况下不发送值。
另外,即使达成事先协议并发送值,为了保护个人信息,gameUserId也必须以hash的固有值形式传送。
如果成功调用Purchase()
,显示如下界面。【图片1】显示管理型商品支付购买界面。
如果购买成功,向IPurchaseCallback.OnPurchaseSucceeded()
函数传送结果。
失败时调用IPurchaseCallback.OnPurchaseFailed()
函数。
如果购买成功, 购买数据还会生成用户及商品ID的固有识别符号购买token。购买token虽然可以在应用软件内储存,但是最好将token传送到验证购买、避免诈骗的后端服务器。
管理型商品和定期支付商品的购买token在每次支付的时候都会发行购买token。(包月型商品自动支付更新期间,购买token将保持不变。)
另外,用户会通过电子邮件接收包含收据号码的交易收据。管理型商品每次购买都会接收电子邮件,包月型商品和定期支付商品在第一次购买和之后有更新的时候会接收电子邮件。
定期支付在取消之前一直自动更新。定期支付可能有以下状态。
激活:用户使用内容过程中没有问题的良好状态,可以接触定期支付。
预约暂停:用户使用定期支付期间想要暂停时可以选择。
周定期支付:以1-3周为单位进行暂停。
月定期支付:以1-3个月为单位进行暂停。
年定期支付:不予支持暂停。
预约解除:虽然用户正在使用定期支付,但想取消时可以选择。下一个支付日将不会支付。
延期,保留:如果用户出现支付问题,则无法在下一个支付日支付。用户不能取消预约,可以立即“解除订阅”。
用户想要升级或降级定期支付时,可以在购买时设置比例分配模式,或者设置变更事项影响到定期支付用户的方式。
下表是可以使用的比例分配模式(OneStoreProrationMode
)
比例分布模式
说明
IMMEDIATE_WITH_TIME_PRORATION
定期支付的变更将立即进行,剩余时间基于差价调整后退款或支付。(这是基本操作)
IMMEDIATE_AND_CHARGE_PRORATED_PRICE
定期支付的变更将立即进行,请求支付周期和之前一致。请求用户支付剩余时间的价格。(本选项仅在更新中可使用)
IMMEDIATE_WITHOUT_PRORATION
定期支付的变更将立即进行,下一个支付日支付新的价格。请求支付周期和之前一致。
DEFERRED
现有套餐到期后立即变更,同时发给用户新的资费。
定期支付可以使用与请求购买同一个API,向用户提供升级或降级。但是,为了适用定期支付的升级与降级,必须具备现有定期支付购买token和比例分配模式值。 如下例子,需要提供现有定期支付、今后(升级或降级)定期支付以及比例分配模式相关信息。
因为升级或降级也会执行请求购买逻辑,所以接收同样回复。
另外,也会在查询购买明细中有请求时接收回复。用比例分配模式购买也和一般购买一样,需要使用PurchaseClientImpl.AcknowledgePurchase()
进行购买后处理。
如果用户购买完成,需要在应用软件进行购买处理。 大部分情况下,应用软件通过OnPurchaseSucceeded()
获得购买通知。或者如查询购买明细说明那样,也有应用软件调用PurchaseClientImpl.QueryPurchases()
函数处理的情况。
管理型商品在消费之前不能再次购买。
为了消费商品,调用ConsumePurchase()
。另外,消费操作结果调用为IPurchaseCallback..OnConsumeSucceeded()
。
不消费管理型商品时,可以作为永久性形态的商品使用, 购买后立即消费时,也可以作为消费性形态的商品使用。 另外,如果特定时间后消费,还可以作为固定期限形态的商品使用 。
消费请求有时会失败, 因此必须检查安全后端服务器,确认各购买token是否使用。只有这样应用软件才不会对同一个购买进行多次授权。或者,在授权之前, 可以等到成功消费回复为止。
3天内不确认购买(acknowledge
)或不消费(consume
),判断为没有为用户提供商品,自动退款给用户。
如果验证非消费型商品,使用PurchaseClientImpl.AcknowledgePurchase()
函数。管理型商品、包月型商品、订阅型商品均可使用。
使用PurchaseData.Acknowledged()
函数判断是否已验证。另外,验证操作成功后,将调用IPurchaseCallback.OnAcknowledgeSucceeded()
函数。
仅仅处理购买,不足以保证应用软件处理了所有购买。应用软件可能无法识别用户购买的全部商品。 应用软件可能错过购买跟踪或无法识别购买等几种情况如下。
网络问题:用户成功购买,ONE store上也收到确认,但是设备在接收购买通知之前,发生网络连接断开的情况。
多个设备:用户在一台设备上购买商品后,切换到其他设备时,期待显示该商品。
为了处理这种情况,需要在应用软件的Start()
或OnApplicationPause()
中调用PurchaseClientImpl.QueryPurchases()
,按照购买后处理说明来确认所有购买是否已经成功处理。
包月型商品是最初购买后30天更新的商品。包月型商品的状态可以通过PurchaseData.RecurringState()
确认。
如果要更改包月型商品的状态,请使用PurchaseClientImpl.ManageRecurringProduct()
。输入购买数据和要更改的RecurringAction
值 。
可以显示管理订阅商品状态的界面。
作为参数输入PurchaseData
后,确认购买数据,运行相应定期支付商品的管理界面。但是输入null
时,运行用户的定期支付列表界面。下面是显示定期支付管理界面的方法的示例。
从SDK v19版本以上开始,为了使用S2S API需要市场分类代码。
PurchaseClientImpl
对象初始化时,SDK尝试与支付模块连接。此时连接成功就会自动导入StoreCode
。
PurchaseClientImpl.StoreCode
变数有配额。
ONE store服务的版本低或者没有时,无法使用app内支付。首次调用API时,首先尝试与ONE store服务连接。此时,如果发生RESULT_NEED_UPDATE
,则需要调用LaunchUpdateOrInstallFlow()
方法。
ONE store app内 SDK只要用户登录ONE store才能启动。内部首先尝试以登录token进行登录。失败或最初登录等没有用户信息时,会显示前台登录画面,引导用户登录。
Unity
2020.3.48f1
Java SDK (Java 11)
Purchase: v21.01.00
App License Checker: v2.1.0