2014-01-11 47 views
4

我在Android的Java應用程序中使用Google LVL和Google Inapp Billing API ver 3。當然,我使用谷歌建議的Google extras和IAP jar(略微修改)的LVL庫項目。Android LVL和InAppBilling:如何選擇當前用戶帳戶進行購買?

verifyLicense中的LVL庫LicenseValidator接收到帶有用戶標識的ResponseData。 據Google文檔稱,這是一個唯一的用戶ID,代表用戶用於購買的Google帳戶。 因此,我假設(並確保在測試中)在用戶使用同一個Google帳戶登錄的所有設備上它是相同的字符串(例如,「ANlOH < ...> ppA ==」)。

所以這裏是我的iap購買保護計劃的簡稱。


在購買應用程序發送用戶ID到我的服務器之前。它從用戶標識生成加密的有效載荷並將其發回。應用程序發出購買請求並將有效載荷放入其中。應用程序收到由Google簽署的收據,該收據持有相同的有效內容。應用程序使用當前用戶標識將此收據發送到我的服務器。服務器進行簽名和其他檢查,比較來自有效負載和來自發件人的用戶ID,如果一切正常,則將iap項目的文件發送到應用程序。

在另一種情況下,當用戶重新安裝應用程序到這個或其他設備,應用程序會從InAppBilling屬於他的收據,將它們發送到我的服務器與當前用戶ID。服務器執行相同的檢查,並且 - 如果一切正常 - 將所有需要的文件發送到應用程序。


這種差異很小的方法在其他平臺上效果很好。但最近我在Android應用程序中遇到了一些奇怪的問題。 我的服務器記錄收據檢查問題,我發現奇怪的錯誤:用戶的一個用戶ID發送正確的簽名收據屬於另一個用戶ID(有效負載持有另一個用戶ID)。當我開始調查時,我發現其中一個奇怪的「黑客攻擊」消息屬於我的測試設備之一,而其他一些屬於真實用戶(根據收據中的訂單id)屬於 。

此測試設備與Android 4.4.2有幾個谷歌帳戶添加設置。 以前我確定Google使用第一個帳戶。我看到這樣的日誌消息:

InAppBillingUtils.getPreferredAccount: com.mypackage.appname: Account from first account - [jbC...FgH] 

但現在我看到有時LVL不是使用第一個帳戶,而是使用另一個帳戶。我在logcat中看到這樣的消息:

InAppBillingUtils.pickAccount: smpxg.mythdefdf: Account determined from library ownership - [boL...M5E] 

此外,全新安裝我的應用程序後InAppBilling退回收據一個帳戶,但LVL給了另一個用戶ID!但是這種行爲並不穩定。例如,現在我看到LVL和InAppBilling都認爲第二個帳戶是我的主要帳戶,並按預期工作。

我認爲這兩個庫會並排工作,但看起來我錯了。很顯然,當應用程序發送屬於用戶標識「... yUQ」的收據以及當前使用標識「... ppA」到服務器時,它拒絕發送購買的內容。他是對的。

如果用戶可以更改用於購買的當前帳戶,我只是在常見問題解答中添加了這個技巧。但我看不到在設置中手動選擇它的方法。另外,系統以某種方式隨機選擇它!讓事情順利進行的唯一方法是讓用戶從主設備上刪除除主設備以外的所有帳戶,但這是一個糟糕的解決方案。

當用戶購買iap項目登錄到一個帳戶,然後切換到另一個帳戶,他應該不會看到購買的項目。這是一種可預測的行爲,就像購買應用程序一樣。但他甚至不知道當前使用了哪個賬戶!

AFAIK,沒有辦法從InAppBilling服務中獲取它用於購買的谷歌用戶標識。 但即使我可以 - 隨着系統隨機更改用戶ID使iap項目出現並不時消失:)

看起來像谷歌建議使用開發人員有效負載的保護,但不給任何穩定可用於識別特定帳戶的ID。

所以我的問題是:

  1. 有誰遇到這種奇怪的帳戶切換?
  2. 我怎樣才能確定哪個帳戶是最新的?
  3. 有什麼辦法可以同步LVL和InAppBilling賬戶 的選擇?任何解決方法?

提前致謝!

+0

我在日誌和應用程序內購買時出現同樣的錯誤對話框無法彈出。你有答案嗎? –

回答

0

我還沒有了你的問題一個確切的經驗,但是這可能是有些相關

按照In app billing文檔

如果設備有多個帳戶,購買將進行下載該應用程序的帳戶。如果沒有帳戶下載該應用程序,則購買是使用第一個帳戶進行的。用戶可以通過展開購買對話框來確認正在進行購買的帳戶。

+1

他們說謊。或者它應該如何工作,但在Android中有錯誤。成千上萬的錯誤。 – Tertium

+0

@Tertium:你能解決這些情況嗎? –

+0

只有解決方法 - 服務器端的lvl id緩存和id euristics。 – Tertium

相關問題