document.addEventListener('deviceready', onDeviceReady);
function onDeviceReady() {
function setState(attr) {
Object.assign(state, attr);
// We should first register all our products or we cannot use them in the app.
type: store.PAID_SUBSCRIPTION,
type: store.PAID_SUBSCRIPTION,
// Setup the receipt validator service.
store.validator = '<<< YOUR_RECEIPT_VALIDATION_URL >>>';
// Show errors for 10 seconds.
store.error(function(error) {
setState({ error: `ERROR ${error.code}: ${error.message}` });
.approved(p => p.verify())
.verified(p => p.finish())
.owned(p => console.log(`you now own ${p.alias}`));
// Called when any subscription product is updated
store.when('subscription').updated(function() {
const product1 = store.get('my_subscription1') || {};
const product2 = store.get('my_subscription2') || {};
let status = 'Please subscribe below';
if (product1.owned || product2.owned)
else if (product1.state === 'approved' || product2.state === 'approved')
status = 'Processing...';
setState({ product1, product2, status });
// Load informations about products and purchases
const purchaseProduct1 = state.product1.canPurchase
? `<button onclick="store.order('my_subscription1')">Subscribe</button>` : '';
const purchaseProduct2 = state.product2.canPurchase
? `<button onclick="store.order('my_subscription2')">Subscribe</button>` : '';
const body = document.getElementsByTagName('body')[0];
subscription: ${state.status}
id: ${state.product1.id || ''}
title: ${state.product1.title || ''}
state: ${state.product1.state || ''}
descr: ${state.product1.description || ''}
price: ${state.product1.price || ''}
expiry: ${state.product1.expiryDate || ''}
id: ${state.product2.id || ''}
title: ${state.product2.title || ''}
descr: ${state.product2.description || ''}
price: ${state.product2.price || ''}
state: ${state.product2.state || ''}
expiry: ${state.product2.expiryDate || ''}