Interface InAppBillingService
- All Known Implementing Classes:
IOSInAppBillingService
Your application must be properly configured with the list of in-app products
when you want to use this service. The list of available in-app products must be
passed in first by initializing
the service. Each
registered product must have the identifier and type that matches the configuration
of your in-app product on iOS and Android. For your convenience, you should use the
same identifier for each product on both iOS and Android.
Example
InAppBillingService service = InAppBillingService.create()
.orElseThrow(() -> new RuntimeException("Could not load In-App Billing service"));
// initialize and register available products
service.initialize(androidBase64LicenseKey, Arrays.asList(
new Product("com.sample.appone.product1_identifier", Product.Type.CONSUMABLE),
new Product("com.sample.appone.product2_identifier", Product.Type.NON_CONSUMABLE)
));
// construct UI based on available in-app products
Worker<List<Product>> productDetails = service.fetchProductDetails();
productDetails.stateProperty().addListener((obs, ov, nv) -> {
for (Product product : productDetails.getValue()) {
Label price = new Label(product.getDetails().getCurrency() + product.getDetails().getPrice());
Label title = new Label(product.getDetails().getTitle());
Button buy = new Button("buy");
buy.setOnAction(e -> order(product));
HBox productControls = new HBox(10.0, price, title, buy);
productList.getChildren().add(productControls);
}
});
// place an order
private void order(Product product) {
Worker<ProductOrder> order = service.order(product1);
order.stateProperty().addListener((obs, ov, nv) -> {
if (nv == Worker.State.FAILED) {
order.getException().printStackTrace();
} else if (nv == Worker.State.SUCCEEDED) {
Product boughtProduct = order.getValue().getProduct();
if (boughtProduct.getType() == Product.Type.CONSUMABLE) {
Worker<Product> finishOrder = service.finish(order.getValue());
finishOrder.stateProperty().addListener((obs2, ov2, nv2) -> {
if (nv2 == Worker.State.FAILED) {
finishOrder.getException().printStackTrace();
} else if (nv2 == Worker.State.SUCCEEDED) {
Product finishedProduct = finishOrder.getValue();
new Toast("You bought: " + finishedProduct.getTitle()).show();
}
});
} else {
new Toast("You bought: " + boughtProduct.getTitle()).show();
}
}
}
});
);}
Android Configuration
The permission com.android.vending.BILLING
needs to be added.
<manifest ...>
<uses-permission android:name="com.android.vending.BILLING"/>
...
</manifest>
iOS Configuration: none
- Since:
- 3.4.0
-
Property Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic Optional<InAppBillingService>
create()
Returns an instance ofInAppBillingService
.Retrieves the details for the current list of available in-app products.javafx.concurrent.Worker<Product>
finish
(ProductOrder productOrder) Finish a product order for aconsumable
product.void
initialize
(String androidPublicKey, List<Product> registeredProducts) Correctly initialize the In-App Billing service on the device.boolean
isReady()
Gets the value of the property ready.boolean
Returns true if the device supports in-app billing.javafx.concurrent.Worker<ProductOrder>
Place a new order for the specified product.javafx.beans.property.ReadOnlyBooleanProperty
void
Set a query listener to listen for results of asynchronous queries of the registered in-app products.void
setRegisteredProducts
(List<Product> registeredProducts) Updates the list of available products that are configured in the in-app product sections of the application configuration for iOS and Android.
-
Property Details
-
ready
javafx.beans.property.ReadOnlyBooleanProperty readyProperty- See Also:
-
-
Method Details
-
create
Returns an instance ofInAppBillingService
.- Returns:
- An instance of
InAppBillingService
.
-
isSupported
boolean isSupported()Returns true if the device supports in-app billing.- Returns:
- True if the device supports in-app billing.
-
setQueryResultListener
Set a query listener to listen for results of asynchronous queries of the registered in-app products.- Parameters:
listener
- the query listener to set
-
setRegisteredProducts
Updates the list of available products that are configured in the in-app product sections of the application configuration for iOS and Android.- Parameters:
registeredProducts
- a list of available in-app products
-
initialize
Correctly initialize the In-App Billing service on the device. This makes sure that everything is in place before you can start interacting with the methods that deal with the actual in-app products.When initialization completed successfully, a query will be triggered to fetch the initial purchase details for each registered in-app product. You should
set a query listener
to act upon the results of that query.- Parameters:
androidPublicKey
- the license key of your Android application which can be found in the Google Play developer console.registeredProducts
- a list of available in-app products that are configured in your application configuration for iOS and Android
-
isReady
boolean isReady()Gets the value of the property ready.- Property description:
-
readyProperty
javafx.beans.property.ReadOnlyBooleanProperty readyProperty()- See Also:
-
fetchProductDetails
Retrieves the details for the current list of available in-app products. In case a product from the list of registered products could not be queried, they will not be listed in the returned list. This method must be called to get the details of each registered product, like the title, description and localised price and currency. You can use these details to build up your UI.- Returns:
- A list of products for which the details could be fetched, wrapped in a Worker.
-
order
Place a new order for the specified product. The returned Worker can be used to determine if the order was successful.- Parameters:
product
- the product to place an order for- Returns:
- A ProductOrder containing details about the processed order, wrapped in a Worker.
-
finish
Finish a product order for aconsumable
product. The product order will not have been processed (and no money will have been transferred) until the order is finished.- Parameters:
productOrder
- the product order to finish- Returns:
- The product that was ordered with in the provided ProductOrder with updated details, wrapped in a Worker.
-