2011-04-04 58 views
24

我有連接到Android應用程式內計費幾個問題:應用內結算的安全性和設計問題

  1. 是否有可能實現從非市場應用程序購買?我知道這將是一個漏洞,但我沒有機會發現是否可能。

  2. 如何獲得特定產品的購買狀態?據我瞭解,可以使用RESTORE_TRANSACTIONS請求完成,但不建議經常使用。這不是一個理論問題。我的應用程序允許用戶使用應用內結算購買內容。內容可以從服務器上下載,服務器只有在購買內容時才允許內容下載。但是,如果沒有使用Android Market簽名的響應,它無法檢查是否購買了內容。

  3. 我該如何從Android Market獲得物品的價格和描述?似乎我知道答案,而且「這是無法完成的」,但也許我錯了。有可能檢索物品的價格將是非常有用的。

這對我來說非常有趣,您是如何解決/將要在您的應用程序中解決這些問題的。任何這些問題的答案將不勝感激。

回答

21

爲了:

1-沒有。應用內結算流程是Market的一部分。如果應用程序來自其他地方,市場無法驗證應用程序的來源/真實性。

2-您有責任存儲特定產品的購買狀態。來自doc

您必須設置數據庫或其他一些機制來存儲用戶的購買信息。

RESTORE_TRANSACTIONS應該保留給設備上的重新安裝或首次安裝。

3-不幸的是,在這個時候你是對的。提交功能請求!

與此同時,一種選擇是建立一個帶有appengine的網站,在那裏存儲您所有內容&定價的清單,然後手動同步在您的appengine服務器上列出的價格與市場中更新的價格。然後讓您的Android應用程序從AppEngine服務器上獲取數據。這比將價格值硬編碼到應用程序本身要好得多,因爲您不需要每個人都立即更新應用程序,以便在您更改內容時查看準確的定價。唯一需要注意的是,如果用戶位於不同的國家/地區,應用內結算信息會以其原生貨幣顯示近似價格,而且無法準確確定向他們顯示的價格。

相關信息,Android開發者倡導者之一正在談論IO中的LVL/IAP,名爲「使用許可證驗證庫,應用內結算和App Engine來阻止盜版和阻止吸血鬼」。 - 當他們在網站上發佈會議視頻時,一定值得一看。

+0

感謝您的回答!我還有一些問題。 1)如果我的應用程序反編譯,更改並重新編譯會怎麼樣?那麼這將是一個非市場應用程序。應用內結算是否會停止運作?2)當你在數據庫中存儲購買信息時,不可能有安全的購買計劃。所以,我正在開發一個應用程序,從服務器接收許可證文件並在本地進行檢查。我的服務器需要一些簽名數據才能生成許可證。我不能只是要求它提供許可證,因爲這會成爲服務器的漏洞。我應該如何使用當前的應用內結算實現來實現? – Michael 2011-04-13 19:31:21

+0

市場根據您在將應用上傳到市場時用於簽署應用的密鑰進行簽名檢查。由於修改後的版本不會使用密鑰進行簽名,因此市場會拒絕它 - 但是,沒有什麼能夠阻止確定的攻擊者修改.apk文件,從而完全跳過IAP進程並假定您已經購買了所有內容。 。我提供的鏈接有一個「安全」部分的鏈接,涵蓋了對這類事情的保護。要回答第二個問題,請查看LVL(許可證驗證庫)。這應該涵蓋你的需求。 – 2011-04-13 19:53:49

+0

我使用應用內結算購買從服務器下載的內容。所以,即使.apk被修改,內容也不能在沒有購買的情況下下載。即使它被複制,它也不能在沒有許可證文件的情況下使用。當然,許可證驗證也可以修改,但這是另一個問題。我不確定Android Market是否檢查應用程序的簽名,但我更喜歡它。關於文檔,我閱讀了所有應用內賬單文檔和樣本的所有源代碼。但是我所問的事情並沒有涵蓋在那裏。 LVL不會幫助我,因爲它不能用於銷售內容。 – Michael 2011-04-13 20:42:35