游戏内购买
您可以通过为用户提供游戏内购买的选项来赚取收入。例如,他们可通过购买额外的时间来完成关卡或获得人物装饰。为此,您需要:
- 在 Yandex Games 开发者仪表板中启用游戏内购买。
- 配置 SDK 以支持购买。
门户货币
Yan(扬)是 Yandex 游戏平台的门户货币,用于支付游戏内购买。扬币存储在玩家的统一账户余额中,可以通过银行卡充值。扬币与卢布的汇率是动态变化的。
备注
对于国际支付,扬币与本币的汇率会根据玩家所在的国家而定。
您可以通过以下方式充值余额:
- 在目录顶部栏;
- 在玩家个人资料页;
- 在游戏内购买时。
用户也可以通过参与促销活动或购买固定礼包获得扬币奖励。
无论玩家是否在 Yandex 上已授权,都可以进行游戏内购买。玩家可以在游戏过程中授权,包括在进行购买时授权。
引入门户货币后,开发者获得许可报酬的程序和条件不会发生变化。
接入条件
购买接入的要求取决于您的法人实体的属地。
要进行购买的设置和测试,您需要签署《Deed of Transfer of Non-exclusive Rights to Use the Game》。
在添加购买和发布游戏草稿后,请发送一封邮件至 games-partners@yandex-team.com,申请获取交接书表格。邮件中请务必注明游戏名称和标识符(ID)。
您会收到一份《Deed of Transfer of Non-exclusive Rights to Use the Game》表格。请填写并签字后,将扫描件(或高质量照片)回复到邮件中。
只有收到签署后的交接书后,您才能进行游戏内购的设置和测试。
在添加购买和发布游戏草稿后,请发送一封邮件至 games-partners@yandex-team.com,申请接入购买。邮件中请务必注明游戏名称、标识符(ID),以及您的法人实体所属国家。
购买流程
你可以通过以下方法激活应用内购买:
ysdk.payments.create_purchase(callback, options)
callback
— function — 被调用方法的回调。其形式如下:
function(self, purchase: table|nil, signature: string|nil): nil
purchase: table
— 购买信息。包含以下属性:product_id: string
— 商品标识符。purchase_token: string
— 用于该购买的令牌。developer_payload: string|nil
— 购买的附加数据。
signature: string|nil
— 有关购买的数据和用于验证玩家身份的签名。
options
— 方法参数。包含以下属性:
id: string
— 在开发者控制台中设置的商品标识符。developer_payload: string
— 可选参数。您希望发送到自己服务器的购买附加信息(将在 signature 参数中传递)。signed: boolean|nil
— 可选参数。用于防止游戏作弊。
示例
function buy_item(id)
ysdk.payments.create_purchase(
function(self, purchase, signature)
if purchase then
print(purchase.product_id, signature)
end
end,
{ id, signed = true }
)
end
获取已购项目列表
要了解玩家已经进行了哪些购买,请使用以下方法:
ysdk.payments.getPurchases(
callback: function,
options : {
signed: boolean|nil
}
)
callback
— function — 所调用方法的回调。格式如下:
function(self, purchase: Purchase[]|nil, signature: string|nil): nil
-
Purchase
— 购买信息。包含以下属性:product_id: string
— 商品的标识符。purchase_token: string
— 用于消费购买的令牌。developer_payload: string|nil
— 购买的附加数据。
-
signature: string|nil
— 关于购买的数据以及用于验证玩家真实性的签名。
示例
function display_puchases()
ysdk.payments.get_purchases(function(self, purchases)
if purchases then
for k, v in pairs(purchases) do print(k, v) end
end
end)
end
获取所有产品的目录
要获取可用购买项及其价格的列表,请使用方法 ysdk.payments.getCatalog()
.
ysdk.payments.getCatalog(callback: function)
callback
— function — 被调用方法的回调。格式如下:
function(self, products: Product[]|nil): nil
products: table[]
— 商品信息。包含以下属性:
products = [
{
id: string,
title: string,
description: string,
image_uri: string,
price: string,
price_value: string,
price_currency_code: string,
price_currency_image: {
small: string,
medium: string,
svg: string
}
},
...
]
示例
function display_shop()
ysdk.payments.get_catalog(function(self, products)
if products then
for k, v in pairs(products) do print(v.title, v.price, v.description) end
end
end)
end
处理购买并扣除游戏货币
有两种类型的购买:永久性(例如为了禁用广告的购买)和消耗性(例如消耗游戏货币的购买)。
要处理永久性购买,请使用 ysdk.payments.get_purchases()
方法。
要处理消耗性购买,请使用 ysdk.payments.consume_purchase()
方法。
ysdk.payments.consume_purchase(purchase_token: string)
注意
在调用 ysdk.ayments.consume_purchase()
方法后,已处理的购买将被永久删除。因此,请首先使用 ysdk.player.set_stats()
或 ysdk.player.increment_stats()
方法编辑玩家数据,然后再处理购买。
示例
function buy_item(id)
ysdk.payments.create_purchase(
function(self, purchase)
if purchase then
ysdk.payments.consume_puchase(purchase.purchase_token)
end
end,
{ id }
)
end