2017-05-11 30 views
1

在Android上,我正在嘗試瞭解如何在應用程序採購中升級我的訂閱。所以假裝我有3個訂閱類型1,2和3層。我用這個方法getBuyIntent購買我的第一個訂閱層1,然後這個方法返回一個包含RESPONSE_CODE鍵和BUY_INTENT鍵的包。已解決的IAP嘗試通過getBuyIntentExtraParams未返回BUY_INTENT密鑰嘗試升級訂閱的Android問題

然後,使用該包,我做了一個bundle.getParcelable(「BUY_INTENT」);它返回一個PendingIntent並且一切都很好。

但是,當我要升級,從1級到2級,我需要根據使用此方法getBuyIntentExtraParams這個https://developer.android.com/google/play/billing/billing_reference.html#getBuyIntent

當我使用getBuyIntentExtraParams,返回的包不包含BUY_INTENT關鍵,但它返回INAPP_PURCHASE_ITEM_LIST,INAPP_PURCHASE_DATA_LIST和INAPP_DATA_SIGNATURE_LIST鍵。

INAPP_PURCHASE_ITEM_LIST是= [「product.id.name.tier1」]

所以它似乎像getBuyIntentExtraParams正在恢復你已經買了..這是非常相似的方法getPurchases()。

我無法對此捆綁包執行bundle.getParcelable(「BUY_INTENT」),因爲它沒有此密鑰。我注意到,在谷歌文檔它說,getBuyIntentExtraParams是getBuyIntent的變體,所以我假設getBuyIntentExtraParams應該返回一個BUY_INTENT鍵。

所以我想知道我該如何正確使用這種方法?我注意到,有有關的文檔谷歌的一個問題:https://issuetracker.google.com/issues/37140925

這裏是我的代碼:

ArrayList中的SKU =新的ArrayList();

skus.add(「product.id.name.tier1」);

Bundle extraBundle = new Bundle();

extraBundle.putStringArrayList(「skusToReplace」,skus);

getBuyIntentExtraParams(7,「app.package.name」,「subs」,「product.id.name.tier2」,DEVELOPER_PAYLOAD,extraBundle);

注意第三個參數「subs」應該是第四個參數「product.id.name.tier2」所在的位置,反之亦然。但是,當我這樣做時,它抱怨並且說它不知道什麼項目類型是product.id.name.tier2。所以我認爲該文件是不正確的。

PS:我也試圖把6而不是7(API版本)沒有運氣

我想我的主要問題是我怎麼使用GetBuyIntentExtraParams不同於getBuyIntent?

我使用sdk分和目標19 btw。

我也注意到我沒有在我的InAppBillingService.aidl文件 isBillingSupportedExtraParams中看到這個。

更新:

我將此添加到我的InAppBillingService中。aidl文件:

Bundle getBuyIntentToReplaceSkus(int apiVersion,String packageName, in List oldSkus,String newSku,String type,String developerPayload);

然後我打電話,而不是getBuyIntentExtraParams,它的工作!

我只是想知道這是正確的方法來調用?

回答

0

我可以確認getBuyIntentToReplaceSkus是用於升級和降級訂閱的正確方法。