跳轉至

查看产品列表和购买

搜尋產品列表

當用戶進入應用內商店時,調用產品列表搜索API。如果用戶請求產品列表,則返回包含產品信息的IAPV4Product類。

產品列表和詳細資訊

欄位名稱 描述
marketPid 在應用內商店註冊的固有產品ID
currency 貨幣類型(例如:KRW/USD)
price 產品價格
title 產品標題
displayPrice 產品價格的字串類型(例如:$100.00) 更多
productDescription 產品細節
originalMarketJson 從市場接收到的產品資訊
使用 Google 訂閱 V2 時,可以使用 originalMarketJson 檢查在 Google Play Console 中定義的產品資訊
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

using hive;    
    IAPV4.getProductInfo((ResultAPI result, List<IAPV4Product> productInfoList, int balance) => {    
         if (result.isSuccess()) {    
            // call successful    
        }    
});
#include "HiveIAPV4.h"

FHiveIAPV4::GetProductInfo(FHiveIAPV4OnProductInfoDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TArray<FHiveIAPV4Product>& ProductInfoList, uint32 Balance) {
        if (Result.IsSuccess()) {
                // call successful
        }
}));

API 參考: IAPV4 ::getProductInfo

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    IAPV4::getProductInfo([=](ResultAPI const & result, vector<IAPV4Product> const & productInfoList, unsigned int balance) {    
         if (result.isSuccess()) {    
         // call successful    
         }    
});

API 參考: IAPV4.getProductInfo

import com.hive.IAPV4    
    import com.hive.ResultAPI    
    IAPV4.getProductInfo(object : IAPV4.IAPV4ProductInfoListener {    
         override fun onIAPV4ProductInfo(result: ResultAPI, iapV4ProductList: ArrayList<IAPV4.IAPV4Product>?, balance: Int) {    
             if (result.isSuccess) {    
                 // call successful    
             }    
         }    
})

API 參考: com .hive.IAPV4.getProductInfo

import com.hive.IAPV4    
    import com.hive.ResultAPI    
    IAPV4.INSTANCE.getProductInfo((result, iapV4ProductList, balance) -> {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});

API 參考: IAPV4Interface .getProductInfo

import HIVEService    
    IAPV4Interface.getProductInfo() { result, productInfoList, balance in    
        if result.isSuccess() {    
            // call successful    
        }    
}

API 參考: HIVEIAPV4::getProductInfo

#import <HIVEService/HIVEService-Swift.h>    
    [HIVEIAPV4 getProductInfo: ^(HIVEResultAPI *result, NSArray<HIVEIAPV4Product *> *productInfoList, NSUInteger balance) {    
         if ([result isSuccess]) {    
            // call successful    
         }    
}];
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

using hive;    
    String marketPid = "{YOUR_PRODUCT_MARKET_PID}";    
    String iapPayload = "{YOUR_CUSTOM_PAYLOAD}"    

    IAPV4.purchase(marketPid, iapPayload, (ResultAPI result, IAPV4Receipt receipt) => {    
    if (result.isSuccess()) {    
             // TODO: Request verification of receipt with received receipt    
         }    
});
#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

import com.hive.IAPV4;    
    import com.hive.ResultAPI;    
    String marketPid = "{YOUR_PRODUCT_MARKET_PID}";    
    String iapPayload = "{YOUR_CUSTOM_PAYLOAD}";    
    IAPV4.INSTANCE.purchase(marketPid, iapPayload, (result, iapV4Receipt) -> {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});

API 參考: HIVEIAPV4::purchase:additionalInfo:handler:

import HIVEService    
    let marketPid = "{YOUR_PRODUCT_MARKET_PID}"    
    let iapPayload = "{YOUR_CUSTOM_PAYLOAD}"    

    HIVEIAPV4.purchase(marketPid, iapPayload: iapPayload) { result, receipt in    
         if result.isSuccess() {    
             // TODO: Request verification of receipt with received receipt    
         }    
}

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_FAILCANCELED 錯誤,請通知用戶購買過程中發生錯誤。
  • 如果因市場問題而通知用戶購買問題,請調用 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=90Code: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=90Code: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 구입 > 앱 내 구입)
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對您的應用進行檢查過程中公開了購買撤回的通知,這可能會成為拒絕審核您遊戲的原因。