LINUX.ORG.RU

Google in-app billing v3 - как восстановить покупки?

 ,


0

1

Пытаюсь запросить список того, что юзер уже купил на старте приложения, но после переустановки приходит пустой массив. Это может быть из-за того, что приложение в альфа-версии и сижу с тестового аккаунта, или нужно делать как-то иначе?

mIabHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
                @Override
                public void onIabSetupFinished(IabResult result) {
                    if(result.isSuccess()) {
                        mIabHelper.queryInventoryAsync(true, new IabHelper.QueryInventoryFinishedListener() {
                            @Override
                            public void onQueryInventoryFinished(IabResult result, Inventory inv) {
                                boolean somethingNeedToBeRestored = false;
                                for(int i = 0; i < PURCHASES_COUNT; i++) {
                                    String currentKey = PageAuthors.SKU_PREMIUM + i;
                                    if(inv.hasPurchase(currentKey) && !prefs.contains(currentKey)) {
                                        somethingNeedToBeRestored = true;
                                        SharedPreferences.Editor editor = prefs.edit();
                                        editor.putString(currentKey, currentKey);
                                        editor.commit();
                                    }
                                }
                                if(somethingNeedToBeRestored)
                                    simpleAdapter.notifyDataSetChanged();
                            }
                        });
                    }
                }
            });

★★★★

Аунта скорее глючит, на ЛОр была уже тема про покупки, наборы; но, там было про много и хоть что-то держалось 5-ть часов- неделю. А, в этой теме, ничего- как-то странно,.

anonymous
()

На старте нужно сообщить гугелю список non-consumable записей. В ответ гугель даст по ним информацию (цена с локализацией, локализованное описание, была ли эта покупка совершена).

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Добавил в параметр queryInventoryAsync arrayList с id покупок, в результате пришёл inventory с инфой по ним, но опять же пустым списком покупок. Хотя до того ошибок при покупке не было. Похоже, на тестовых аккаунтах они не сохраняются. Хотя в документации этого не нашёл

wingear ★★★★
() автор топика
Ответ на: комментарий от wingear

У меня все работало на тестовых аккаунтах. Правда в то время тестовые аккаунты были не такими удобными, как сейчас.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Может быть, не осуществляются покупки? Вроде приходит success на всех этапах. Сейчас так обрабатывается:

mHelper = new IabHelper(PageAuthors.this, base64EncodedPublicKey);
        mHelper.enableDebugLogging(true);

        onConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {
            @Override
            public void onConsumeFinished(Purchase purchase, IabResult result) {
                if(result.isSuccess()) {
                    SharedPreferences.Editor editor = storage.edit();
                    editor.putString(itemIndex, itemIndex);
                    editor.commit();
                    startPremiumContentActivity(poetryIndex);
                }
            }
        };

        queryInventoryFinishedListener = new IabHelper.QueryInventoryFinishedListener() {
            @Override
            public void onQueryInventoryFinished(IabResult result, Inventory inv) {
                if (inv.hasPurchase(itemIndex)) {
                    mHelper.consumeAsync(inv.getPurchase(itemIndex), onConsumeFinishedListener);
                }
            }
        };

        mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
            public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
                if (result.isSuccess()) {
                    mHelper.queryInventoryAsync(queryInventoryFinishedListener);
                }
                if (result.isFailure()) {
                    if(result.getResponse() == 7) {
//already purchased
                        SharedPreferences.Editor editor = storage.edit();
                        editor.putString(itemIndex, itemIndex);
                        editor.commit();
                        startPremiumContentActivity(poetryIndex);
                    }
                }
            }
        };

        mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
            public void onIabSetupFinished(IabResult result) {
                if (!result.isSuccess()) {
                    return;
                }
                mHelper.launchPurchaseFlow(PageAuthors.this, itemIndex, REQUEST_CODE, mPurchaseFinishedListener);
            }
        });

wingear ★★★★
() автор топика
Ответ на: комментарий от wingear

А почему вы не хотите почитать work flow покупки, описанный в руководстве от гугеля? Там же есть подробное описание действий, которые нужно предпринять.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Да, оказывается, это может быть полезным - оказывается, consume убирает покупку из инвентаря:)

wingear ★★★★
() автор топика
Ответ на: комментарий от wingear

Да, оказывается, это может быть полезным - оказывается, consume убирает покупку из инвентаря:)

Ну вот, а говорят что гугель стал бесполезен :)

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.