2017-11-09 13 views
0

ここでこの質問をすることができない場合はお知らせください。投票を停止する代わりに削除します。アプリ内購入払い戻し

私は現在アプリケーションでアプリ内課金を実装するためにthisライブラリを使用しています。私は単純さのためにこのライブラリを使用することにしました。

これは私がそれを実装する方法です:

public class MainActivity extends AppCompatActivity { 

private Button buyButton; 
BillingProcessor bp; 
TextView freeorfull; 

String LICENSE_KEY = "MyKey"; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    freeorfull = (TextView) findViewById(R.id.freeorfull); 

    buyButton = (Button) findViewById(R.id.buyButton); 

    buyButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if (!BillingProcessor.isIabServiceAvailable(getApplicationContext())) { 
       Toast.makeText(getApplicationContext(), "Please upgrade Android Market/Play store to version >= 3.9.16", 
         Toast.LENGTH_LONG).show(); 
      } else { 

       bp.purchase(MainActivity.this, "myProductKey"); 

      } 

     } 
    }); 

    buyit(); 

    if (bp.isPurchased("mybuyfullversion")) { 

     freeorfull.setText("FULL oncreate"); 

    } 


} 

public void buyit() { 
    bp = new BillingProcessor(this, LICENSE_KEY, new BillingProcessor.IBillingHandler() { 
     @Override 
     public void onProductPurchased(@NonNull String productId, @Nullable TransactionDetails details) { 
      freeorfull.setText("FULL in buyit"); 

      Toast.makeText(getApplicationContext(), "onProductPurchased", 
        Toast.LENGTH_LONG).show(); 

     } 

     @Override 
     public void onBillingError(int errorCode, @Nullable Throwable error) { 

      Toast.makeText(getApplicationContext(), "onBillingError", 
        Toast.LENGTH_LONG).show(); 

      if (bp.isPurchased("mybuyfullversion")) { 

       freeorfull.setText("FULL oncreate"); 

      } 

     } 

     @Override 
     public void onBillingInitialized() { 
      Toast.makeText(getApplicationContext(), "onBillingInitialized", 
        Toast.LENGTH_LONG).show(); 


     } 

     @Override 
     public void onPurchaseHistoryRestored() { 

      Toast.makeText(getApplicationContext(), "onPurchaseHistoryRestored", 
        Toast.LENGTH_LONG).show(); 

     } 
    }); 

} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (!bp.handleActivityResult(requestCode, resultCode, data)) { 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 

@Override 
public void onDestroy() { 
    if (bp != null) { 
     bp.release(); 
    } 
    super.onDestroy(); 
} 

} 

私はいくつかの時間後に購入が返金され、ユーザー(私は)お金の背部が、アプリケーションを受け取り、Googleからのテストの借換えのユーザーがコンソールを再生しようとしましたアイテムが購入されたことをまだ表示します。

ユーザーが払い戻されたかどうかを確認する方法を探しています。その後、UI/TextViewを「無料版」に戻します。

私は次のように使用することができることを見てきました:

Purchase removeAdsPurchase = inventory.getPurchase(SKU_REMOVE_ADS); 
if(removeAdsPurchase != null) { 
    int purchaseStateForRemoveAds = removeAdsPurchase.getPurchaseState(); 
if(purchaseStateForRemoveAds == 1) { 
    //Do cancelled purchase stuff here 
} 
else if(purchaseStateForRemoveAds == 2) { 
    //Do refunded purchase stuff here 
} 
} 

をしかし、このライブラリはPurchaseclassを持っていないと私は在庫が参照するものを理解していません。

購入が払い戻されたかどうかを確認するためにPurchaseStateを取得する必要があります。誰かが正しい方向に私を助けてくれますか?

答えて

1

これは、同じ課金ライブラリを使用して同様の問題を解決した方法です。払い戻し後にアプリをリセットするには、bp.loadOwnedPurchasesFromGoogle()の方法でBuyActivityまたは購入状況を確認できる場所に電話する必要があります。

bp.loadOwnedPurchasesFromGoogle() 

ので、それを待っていないGoogleのサーバから購入アップデートを更新するためにいつか取る方法ことに注意してください。

だから、項目が(借換えを含む)を購入されているかどうかチェックするために、これを試してみてください。

if(bp.isPurchased(PRODUCT_ID)){ 
     // item is purchased 
} 
else{ 
     //item not purchased any longer so it is up for buy 
} 
関連する問題