12

私のプロジェクトで変更する際にv3サンプルファイルを確認すると、正常に機能します。しかし、私の友人は、Wi-Fiをオフにして機内モードをオンにすることでコードをテストしました。これにより、アプリ内インベントリをクエリできなくなるようです。

// Listener that's called when we finish querying the items and subscriptions we own
private final IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
    @Override
    public void onQueryInventoryFinished(IabResult result, Inventory inventory) {

        if (result.isFailure()) {
            // STOPS here and doesn't continue on with no network connection
            return;
        }

        ......
    }
};

最初の購入が成功した後、v3はそれをローカルにキャッシュに保存するので、チェックするために常にネットワーク接続を持っている必要はないと思いました。他の誰かがこの問題に遭遇しましたか?私は完全に明白な何かを見逃していることを願っています、またはこれがそれが機能することになっている方法であるかどうか。

4

4 に答える 4

8

私は答えを見つけたかもしれないと思います。次のv3のTrivialDriveExampleでは、mHelper.startSetup()関数でqueryInventoryAsync関数を次のように呼び出していました。

Log.d(TAG, "Setup successful. Querying inventory.");
mHelper.queryInventoryAsync(mGotInventoryListener);

代わりに、クエリするSKUの文字列配列リストを渡します。

List<String> skulist = new ArrayList<String>();
skulist.add("my_sku_name1");
skulist.add("my_sku_name2");
mHelper.queryInventoryAsync(true, skulist, mGotInventoryListener);

次に、機内モードをオンにしてテストしたところ、購入したものを正常に照会できました。

于 2013-03-18T07:49:21.547 に答える
2

問題は、最初のアプローチでは、APIが存在するSKUを認識せず、デフォルト(単一のパラメーターバージョン)ごとにそのリストを照会しようとしていることです。機内モードでは、これは不可能です。これは、skusのリストがキャッシュされていないか、内部エラーが発生して終了できないためです。

クエリするSKUのリストを送信するか(後で行ったように)、SKUリストのオンラインクエリを抑制することができます。

helper.queryInventoryAsync(false, yourListener);

クレジット:jmrmb80

この情報が必要かどうか(つまり、アプリに価格を表示するかどうか)によって異なります。

(その関数の他のオーバーロードまたはすでに与えられた回答を参照してください。購入が行われたかどうかを確認するためにSKUは必要ない可能性が高いと思うので、jmrmb80の回答を探します-私にとっては、これで問題が解決しました機内モードでの購入の認識

于 2014-09-25T10:07:51.723 に答える
1

私にとって、次のビットは機能しました...

mHelper.queryInventoryAsync(false、mGotInventoryListener);

それ以外の

mHelper.queryInventoryAsync(mGotInventoryListener);

別のリンクで、在庫の更新エラー(アイテムの価格のクエリ)を見つけました。(応答:6:エラー)

于 2014-03-05T05:32:36.547 に答える
1

私はその問題を解決しました:

final ArrayList<String> iabItemSkus = new ArrayList<String>();
iabItemSkus.add(MyGame.productID_FULLVERSION);

// Disable SKU details if no network connection
boolean checkSkuDetails = isWifiConnected() ? true : false;

Gdx.app.log("IAB", "checkSkuDetails : " + checkSkuDetails);

mHelper.queryInventoryAsync(checkSkuDetails, iabItemSkus, mGotInventoryListener);

ネットワークでない場合、Skuの詳細を取得しません。

于 2016-06-29T10:09:48.553 に答える