2017-03-24 1 views
7

私が試しているのは何ですか?アプリ購入時:同じアカウントを持つ2台のデバイスで同じ購入アイテムが取得されない

X電子メールアドレスが設定された1台のAndroid端末でアイテムを購入しています。同じ電子メールアドレスが設定されている別のデバイスをチェックインするとき。最初のデバイスで購入したアイテムは別のデバイスで使用できなくなります。

私が試したことはありますか?

私が使用しようとしている:

inappBillingService.getPurchases(InAppBuyActivity.INAPPVERSION, 
        getPackageName(), "inapp", null); 

とも使用してみました:

IabHelper.QueryInventoryFinishedListener mGotInventoryListener 
    = new IabHelper.QueryInventoryFinishedListener() { 
    public void onQueryInventoryFinished(IabResult result, 
     Inventory inventory) { 

     if (result.isFailure()) { 
     // handle error here 
     } 
     else { 
     // Not getting same purchased on both devices 
     } 
    } 
}; 

を私はplaystoreバージョンの同じバージョン名とバージョンコードを有する署名済みAPKを生成しています。

+0

なぜIabBillingHelperクラスを使用していないのですか? – azizbekian

+0

@azizbekian secondはすでにIabHelper.QueryInventoryFinishedListenerを使用しています – SANAT

+0

'IabBillingHelper'には' getPurchases() 'のようなものがあります。 – azizbekian

答えて

0

私は2つのデバイスを使ってアプリをテストしました。購入を反映するためにいつかかかります。

もし私がこのアプリを削除し、それを新鮮なものとして再インストールすれば、購入した新しい商品がそこにあります。しかし、もし私が1つのアイテムを購入し、同時にそれが反映されていない2番目のデバイスでそれを確認します。

アプリは、購入しようとしたときに2番目のデバイスで既に購入されたアイテムを表示します。しかし、inappBillingService.getPurchasesIabHelper.QueryInventoryでは利用できません。

0

アプリ内課金バージョン3 APIを使用すると、アプリ内課金をアプリケーションに簡単に統合できます。このバージョンの機能には、同期購入フローの改善、消耗品の所有権の追跡を容易にするAPI、アプリ内購入データのローカルキャッシングあなたのコード内

1.チェックし、あなたが消耗品を使用したり、消耗品使用した場合

、ユーザーが製品の複数の時間、Googleのストアのみ1時間の購入情報を購入し、再び空白の応答を取得するので、削除することができない場合あなたのアプリから消費可能な関連コード。

2.チェック・ユーザーがすでにアイテムを購入したり、コードの下に使用していない項目はその後、アプリ内getPurchasesを(呼び出して購入しない場合は、購入項目の前にロジック上で使用し

private IInAppBillingService mService = null; 

//onCreare 
try { 
     Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND"); 
     serviceIntent.setPackage("com.android.vending"); 
     bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE); 
     // bindService(new Intent("com.android.vending.billing.InAppBillingService.BIND"), mServiceConn, Context.BIND_AUTO_CREATE); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 


// Method 
ServiceConnection mServiceConn = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName name, IBinder service) { 
     mService = IInAppBillingService.Stub.asInterface(service); 
     Log.d("TEST", "mService ready to go!"); 
     checkownedItems(); 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName name) { 
     mService = null; 
    } 
}; 

private void checkownedItems() { 
    try { 
     Bundle ownedItems = mService.getPurchases(3, getPackageName(), "inapp", null); 
     if (ownedItems.getInt("RESPONSE_CODE") == 0) { 
      ArrayList<String> ownedSkus = ownedItems.getStringArrayList("INAPP_PURCHASE_ITEM_LIST"); 
      ArrayList<String> purchaseDataList = ownedItems.getStringArrayList("INAPP_PURCHASE_DATA_LIST"); 


      if (purchaseDataList.size() > 0) { 
       // Item already Purchased.... 
       // Manage your in-app view 

      }else{ 
       // Item not purchased 
      } 
     } 

    } catch (RemoteException e) { 
     e.printStackTrace(); 
    } 
} 

)それ以外の場合は非表示にしたり、イン管理しますアプリビュー

+0

商品は消耗品ではありません。ユーザーは一度だけ購入します。同じコードが接続のためにあり、購入を得る。 – SANAT

+0

@SANAT、ownedSkusとpurchaseDataListの値をチェックしましたか? –

+0

私はgetPurchasesの結果から "INAPP_PURCHASE_ITEM_LIST"をチェックしました。 バンドルownedItems = mService.getPurchases(InAppBuyActivity.INAPPVERSION、 getPackageName()、 "inapp"、null); ArrayList ownedSkus = ownedItems.getStringArrayList( "INAPP_PURCHASE_ITEM_LIST"); – SANAT

関連する問題