FRVRSDK.IAP 让 Unity WebGL 构建可以通过宿主渠道使用的商店进行交易(Facebook IAP、Apple IAP、Google Play Billing 等)。你不挑选 provider —— 由该次发版注入的渠道决定。
封装方法返回/接收的是 JSON 字符串(不是强类型对象)。你自己解析它。
if (FRVRSDK.IAP.IsReady())
{
// 可以安全地查目录和调用 Purchase。
}
在你尝试填充商店 UI 或显示购买按钮之前先调一下 —— 目录在会话开始时需要一点时间才能就绪。
string catalogJson = FRVRSDK.IAP.GetCatalog();
// 商品对象的 JSON 数组:
// [
// {
// "label": "Small Bundle",
// "price": "$2.99",
// "priceValue": "2.99",
// "currencyCode": "USD",
// "storeId": "bundlesmall",
// "trackingName": "Small Bundle"
// },
// ...
// ]
具体商品信息 + 价格查询(在按钮上很好用):
string productJson = FRVRSDK.IAP.GetProduct("bundlesmall");
string localisedPrice = FRVRSDK.IAP.GetProductPrice("bundlesmall"); // 例如 "Din 110" 或 "$2.99"
直接把 GetProductPrice 用在按钮文案里 —— 它已经是商店给的玩家本地货币。
FRVRSDK.IAP.Purchase("bundlesmall", resultJson =>
{
// 失败/取消时 resultJson 为 "{}",成功时是一个 purchase 对象:
// {
// "purchaseId": "11111111116739804",
// "productId": "bundlesmall",
// "channelId": "facebook-instant",
// "purchaseTime": 1761220217239,
// "transactionId": "11111111116739804",
// "transactionReceipt": "9OlnbR6KcvqiDZox....AFVn0"
// }
if (resultJson == "{}") return; // 用户取消或购买失败
GrantProduct(resultJson);
FRVRSDK.IAP.ConsumePurchase(resultJson, _ => { }); // 仅消耗品
});
只消耗消耗品(金币、生命、单次使用的助力)。永久解锁(去广告、皮肤)不要消耗 —— 否则会变成可以再次购买。
如果游戏在购买成功和发放内容之间崩溃了,凭据会保留为 pending。开机时检查一下:
string unconsumedJson = FRVRSDK.IAP.GetUnconsumedPurchases();
// [
// { "purchaseId": "...", "productId": "bundlesmall", "purchaseTime": ..., ... },
// ...
// ]
// 对每一项:发放内容,然后 ConsumePurchase 闭环。