簡體   English   中英

如何使用Java(Servlet)驗證針對應用內結算Android Market的簽名數據

[英]how can I verify signed data coming for In-App Billing Android Market using Java (Servlet)

在為Android應用程序實施應用內結算時,我遇到了一個問題。

讓我先解釋一下這個場景
我們有一個內容服務器(數據服務器),其中包含產品列表。
當用戶從列表中選擇一個時,他就可以購買它。
使用我的測試帳戶輸入信用卡詳細信息后,購買邏輯運行完美。
在回報中,我在Android設備中獲得了簽名數據。

我的問題是
1.我是否必須在Android設備中驗證簽名數據 ,然后將一些信息或數據發送到內容服務器,然后內容服務器發送產品(我認為這可能不太好,因為服務器端沒有流量來驗證請求是否有效或更准確;簽名數據是否由谷歌市場生成 )?
2.如果我必須在服務器端驗證數據,我該怎么做? 我是否必須將其發送到Google市場 (如果是,使用哪種網絡服務或API)?

請幫我糾正這個。
提前致謝。

對於您的第二個問題,哈希(例如:MD5,SHA)數據並將哈希與數據一起發送到服務器。 在服務器上,創建數據的哈希並比較哈希以驗證它們。

要回答您的問題,您必須首先使用某種ID創建應用內商品,然后將其綁定到服務器上的數據庫中。 使用webservices,然后查詢數據庫並查看應用程序內ID是否與產品數據庫中的ID匹配。 此外,您可以使用安全Nonce和簽名進行驗證。 大多數情況下,您讓谷歌處理這些產品,因此您需要在數據庫之后對應用內產品進行建模。 如果您的產品太多,那么您將不得不以創建移動網站的標准方式處理它....

編輯:當您提出請求(即購買)時,首先執行REQUEST_PURCHASE,然后啟動市場返回的PendingIntent。 然后你就可以處理Market發送的廣播意圖了。 您在請求中指定了四個密鑰,然后發出購買請求:

  Bundle request = makeRequestBundle("REQUEST_PURCHASE");
  request.putString(ITEM_ID, mProductId);

  // Note that the developer payload is optional.
  if (mDeveloperPayload != null) {
      request.putString(DEVELOPER_PAYLOAD, mDeveloperPayload);
      Bundle response = mService.sendBillingRequest(request);
      // Do something with this response.
  }

然后你必須使用PendingIntent來啟動checkoutUI(小心1.6到2.0的差異,其中1.6要求它與Activity分開啟動)。 看一下Google示例中的PurchaseObserver.java。

“Android Market應用程序發送RESPONSE_CODE廣播意圖,提供有關請求的錯誤信息。如果請求未生成錯誤,則RESPONSE_CODE廣播意圖返回RESULT_OK,表示請求已成功發送。(要清楚,a RESULT_OK響應並不表示請求的購買成功;它表示請求已成功發送到Android電子市場。)“

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM