2013-03-07 49 views
1

我已經遵循了使用應用程序內購買的一些教程,我得到了這一切工作。但有沒有可能在這個例子中安全地使用它:安全的應用程序內購買Android的

該應用程序是免費下載,並有一些聊天功能。它可以 每天發送100條消息。該應用程序可以發送額外的消息x每 年。

這裏的問題是:服務器如何知道用戶買了什麼東西?是否有谷歌服務使用和檢查?因爲通過允許應用向服務器發送消息「嘿,我剛買了這個」似乎是錯誤的。

回答

0

這個方法你會得到事務的迴應。

@Override 
    public void onRequestPurchaseResponse(RequestPurchase request, 
      ResponseCode responseCode) { 

如果responseCode爲RESULT_OK,表示成功事務。您可以參考this link

+0

我想檢查這個服務器端。如果有人紮根他的電話,他可以僞造這個。如果我可以使用某些Google服務在服務器上檢查它,它會檢查他是否真正付費。 – Klaasvaak 2013-03-07 11:56:06

+0

成功事務後,您可以在服務器上發送請求以使用webservice進行通知。 – 2013-03-07 12:14:00

+1

只需調用一個網絡服務,說「嗨,我買了這個東西」並不安全。我的網絡應用程序是否沒有可以調用的Google服務來檢查用戶是否真的爲此付費,而不是讓客戶端去做。 – Klaasvaak 2013-03-07 13:03:24

1

作爲IAP的一部分,您需要使用BroadcastReceiver從Google獲取通知。其中一個通知是com.android.vending.billing.PURCHASE_STATE_CHANGED。該通知包含數據塊和簽名。將兩者都傳輸到您的服務器。 Google Play會爲您提供一個公鑰,然後您可以使用該公鑰驗證服務器上數據塊的簽名(在php中,openssl_verify的作品)。一旦在服務器上驗證了數據,就可以解析數據塊(json)以獲取訂單列表,包括其產品標識符,告訴您用戶購買了什麼。從那裏,你自己的協議將不得不包括一個設備/用戶/合同標識符來對服務器進行驗證。很難在不瞭解計劃的情況下就此提出建議。

0

您可以在收到服務後,將有關購買的信息轉達給您的服務器。

您可以使用openssl_verify ($data, $signature, $key)

數據和簽名都在您的結果從服務中獲得。密鑰是您可以在開發人員控制檯中找到的公共RSA密鑰。