在Unity中使用One store In-App支付

概要

ONE store支付插件在Unity环境拓展asset,提供在游戏中one store支付程序库的最新功能。本指南对设置project使用插件的方法,以及展现ONE store支付程序库功能的方法进行说明。

研发版本

Unity

2022.3.62f3

Java SDK (Java 11)

Purchase: v21.04.00

App License Checker: v2.2.1

ONE store支付插件设置

插件下载及导入(import)

  1. 可以在GitHub的 Release 页面下载Unity用ONE store app内支付插件的最新版本。

  2. 在Unity菜单栏点击Assets > Import Package > Custom Package

  3. 找到下载位置选择.unitypackage文件。

  4. 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

<queries> 设置

需要在AndroidManifest.xml文件设置。详细内容请参考公告事项。

发行全球store的测试选项设置

v21.04.00更新 - ONE Billing Lab 选择功能

可以通过如下设置 onestore:dev_option 的 android:value 值来指定与 SDK 关联的商店应用。 应位于 <application> 标签的直属子级,并应添加以下元素。

android:value
适用国家/地区

onestore_00

South Korea

onestore_01

Singapore, Taiwan

onestore_02

United States

onestore_03

ONE Billing Lab

Version History

  • v21.04.00 :ONE Billing Lab 选择功能

  • v21.02.00 : 使用 android:value 可设置韩国、新加坡/台湾及美国。

  • v21.01.00 : 使用 android:value 只能设置 global,并且只能指定新加坡/台湾商店应用程序。

游戏中适用ONE store app内支付程序库

设置 Log level

在研发阶段设置Log level,可以更仔细显示SDK的数据流向。以android.util.Log内定义的值为基础运作。

常数

VERBOSE

2

DEBUG

3

INFO (default)

4

WARN

5

ERROR

6

ONE store app内支付初始化

为了请求app内支付,需要使用ONE store研发者中心提供的许可证密钥对PurchaseClientImpl对象进行初始化。 调用Initialize()函数完成基本配置。这是为了连接ONE store服务的先行操作。

查询商品信息

PurchaseClientImpl对象初始化结束后,如果通过QueryProductDetails()请求商品信息,以IPurchaseCallback.OnProductDetailsSucceeded()接收回复。

ProductType如下

Product
Enum

管理型商品

ProductType.INAPP

定期支付商品 (订阅商品)

ProductType.SUBS

包月型商品

ProductType.AUTO (该商品今后本商品将不予支持)

想一次性查询上述所有类型信息,请设置ProductType.ALL

请求购买

为了在app请求购买,要在基本线程调用Purchase()函数。

以调用QueryProductDetails()API获取的ProductDetail对象的值为基础,生成PurchaseFlowParams 对象。 要生成PurchaseFlowParams对象,需要使用PurchaseFlowParams.Builder class。

SetDeveloperPayload()作为研发者任意输入的值,最多为200byte。此值可以用于确认支付后信息的整合性和附加信息。 SetProductName()在支付时想要更改显示商品名的情况下使用。

SetQuantity()仅用于管理型app内商品,在购买数个同一商品时使用。

如果成功调用Purchase(),显示如下界面。【图片1】显示管理型商品支付购买界面。

【图片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()函数处理的情况。

消费购买商品 (consume)

管理型商品在消费之前不能再次购买。

为了消费商品,调用ConsumePurchase()。另外,消费操作结果调用为IPurchaseCallback..OnConsumeSucceeded()

不消费管理型商品时,可以作为永久性形态的商品使用, 购买后立即消费时,也可以作为消费性形态的商品使用。 另外,如果特定时间后消费,还可以作为固定期限形态的商品使用 。

消费请求有时会失败, 因此必须检查安全后端服务器,确认各购买token是否使用。只有这样应用软件才不会对同一个购买进行多次授权。或者,在授权之前, 可以等到成功消费回复为止。

验证购买商品 (acknowledge)

如果验证非消费型商品,使用PurchaseClientImpl.AcknowledgePurchase()函数。管理型商品、包月型商品、订阅型商品均可使用。

使用PurchaseData.Acknowledged() 函数判断是否已验证。另外,验证操作成功后,将调用IPurchaseCallback.OnAcknowledgeSucceeded()函数。

查询购买明细

仅仅处理购买,不足以保证应用软件处理了所有购买。应用软件可能无法识别用户购买的全部商品。 应用软件可能错过购买跟踪或无法识别购买等几种情况如下。

  • 网络问题:用户成功购买,ONE store上也收到确认,但是设备在接收购买通知之前,发生网络连接断开的情况。

  • 多个设备:用户在一台设备上购买商品后,切换到其他设备时,期待显示该商品。

为了处理这种情况,需要在应用软件的Start()OnApplicationPause()中调用PurchaseClientImpl.QueryPurchases(),按照购买后处理说明来确认所有购买是否已经成功处理。

更改包月型商品状态 (Deprecated)

包月型商品是最初购买后30天更新的商品。包月型商品的状态可以通过PurchaseData.RecurringState()确认。

如果要更改包月型商品的状态,请使用PurchaseClientImpl.ManageRecurringProduct()。输入购买数据和要更改的RecurringAction值 。

打开定期支付管理界面

可以显示管理订阅商品状态的界面。 作为参数输入PurchaseData后,确认购买数据,运行相应定期支付商品的管理界面。但是输入null时,运行用户的定期支付列表界面。下面是显示定期支付管理界面的方法的示例。

获取市场分类代码(code)

从SDK v19版本以上开始,为了使用S2S API需要市场分类代码。

PurchaseClientImpl 对象初始化时,SDK尝试与支付模块连接。此时连接成功就会自动导入StoreCode

PurchaseClientImpl.StoreCode 变数有配额。

安装ONE store服务

ONE store服务的版本低或者没有时,无法使用app内支付。首次调用API时,首先尝试与ONE store服务连接。此时,如果发生RESULT_NEED_UPDATE,则需要调用LaunchUpdateOrInstallFlow() 方法。

请求登录ONE store

ONE store app内 SDK只要用户登录ONE store才能启动。内部首先尝试以登录token进行登录。失败或最初登录等没有用户信息时,会显示前台登录画面,引导用户登录。

Last updated