2014-09-22 407 views
1

我不確定如何在用戶想要繼續進行應用內購買時設置開發人員負載字段。這種情況如下:開發人員負載

  1. 非消耗品(如:解鎖高級功能)
  2. 沒有服務器後端可用(我只能做局部檢查)
  3. 沒有用戶登錄/密碼可用

關於第三點,我建議不要求用戶輸入其電子郵件或任何其他類型的信息。

回答

1

您需要生成一個隨機字符串,任何隨機字符串都會執行。例如,一個選擇是使用設備ID:

String deviceId = Settings.Secure.getString(context.getContentResolver(), 
              Settings.Secure.ANDROID_ID)) 

比你把它提供給IAB API作爲getBuyIntent對IInAppBillingService最後一個參數:

public android.os.Bundle getBuyIntent(int apiVersion, java.lang.String packageName, java.lang.String sku, java.lang.String type, java.lang.String developerPayload) throws android.os.RemoteException; 

,你讀回在onActivityResult() :

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    ... 
    String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA"); 

購買數據是從應用程序內的計費API返回的數據,構成爲JSON:

JSONObject o = new JSONObject(purchaseData); 
String developerPayload = o.optString("developerPayload"); 

您需要驗證在onActivityResult中返回的developerPayload是您在getBuyIntent中提供的那個。如果您使用的是任意字符串,則可以將其存儲在調用之間的應用程序共享首選項中。

+2

嗯,但如果用戶卸載應用程序並重新安裝它,或者同一用戶有另一個他想要運行該應用程序的手機,則隨機字符串或設備ID將不起作用。請注意,我在談論非消耗品。 – 2014-09-22 18:12:09

+0

如果您使用deviceId,如上所示,則取決於在同一設備上的卸載和重新安裝,因爲deviceId保持不變。如果您希望允許用戶在不同的設備上安裝應用程序,則必須將用戶信息考慮在內,並將其存儲在服務器上 - 這是您不希望看到的。 – ziv 2014-09-22 18:17:53

+0

@MarcoMasci:您生成的_developerPayload_僅適用於該交易。您可以爲第二筆購買產生一個不同的字符串作爲_developerPayload_。如果同一用戶(gmail Id)有另一部電話,則可以使用_getSkuDetails()_獲取從該gmailId購買的所有項目。請參閱[這裏](http://developer.android.com/google/play/billing/billing_reference.html) – Hemanth 2014-09-22 18:44:21