2014-02-17 2 views
2

Мне нужно получить все предметы, купленные в биллинге приложений, из игры Google. Я могу видеть функцию, которую я хочуКак получить все покупки от Google в биллинге приложений?

getAllOwnedSkus() 

в указанном ниже классе предоставлен google, но это видимость не является общедоступной. Я мог бы просто изменить его на публике, но должен быть другой способ получить все принадлежащие пользователю skus?

public class Inventory { 
    Map<String,SkuDetails> mSkuMap = new HashMap<String,SkuDetails>(); 
    Map<String,Purchase> mPurchaseMap = new HashMap<String,Purchase>(); 

    Inventory() { } 

    /** Returns the listing details for an in-app product. */ 
    public SkuDetails getSkuDetails(String sku) { 
     return mSkuMap.get(sku); 
    } 

    /** Returns purchase information for a given product, or null if there is no purchase. */ 
    public Purchase getPurchase(String sku) { 
     return mPurchaseMap.get(sku); 
    } 

    /** Returns whether or not there exists a purchase of the given product. */ 
    public boolean hasPurchase(String sku) { 
     return mPurchaseMap.containsKey(sku); 
    } 

    /** Return whether or not details about the given product are available. */ 
    public boolean hasDetails(String sku) { 
     return mSkuMap.containsKey(sku); 
    } 

    /** 
    * Erase a purchase (locally) from the inventory, given its product ID. This just 
    * modifies the Inventory object locally and has no effect on the server! This is 
    * useful when you have an existing Inventory object which you know to be up to date, 
    * and you have just consumed an item successfully, which means that erasing its 
    * purchase data from the Inventory you already have is quicker than querying for 
    * a new Inventory. 
    */ 
    public void erasePurchase(String sku) { 
     if (mPurchaseMap.containsKey(sku)) mPurchaseMap.remove(sku); 
    } 

    /** Returns a list of all owned product IDs. */ 
    List<String> getAllOwnedSkus() { 
     return new ArrayList<String>(mPurchaseMap.keySet()); 
    } 

    /** Returns a list of all owned product IDs of a given type */ 
    List<String> getAllOwnedSkus(String itemType) { 
     List<String> result = new ArrayList<String>(); 
     for (Purchase p : mPurchaseMap.values()) { 
      if (p.getItemType().equals(itemType)) result.add(p.getSku()); 
     } 
     return result; 
    } 

    /** Returns a list of all purchases. */ 
    List<Purchase> getAllPurchases() { 
     return new ArrayList<Purchase>(mPurchaseMap.values()); 
    } 

    void addSkuDetails(SkuDetails d) { 
     mSkuMap.put(d.getSku(), d); 
    } 

    void addPurchase(Purchase p) { 
     mPurchaseMap.put(p.getSku(), p); 
    } 
} 

но видимость не является общедоступной? Я могу просто изменить это, но есть ли другой путь?

ответ

4

Вы говорите о приложении IabHelper от Google. Это не официальный API, а просто пример того, как вы можете использовать In-app Billing API. Вы можете изменить это приложение так, как хотите. Есть только один недостаток в его изменении. Если Google выпустит новое обновление для этого приложения, вам нужно будет объединить изменения в свой код. Чем меньше у вас изменений, тем легче будет слияние. Способ изготовления public не имеет большого значения в этом отношении.

Смежные вопросы