2013-01-17 31 views
0

我的應用程序是免費的,並且使用應用程序內購買,我想啓用其他功能。爲此,我設想生成一個取決於當前用戶和當前應用程序版本的解鎖代碼。我需要第一個,以便相同的密鑰不能與其他人的安裝一起工作(但可用於同一用戶擁有的多個設備)。我可能不需要第二個,但它會給未來更多的靈活性。android需要谷歌用戶ID作爲解鎖功能的一部分方法

要做到這一點,我需要某種谷歌用戶ID。有這樣的事嗎?如果是這樣,我怎麼得到它?

謝謝。

回答

0

Google會爲您處理一些此類問題。它將爲每個用戶提供一個設備相關密鑰。你的任務是

1)正確驗證密鑰服務器

2)確保從服務器返回一個特定於設備的授權值,因此用戶不能只是複製周圍的數據文件上。

3)在設備上,使用授權值啓用事物。

驗證密鑰很簡單,但請確保在服務器上執行此操作。問題在於識別設備。谷歌及其合作伙伴在這方面做了一些努力。 Tim Bray的博客文章http://android-developers.blogspot.ca/2011/03/identifying-app-installations.html討論了這個問題。儘管他有所保留,我仍建議使用ANDROID_ID。我懷疑他的另一項提案的安全性,但沒有進行全面分析。絕對遠離任何網絡相關的(IMSI,IMEI,ESN,...)。我還緩存使用的設備標識符,並確保它不會更改。

就我個人而言,我在我的應用程序中爭奪瞭解鎖功能所需的數據。當我得到有效的交易時,我計算一個可與設備ID結合的密鑰來解鎖數據。它遠非完美,但似乎工作。我接受我會被黑客攻擊 - 我只是不想讓它變得明顯。

如果你想要一個每個版本的密鑰,那麼你需要做一個RESTORE_TRANSACTIONS並在版本改變的任何時候在服務器重新驗證。

+0

給我一點時間來研究這一切。我希望在沒有服務器的情況下(至少現在)做到這一點,但我認爲這樣做會更好,因爲它很難破解應用程序以啓用這些功能。這是你的意思嗎? –

+0

如果您在設備上進行操作,則會有一系列新的攻擊打開。在某些平臺上,存在黑客實用工具,完全基於人們將DNS從商店重定向到遠離商店和篡改價值。我不記得Google Play是否是其中之一,但我不明白爲什麼它不會。我知道我有人試圖對付我的應用程序,並失敗,因爲我有一臺服務器。當然,我不知道有多少嘗試另一種方式,併成功:) – DrC

+0

一個小的評論 - 我很偏執 - 我在不同的託管公司有兩臺不同的服務器。如果出現故障,我不擔心,因爲我在應用程序中放置了故障轉移代碼。醜陋,但它讓我在晚上睡覺(並使用最便宜的託管公司)。 – DrC

0

我想提出另一種方法 - 沒有更好,只是不同。使用標誌來指示是否允許或不運行升級功能。定期使用應用內付款API驗證用戶是否購買了升級。如果不是,則重置標誌。

用戶可以破解該標誌,但遲早會被重置,阻止使用該功能。

要真正打破此方法,用戶必須對代碼進行逆向工程並繞過檢查標誌。我懷疑大多數人會爲此感到困擾,但我知道什麼?

相關問題