I'm using RAD Studio 13.1 Florence. I want to upgrade the Billing library to 8.0.0. I'm successfully submitting products linked to Google Play, but the onProductDetailsResponse event never triggers. However, when I revert the library version to Billing-7.1.1, the code works without any problems.
How can I upgrade my application to Billing-8.0.0? I'm sharing the code:
procedure TfrmSG_AnaForm.Urunleri_Sorgula; var ProductList: JArrayList; Product: JQueryProductDetailsParams_Product; QueryParamsBuilder: JQueryProductDetailsParams_Builder; QueryParams: JQueryProductDetailsParams; begin try if not Assigned(FBillingClient) or not FBillingClient.isReady then begin //frmSG_AnaForm.Bildirim_Mesaji('Billing servisi henüz hazır değil!', True, False); ShowMessage( 'Billing servisi henüz hazır değil!' ); Exit; end; ProductList := TJArrayList.JavaClass.init; // --- ÜRÜN 1 --- Product := TJQueryProductDetailsParams_Product.JavaClass.newBuilder .setProductId(StringToJString(frmGoogle_Play_Satis.Elmas_100)) .setProductType(TJBillingClient_ProductType.JavaClass.INAPP) .build; ProductList.add(Product); // --- ÜRÜN 2 --- Product := TJQueryProductDetailsParams_Product.JavaClass.newBuilder .setProductId(StringToJString(frmGoogle_Play_Satis.Elmas_500)) .setProductType(TJBillingClient_ProductType.JavaClass.INAPP) .build; ProductList.add(Product); // --- ÜRÜN 3 --- Product := TJQueryProductDetailsParams_Product.JavaClass.newBuilder .setProductId(StringToJString(frmGoogle_Play_Satis.Elmas_1000)) .setProductType(TJBillingClient_ProductType.JavaClass.INAPP) .build; ProductList.add(Product); // --- ÜRÜN 4 --- Product := TJQueryProductDetailsParams_Product.JavaClass.newBuilder .setProductId(StringToJString(frmGoogle_Play_Satis.Elmas_10000)) .setProductType(TJBillingClient_ProductType.JavaClass.INAPP) .build; ProductList.add(Product); // --- ÜRÜN 5 --- Product := TJQueryProductDetailsParams_Product.JavaClass.newBuilder .setProductId(StringToJString(frmGoogle_Play_Satis.Elmas_100000)) .setProductType(TJBillingClient_ProductType.JavaClass.INAPP) .build; ProductList.add(Product); { if ProductList.size > 0 then ShowMessage( 'İçi Dolu ' ); } //ShowMessage( 'ürünleri ekledi.' ); // --- QUERY PARAMS OLUŞTURMA (DÜZELTİLEN KISIM) --- QueryParamsBuilder := TJQueryProductDetailsParams.JavaClass.newBuilder; // 2. ArrayList'i JList interface'ine Wrap ederek Builder'a veriyoruz QueryParamsBuilder.setProductList(TJList.Wrap(ProductList)); // 3. Son olarak parametre nesnesini build ediyoruz QueryParams := QueryParamsBuilder.build; //ShowMessage( 'paketlendi.' ); // --- SORGULAMA --- ProductListener := TProductDetailsResponseListener.Create; FBillingClient.queryProductDetailsAsync(QueryParams, ProductListener); //FBillingClient.queryPurchasesAsync( QueryParams, ProductListener ); //ShowMessage( 'paketler yüklendi.' ); except on e : Exception do TThread.Synchronize( nil, procedure begin ShowMessage( e.Message ); end ); end; end; procedure TfrmSG_AnaForm.OnBillingConnected; begin // Bağlantı %100 başarılı! //Bildirim_Mesaji( 'Google Play Billing v8 Servisine Başarıyla Bağlanıldı! 🚀', True, True); Urunleri_Sorgula; end; procedure TfrmSG_AnaForm.OnBillingDisconnected; begin // Bağlantı koptuğunda çalışır (örneğin Google Play Store güncellenirse) //ShowMessage('Billing Servis Bağlantısı Koptu, Yeniden Bağlanılıyor...'); // İsterseniz burada SetupBilling; çağırarak tekrar bağlanmayı deneyebilirsiniz. end; constructor TProductDetailsResponseListener.Create; begin inherited Create; ShowMessage( 'Create Tetiklendi.' ); end; procedure TProductDetailsResponseListener.onProductDetailsResponse( billingResult: JBillingResult; productDetailsList: JList); cdecl; var ResCode: Integer; DebugMsg: string; I : Integer; Details: JProductDetails; begin TThread.Queue( nil, procedure begin ShowMessage( 'Veri Geldi ' ); end ); ResCode := billingResult.getResponseCode; DebugMsg := JStringToString(billingResult.getDebugMessage); // 1. Durum: Google Başarılı Yanıt Dündü if ResCode = TJBillingClient_BillingResponseCode.JavaClass.OK then begin if Assigned(productDetailsList) and (productDetailsList.size > 0) then begin frmSG_AnaForm.FProductDetailsList.Clear; for I := 0 to productDetailsList.size - 1 do begin Details := TJProductDetails.Wrap(productDetailsList.get(I)); frmSG_AnaForm.FProductDetailsList.Add(Details); end; frmSG_AnaForm.Bildirim_Mesaji('BAŞARILI: ' + IntToStr(productDetailsList.size) + ' adet ürün yüklendi!', False, False); end else begin // Google 'OK' dedi ama liste BOMBOŞ döndü! frmSG_AnaForm.Bildirim_Mesaji('GOOGLE BOŞ DÖNDÜ: IDler eşleşmiyor veya Play Console ürünü aktif değil!', True, False); end; end else begin // 2. Durum: Google Hata Döndürdü frmSG_AnaForm.Bildirim_Mesaji('GOOGLE HATA KODU: ' + IntToStr(ResCode) + ' - ' + DebugMsg, True, False); end; end;