6

我已經在我的應用程序中使用計費服務實現了應用程序購買(託管),當用戶想要購買物品時,他將做出購買請求,即使用戶已經購買了該物品也需要互聯網。所以爲了方便用戶,我正在這樣做,如果用戶已經購買了該項目,那麼值將被保存在共享的前綴中。並且當用戶點擊該特定項目時,首先它將檢查共享前綴。價值,無論用戶是否已經購買物品,如果不是,則去購買請求,否則顯示他/她的物品。 我的問題是,這是安全的方式?或者我還要做別的事情?Android應用程序內購買檢查買家離線

回答

8

這並不安全。我會阻止你以這種方式實施這樣的檢查。你應該採用標準方法並使用getPurchases()方法。您可以隨時(甚至離線)調用此方法,並且如果用戶已購買,它們將從該方法返回。以下是一個示例代碼:

IInAppBillingService service; // initialize it first 

Bundle response = service.getPurchases(3, "you app package", "inapp", null); 
int responseCode = response.getInt(KEY_RESPONSE_CODE); 
if (responseCode == RESPONSE_OK) { 
    ArrayList<String> purchases = response.getStringArrayList(KEY_INAPP_PURCHASE_ITEM_LIST); 
    ... 
} 

您需要驗證購買是否簽署了正確的證書並且購買狀態未被取消。但是這比在共享屬性中存儲數據更安全。這種方法的另一個優點是,用戶重新安裝應用程序後,所有購買也將在那裏自動提供。

+0

「您可以致電這種方法在任何時候(甚至是離線)「---它怎麼會起作用? – Zotyi

1

該技術的完整示例在TrivialDrive示例應用程序中,它適用於我,但是我在考慮離線情況。 Google Play應用緩存了購買內容,並對getPurchases(3,「pkg」,「inapp」,null)進行了脫機響應,但這種方式無限期地運行或者存在類似於此緩存的超時時間...

+0

我試過使用ionic2 inapp插件。它脫機工作,但是當我重新啓動設備時,它會發生連接錯誤!這意味着緩存有一些限制! –