99import com .android .billingclient .api .BillingClientStateListener ;
1010import com .android .billingclient .api .BillingFlowParams ;
1111import com .android .billingclient .api .BillingResult ;
12- import com .android .billingclient .api .SkuDetails ;
13- import com .android .billingclient .api .SkuDetailsParams ;
12+ import com .android .billingclient .api .PendingPurchasesParams ;
13+ import com .android .billingclient .api .ProductDetails ;
14+ import com .android .billingclient .api .QueryProductDetailsParams ;
1415import com .d4rk .androidtutorials .java .databinding .ActivitySupportBinding ;
1516import com .google .android .gms .ads .AdRequest ;
1617import com .google .android .gms .ads .MobileAds ;
1718
19+ import java .util .ArrayList ;
1820import java .util .HashMap ;
1921import java .util .List ;
2022import java .util .Map ;
2527public class SupportRepository {
2628
2729 private final Context context ;
28- private final Map <String , SkuDetails > skuDetailsMap = new HashMap <>();
30+ private final Map <String , ProductDetails > productDetailsMap = new HashMap <>();
2931 private BillingClient billingClient ;
3032
3133 public SupportRepository (Context context ) {
@@ -41,7 +43,10 @@ public void initBillingClient(Runnable onConnected) {
4143 billingClient = BillingClient .newBuilder (context )
4244 .setListener ((billingResult , purchases ) -> {
4345 })
44- .enablePendingPurchases ()
46+ .enablePendingPurchases (
47+ PendingPurchasesParams .newBuilder ()
48+ .enableOneTimeProducts ()
49+ .build ())
4550 .build ();
4651
4752 billingClient .startConnection (new BillingClientStateListener () {
@@ -63,40 +68,52 @@ public void onBillingServiceDisconnected() {
6368 }
6469
6570 /**
66- * Query your SKU details for in-app items.
71+ * Query your product details for in-app items.
6772 * Typically called after billing client is connected.
6873 */
69- public void querySkuDetails (List <String > skuList , OnSkuDetailsListener listener ) {
74+ public void queryProductDetails (List <String > productIds , OnProductDetailsListener listener ) {
7075 if (billingClient == null || !billingClient .isReady ()) {
7176 return ;
7277 }
73- SkuDetailsParams params = SkuDetailsParams .newBuilder ()
74- .setSkusList (skuList )
75- .setType (BillingClient .SkuType .INAPP )
78+
79+ List <QueryProductDetailsParams .Product > products = new ArrayList <>();
80+ for (String id : productIds ) {
81+ products .add (QueryProductDetailsParams .Product .newBuilder ()
82+ .setProductId (id )
83+ .setProductType (BillingClient .ProductType .INAPP )
84+ .build ());
85+ }
86+
87+ QueryProductDetailsParams params = QueryProductDetailsParams .newBuilder ()
88+ .setProductList (products )
7689 .build ();
7790
78- billingClient .querySkuDetailsAsync (params , (billingResult , skuDetailsList ) -> {
91+ billingClient .queryProductDetailsAsync (params , (billingResult , productDetailsList ) -> {
7992 if (billingResult .getResponseCode () == BillingClient .BillingResponseCode .OK
80- && skuDetailsList != null ) {
81- for (SkuDetails skuDetails : skuDetailsList ) {
82- skuDetailsMap .put (skuDetails . getSku (), skuDetails );
93+ && productDetailsList != null ) {
94+ for (ProductDetails productDetails : productDetailsList ) {
95+ productDetailsMap .put (productDetails . getProductId (), productDetails );
8396 }
8497 if (listener != null ) {
85- listener .onSkuDetailsRetrieved ( skuDetailsList );
98+ listener .onProductDetailsRetrieved ( productDetailsList );
8699 }
87100 }
88101 });
89102 }
90103
91104 /**
92- * Launch the billing flow for a particular SKU .
105+ * Launch the billing flow for a particular product .
93106 */
94- public void initiatePurchase (Activity activity , String sku ) {
95- if (skuDetailsMap .containsKey (sku )) {
96- SkuDetails skuDetails = skuDetailsMap .get (sku );
97- if (skuDetails != null ) {
107+ public void initiatePurchase (Activity activity , String productId ) {
108+ if (productDetailsMap .containsKey (productId )) {
109+ ProductDetails details = productDetailsMap .get (productId );
110+ if (details != null ) {
111+ BillingFlowParams .ProductDetailsParams productParams =
112+ BillingFlowParams .ProductDetailsParams .newBuilder ()
113+ .setProductDetails (details )
114+ .build ();
98115 BillingFlowParams flowParams = BillingFlowParams .newBuilder ()
99- .setSkuDetails ( skuDetails )
116+ .setProductDetailsParamsList ( List . of ( productParams ) )
100117 .build ();
101118 billingClient .launchBillingFlow (activity , flowParams );
102119 }
@@ -113,10 +130,10 @@ public void initMobileAds(ActivitySupportBinding binding) {
113130 }
114131
115132 /**
116- * Callback interface for when SKU details are fetched.
133+ * Callback interface for when product details are fetched.
117134 */
118- public interface OnSkuDetailsListener {
119- void onSkuDetailsRetrieved (List <SkuDetails > skuDetailsList );
135+ public interface OnProductDetailsListener {
136+ void onProductDetailsRetrieved (List <ProductDetails > productDetailsList );
120137 }
121138
122139}
0 commit comments