查看产品列表和购买
搜尋產品列表¶
當用戶進入應用內商店時,調用產品列表搜索 API。如果用戶請求產品列表,則返回包含產品信息的 IAPV4Product
類。
產品列表和詳細資訊¶
欄位名稱 | 描述 |
---|---|
marketPid | 在應用內商店註冊的固有產品 ID |
currency | 貨幣類型(例如 KRW/USD) |
price | 產品價格 |
title | 產品標題 |
displayPrice | 產品價格的字串類型(例如 $100.00) 更多 |
productDescription | 產品詳細資訊 |
originalMarketJson | 從市場接收到的產品資訊 使用 Google 訂閱 V2 時,可以使用 originalMarketJson 檢查在 Google Play 控制台中定義的產品資訊 |
displayOriginalPrice | 折扣前的價格字串 |
originalPrice | 不含折扣的原始價格 |
iconURL | 產品圖示 (512*512) 僅適用於 Hive SDK v4.12.0 及更高版本,僅限 Google |
displayPrice¶
- 在訂單中發送顯示價格,顯示貨幣符號和價格的組合(例如 $0.99)。由於 Android 或 iOS 有其自己的顯示類型,貨幣符號和價格的順序可能會因操作系統而在不同國家顯示不同。
- 確保每個國家的貨幣符號與其表格相同。請參考識別政策以確認貨幣符號的表格。
- 如果需要添加或更改增值稅的其他國家,服務器將計算所有貨幣的增值稅並添加到顯示價格、價格、顯示原始價格和原始價格中。因此,您不再需要與增值稅相關的工作。
Note
Google 支持在价格和原价不同的情况下显示原价。如果两个值相同,则该商品没有打折。
Apple 不提供 iconURL 值。
originalPrice 和 displayOriginalPrice 仅适用于 Google (v4 12.0.0 +) 和 Apple (v4 24.0.0 +)。如果价格值和原价值相同,则表示没有折扣状态。相反,如果两个值不同,由于正在打折,可以分别使用它们来显示折扣价格和原价。
要搜尋產品列表,請在IAPV4類別中呼叫getProductInfo()
方法,以接收產品列表和Lebi餘額的產品資訊。
以下是請求搜尋產品列表的範例代碼。
API 參考: hive .IAPV4.getProductInfo
API 參考: IAPV4 ::getProductInfo
API 參考: IAPV4.getProductInfo
API 參考: com .hive.IAPV4.getProductInfo
API 參考: IAPV4Interface .getProductInfo
API 參考: HIVEIAPV4::getProductInfo
Warning
未能调用 getProductInfo()
方法将无法在实现产品列表时利用可消耗产品的信息。
這要求遊戲客戶端直接實現返回結果 API 失敗的響應,例如 重試直到獲得成功回調 或 向用戶顯示錯誤彈出窗口(例如,市場不可用)。
有關結果 API 代碼的詳細信息,請參見 結果 API 代碼 - IAP v4。
Note
在 Windows 應用程式中使用 GOOGLE\_PLAYSTORE
市場進行 Google Play(Hive SDK v4 Unity Windows 23.0.0 或更高版本)時,第一次調用 IAPV4.getProductInfo
時,會顯示一個 Google 帳戶登錄畫面,讓應用程式用戶選擇用於支付產品的帳戶。這個登錄過程不是應用程式開發者實現的功能;它是由 Hive SDK 自動執行的。
如果用於支付的 Google 帳戶的身份驗證信息過期,Hive SDK 會自動執行重新身份驗證過程。
產品購買¶
在IAPV4類別中調用purchase()
方法,使用市場PID,這是一個在Apple App Store和Google Play Store上註冊的參數,以請求IAP v4上的產品購買。
以下是請求產品購買的示例代碼。
API 參考: hive .IAPV4.purchase
#include "HiveIAPV4.h"
FString MarketPid = TEXT("YOUR_PRODUCT_MARKET_PID");
FString IapPayload = TEXT("YOUR_CUSTOM_PAYLOAD");
FHiveIAPV4::Purchase(MarketPid, IapPayload, FHiveIAPV4OnPurchaseDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHiveIAPV4Receipt& Receipt) {
if (Result.IsSuccess()) {
//TODO: Request verification of receipt with received receipt
}
}));
API 參考: IAPV4 ::purchase
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
string marketPid = "{YOUR_PRODUCT_MARKET_PID}";
string iapPayload = "{YOUR_CUSTOM_PAYLOAD}";
IAPV4::purchase(marketPid, iapPayload, [=](ResultAPI const & result, IAPV4Receipt const & receipt) {
if (result.isSuccess()) {
// TODO: Request verification of receipt with received receipt
}
});
API 參考: com.hive.IAPV4.purchase
import com.hive.IAPV4
import com.hive.ResultAPI
val marketPid = "{YOUR_PRODUCT_MARKET_PID}"
val iapPayload = "{YOUR_CUSTOM_PAYLOAD}"
IAPV4.purchase(marketPid, iapPayload, object : IAPV4.IAPV4PurchaseListener {
override fun onIAPV4Purchase(result: ResultAPI, iapV4Receipt: IAPV4.IAPV4Receipt?) {
if (result.isSuccess) {
// call successful
}
}
})
API 參考: com .hive.IAPV4.purchase
API 參考: HIVEIAPV4::purchase:additionalInfo:handler:
#import <HIVEService/HIVEService-Swift.h>
NSString *marketPid = @"{YOUR_PRODUCT_MARKET_PID}";
NSString *iapPayload = @"{YOUR_CUSTOM_PAYLOAD}";
[HIVEIAPV4 購買: marketPid iapPayload: iapPayload handler: ^(HIVEResultAPI *result, HIVEIAPV4Receipt *receipt) {
if ([result isSuccess]) {
// TODO: 請求驗證收到的收據
}
}];
Note
支援的功能可能因操作系統/市場而異。欲了解更多詳情,請參閱支援功能的狀態。
使用 iapPayload
¶
在執行購買(purchase()
)或訂閱(purchaseSubscription
)方法時,遊戲公司可以將 iapPayload
作為參數傳遞。iapPayload
是由遊戲公司定義的購買元數據。例如,當用戶購買產品時,它可能包括購買時間、購買用戶信息、購買的遊戲角色信息、購買數量(消耗品)、購買令牌等。
如果 iapPayload
被作为参数传递,IAP 服务器将会 验证购买收据,将此 iapPayload
值与其对应的购买收据进行匹配,并通知游戏服务器。具体来说,iapPayload
值和与唯一收据密钥对应的 hiveiap_transaction_id
值被匹配并传输到游戏服务器。
利用購買收據和 iapPayload
配對可以解決許多問題。例如,可能會出現用戶購買商品時發生錯誤的情況,付款已完成但商品未交付。此時,如果執行 restore()
方法,您可以獲得該商品的購買收據。但是,由於這份收據不包含有關商品類型、購買時間和購買該商品的角色的信息,因此很難確定遊戲公司應該為用戶恢復哪個商品。然而,這些信息可以通過與購買收據配對的 iapPayload
知道,從而可以向用戶提供該商品。
Note
利用 iapPayload
,您可以分析濫用支付系統的用戶信息。
iapPayload
的最大大小為 20KB(UTF-8)。
支援的功能可能因操作系統/市場而異。欲了解更多詳情,請參閱支援功能的狀態。
Warning
當傳遞 iapPayload
時,建議對其進行加密。與收據不同,iapPayload
易受偽造和篡改的影響。
設定消耗品項目的購買數量¶
Google Play 商店允許用戶在單一交易中通過指定購物車中的數量來購買兩個或更多相同的應用內產品。如果您的 Google Play 控制台產品設置允許多數量購買,您的應用應該處理多數量購買並根據指定的購買數量交付項目。然而,多數量購買僅適用於可消耗的應用內產品,這些產品在消耗後可以再次購買。請勿為無法重複購買的產品啟用此功能。
Note
如果您對某個項目應用多數量購買,您可以在收據驗證響應中的 hiveiap_quantity
中檢查購買數量。
呼叫 purchase()
方法前的注意事項¶
- 如果在調用
purchase()
方法時因市場問題發送了 RESPONSE_FAIL 或 CANCELED 錯誤,請通知用戶購買過程中出現的錯誤。 - 如果用戶因市場問題被通知購買問題,請調用
restore()
方法以恢復購買。 - 如果在調用
purchase()
方法時發送了 NEED_RESTORE 錯誤,則購買被取消。要恢復購買,請調用restore()
方法。 - 如果在調用
purchase()
方法時計費系統嘗試進行離線支付或孩子請求父母代為支付,則發送 ITEM_PENDING 錯誤,該項目將變為待處理狀態。父母的代理購買在 Google Play 商店、亞馬遜和 Apple App Store 市場中受到支持。 - 如果成功進行離線支付或父母代替孩子進行支付,則通過 UserEngagement 發送
IAP_UPDATED
事件。 當通過 UserEngagement eventEnd 回調返回參數時,如果type
為 "subscription",則調用restoreSubscription()
,如果type
為空,則調用restore()
。可以通過調用這些方法來檢查已完成的收據。 - 要排除通知不可用購買的 NOT_SUPPORTED 錯誤,請參考 限制應用內購買的短語指南。
- 在桌面環境中通過 HIVESTORE 購買時,支付請求屏幕將在新窗口中顯示。
呼叫 hive.IAPV4.purchase(marketPid, null, onIAPV4PurchaseCB);
將立即返回一個響應,包含 ErrorCode:IAPSUCCESS=90 和 Code:IAPV4HiveStoreSuccess=-6110000,而不會有收據信息,通過 onIAPV4PurchaseCB
。根據 ErrorCode(或 Code),可以顯示有關物品分發資格狀態的指導消息。
- 對於在 Google Play 上的 Windows 應用程式(Hive SDK v4 Unity Windows 23.0.0 或更高版本)使用
GOOGLE\_PLAYSTORE
市場的情況,如果用於付款的 Google 帳戶的身份驗證信息過期,Hive SDK 會自動執行重新身份驗證過程。 - 對於在 Google Play 上的 Windows 應用程式(Hive SDK v4 Unity Windows 23.0.0 或更高版本)使用
GOOGLE\_PLAYSTORE
市場的情況,當用戶在應用程式中顯示的付款等待彈出窗口中按下確認按鈕,且付款完成未確認時,將通過onIAPV4PurchaseCB
返回ErrorCode:IAPSUCCESS=90
和Code:IAPV4PendingPurchase=-6100013
的響應。此響應並不表示付款失敗,而是由於內部錯誤或用戶未進行付款而無法確認付款完成。在這種情況下,不會返回收據,如果用戶在付款瀏覽器窗口中已完成付款,則可以通過IAPV4.restore
獲取收據。
購買錯誤代碼¶
錯誤代碼 | 描述 |
---|---|
NEED_INITIALIZE | 無法初始化 |
NETWORK | 網絡錯誤 |
NOT_SUPPORTED | 無法購買(設備上的應用內購買被拒絕等)。用戶設置了不可用的商店 |
INVALID_SESSION | 無效的購買會話 |
INVALID_PARAM | 無效的參數 |
IN_PROGRESS | 購買 API 正在進行中 |
ITEM_PENDING | 提示離線支付或孩子要求父母代為支付 |
CANCELED | 用戶取消 |
NEED_RESTORE | 需要恢復 API |
RESPONSE_FAIL | IAP 伺服器錯誤 |
限制應用內購買的短語¶
Korean | 앱 내購買功能已被阻止,無法進行購買。 請解除限制後再試。 (設定 > 螢幕使用時間 > 內容與隱私權限制 > iTunes 與 App Store 購買 > App 內購買) |
---|---|
English | You can't make a purchase because the in-app purchase feature has been blocked. Please unblock the feature and try again. (Settings > Screen Time > Content & Privacy Restrictions > iTunes & App Store Purchases > In-app Purchases) |
French | u ne peux pas effectuer l'achat car la fonction d'achat in-app a été bloquée. Débloque d'abord la fonction et essaie de nouveau. (Réglages > Temps d’écran > Restrictions relatives au contenu et à la confidentialité > Achats dans l’iTunes et l’App Store > Achats intégrés) |
German | Kauf nicht möglich, weil das In-App-Kauf-Feature gesperrt ist. Bitte entsperre es und versuche es erneut. (Einstellungen > Bildschirmzeit > Beschränkungen > Käufe im iTunes & App Store > In-App-Käufe) |
Japanese | App内の購入機能が制限されており、購入できません。 解除した後、再度お試しください。 (設定 > スクリーンタイム > コンテンツとプライバシーの制限 > iTunesおよびApp Storeでの購入 > App内課金) |
Chinese Simplified | 因App内购功能已关闭,无法进行购买。 请开启后再试。 (设置 > 屏幕使用时间 > 内容和隐私访问限制 > iTunes Store 与 App Store 购买项目 > App 内购买项目) |
Chinese Traditional | 因App內購功能已關閉, 無法進行購買. 請開啟後重新再試 (設定 > 螢幕使用時間 > 內容與隱私權限制 > iTunes 與 App Store 購買 > App 內購買) |
Russian | Покупка недоступна, т.к. на устройстве отключены встроенные покупки. Активируйте данную функцию и повторите попытку. (Настройки > Экранное время > Контент и конфиденциальность > Покупки в iTunes Store и App Store > Встроенные покупки) |
Spanish | No se puede realizar la compra porque la función de Compras en la app ha sido bloqueada. Favor de desbloquear la función y volver a intentar. (Ajustes > Tiempo de uso > Restricciones de contenido y privacidad > Compras en iTunes y App Store > Compras dentro de la app) |
Portuguese | Você não pode efetuar uma compra porque a função de compra do app foi bloqueada. Por favor, desbloqueie a função e tente novamente. (Definições > Tempo de ecrã > Conteúdo e privacidade > Compras na iTunes e App Store > Compras integradas) |
Indonesian | Pembelian tidak bisa dilakukan karena fitur pembelian In-App telah dibatasi. Silakan matikan pembatasan dan coba lagi. (Pengaturan > Durasi Layar > Pembatasan Konten & Privasi > Pembelian iTunes & App Store > Pembelian In-app) |
Turkish | Uygulama içi satın alma özelliği bloke edildiği için satın almayı yapamazsınız. Lütfen özelliğin blokajını kaldırıp tekrar deneyiniz. (Ayarlar > Ekran Süresi > İçerik ve Gizlilik Sınırlamaları > iTunes ve App Store Satın Alımları > Uygulama İçi Satın Alım) |
Vietnamese | Bạn không thể thực hiện giao dịch do tính năng Mua In-App đang bị tắt. Vui lòng bật tính năng và thử lại. (Cài đặt > Thời gian sử dụng > Bật giới hạn > Mua hàng iTunes & App Store > Mua In-app) |
Thai | คุณไม่สามารถซื้อได้เนื่องจากเมนูการซื้อของในแอพพลิเคชั่นถูกบล็อคอยู่ กรุณาปลดล็อคแล้วลองอีกครั้ง (การตั้งค่า > เวลาหน้าจอ > จำกัดเนื้อหาและความเป็นส่วนตัว > สินค้าที่ซื้อใน iTunes & App Store > การซื้อภายในแอพ) |
Italian | Non puoi effettuare l'acquisto perché la funzione di acquisti in-app è bloccata. Preghiamo di sbloccare la funzione e riprovare. (Impostazioni > Tempo di utilizzo > Contenuti e privacy > Acquisti su iTunes e App Store > Acquisti in-app) |
Arabic | .لا يمكنك إجراء عملية شراء لأن ميزة الشراء داخل التطبيق قد تم حظرها .الرجاء إلغاء حظر الميزة والمحاولة مرة أخرى (الإعدادات > مدة استخدام الجهاز > قيود المحتوى والخصوصية > الشراء من iTunes Store و App Store > الشراء من داخل التطبيق) |
通知購買撤回政策的短語¶
根據內容產業促進法,請在您的遊戲商店中公佈有關購買撤回的通知以及您的購買撤回政策的鏈接。對於iOS,如果在Apple對您的應用進行檢查過程中公佈了有關購買撤回的通知,這可能會成為拒絕審核您遊戲的原因。