Skip to main content

· 2 min read

We're happy to introduce two new features for your IAPHUB products!

Available now on:

Product Localized Title and Description

You can now define the title and description of your products directly from the IAPHUB dashboard in all the languages your app supports.

To do this, start by editing your products on the IAPHUB dashboard and setting the title and description in each supported language.

Then, simply provide the language ISO code to the lang property in the start method of the IAPHUB SDK, and the localizedTitle and localizedDescription properties of your products will be loaded from IAPHUB instead of coming from Google or Apple (the default behavior).

If you need to update the user language, you can use the setLang method.

Product Metadata

You can now define metadata for your products on the IAPHUB dashboard.

Metadata is structured information represented as key/value pairs, where each key is a string corresponding to a specific attribute of the product (such as 'credits' or 'category'), and each value is also a string that provides the relevant details (such as '100' or 'premium').

To do this, start by editing your products on the IAPHUB dashboard and setting the metadata properties of each product.

After doing so, the product metadata will be returned by the IAPHUB SDK along with all the other properties of the product.


With these new features, managing your products has never been easier. We hope you enjoy the enhanced flexibility and customization options!

· One min read

We've added two new filters for your stores when using the smart listing feature.

You can now add a Start Date and an End Date, which allow you to define the earliest and latest dates for when a store's availability begins and ends.

These two additional filters can be useful if you're planning a temporary promotion.

· 2 min read

Exciting news: IAPHUB has rolled out full support for StoreKit V2 on iOS 15 and above! 🚀📱

As you may know, IAPHUB uses Apple's StoreKit SDK under the hood to process your in-app purchases. While the previous version, StoreKit SDK (V1), has served its purpose, it also encountered several issues that Apple sought to address with the release of StoreKit V2.

And let me tell you, a lot has changed! Normally, upgrading your codebase to StoreKit V2 would be quite the undertaking. However, since you're leveraging IAPHUB, we've handled all the heavy lifting for you, ensuring a seamless transition without any noticeable differences on your end!

One of the standout features of StoreKit V2 is that Apple now returns the price and currency of a transaction when validating a purchase using their server API (you might not have been aware, but this wasn't the case before). This means no more reliance on client-side data, resulting in more accurate and transparent in-app purchases than ever before. Moreover, it's expected to be faster and more reliable, providing a smoother experience for both you and your users.

And rest assured, even if some of your users haven't made the leap to iOS 15 yet, IAPHUB has got you covered. We seamlessly transition to StoreKit V1 for iOS versions below 15, ensuring uninterrupted functionality for all users.

Before you begin, don't forget to configure the App Store Server API.
Update the IAPHUB SDK to the latest version, then simply set enableStorekitV2 to true when initializing the IAPHUB SDK using the start method. IAPHUB will automatically use StoreKit V2 if it's available.

Also, make sure to test a few transactions in the sandbox before rolling out your app update with StoreKit V2. Proper testing before publishing a change is always a good idea 🙂. Happy coding!

· 2 min read

If you're using IAPHUB webhooks, a new major version (v2) is available.

This new version introduces the new transfer webhook.

The transfer webhook will be triggered when an active subscription (or non-consumable) is transferred to a different user ID.

This can occur when a user restores their purchases or replaces an active subscription using a different user ID, but only if the User transfer option on the IAPHUB dashboard is enabled, which is the default setting.

Our goal is to make things easier compared to the previous system (v1), which relied solely on the user_id_update webhook.

We recommend updating to the new version as soon as possible. Let's recapitulate the differences between the v1 and the v2:

Before (v1)

The user_id_update webhook is triggered in the following scenarios:

  • When a user restores an active subscription (or non-consumable) using a different user ID.
  • When an active subscription is replaced using a different user ID.
  • When an anonymous user (not logged in) with purchases logs in.
  • When the user ID of a user with purchases is updated via the API.

Now (v2)

The user_id_update webhook is triggered when user ID 1 becomes user ID 2.

It can happen in the following scenarios:

  • When an anonymous user (not logged in) with purchases logs in.
  • When the user ID of a user with purchases is updated via the API.

The transfer webhook is triggered when a subscription (or non-consumable) is transferred from user ID 1 to user ID 2.

It can happen in the following scenarios:

  • When a user restores an active subscription (or non-consumable) using a different user ID.
  • When an active subscription is replaced using a different user ID.

How to upgrade?

Once your server can handle the transfer webhook properly, you can update the webhooks version from the Settings page of the IAPHUB dashboard.

Click on the Webhooks section, update the Webhook version input to version 2, and click on the Save button.

If any issue happens, you can still rollback to version 1.



· One min read

A new property (subscriptionCancellationDate) is now available through the API & webhooks. It is the date IAPHUB detects a subscription auto-renewing has been cancelled.

You can find more information on the documentation.

· One min read

Exciting news for Flutter developers! The IAPHUB SDK for Flutter is now available, providing an easy and user-friendly solution for in-app billing implementation for your iOS/Android apps.

Say goodbye to the frustration of understanding the StoreKit framework and the Google Billing Library, and the time and effort required to develop a server for managing subscriptions, processing receipts, and handling edge cases. With the IAPHUB SDK, you can effortlessly implement in-app billing without having to reinvent the wheel.

Implementing IAPHUB in your Flutter app has never been easier. Simply follow our comprehensive guide that will take you step by step through the process.

· 2 min read

IAPHUB is thrilled to announce that we are now available on Adalo!

We understand that one of the biggest challenges facing app developers is figuring out how to monetize their creations. That's why we're dedicated to making in-app purchases as easy and accessible as possible.

With our new components on Adalo, we're confident that thousands of people who may not have coding experience will now be able to develop their own mobile apps and monetize them. Adalo is a powerful platform that allows anyone to create professional, polished mobile apps without needing to write any code. With IAPHUB integrated into Adalo, users can now easily add in-app purchases to their apps, making it simple to generate revenue from their creations.

Adalo users will finally be able to unlock a whole new realm of monetization options by being able to sell subscriptions or consumables within their apps. For example, with IAPHUB integration, Adalo users can now easily create paywalled content that is only available to users with a subscription. This opens up a whole new world of possibilities for app creators looking to generate revenue from their creations, whether it be through recurring subscription fees or one-time consumable purchases. The sky truly is the limit with the added capabilities that IAPHUB brings to Adalo.

We're excited to see what kinds of amazing apps people will create using our components on Adalo. Whether you're a seasoned developer or a complete beginner, we believe that our tools will help you take your app to the next level.



Get started now by taking a look at the comprehensive guide we've prepared for you.

· 2 min read

We're happy to announce the release the version 8.4 of the React Native plugin.

This new release has quite a few enhancements and a new method getBillingStatus that has been added in order to easily detect an error with the billing system.

When the billing system is unavailable, the products for sale will be filtered and an empty array will be returned.
You can use the getBillingStatus method (after fetching the products) to detect when it is the case in order to display the appropriate error message.

On Android, we also recommend displaying an error message when the billing system is unavailable because the Google Play Store app is outdated (it can happen on old devices with an outdated software). Tell the user to open the Play Store app and go to Settings -> About and click on Update Play Store.

If the getBillingStatus method doesn't return any error but your product is missing, it is most likely a misconfiguration issue.

You should check the filteredProductIds property.
If your product ID is in the array, it is an issue with GooglePlay/iTunes (we are relying on them to fetch the products details). Otherwise it is an issue with IAPHUB. Please follow this guide to walk through the different possibilities that could cause this issue.

var status = await Iaphub.getBillingStatus();

if (status.error && status.error.code == "billing_unavailable") {
if (status.error.subcode == "play_store_outdated") {
// Display a message on your paywall saying that the Play Store app on the user's device is out of date, it must be updated
}
else {
// Display a message on your paywall saying that the in-app billing isn't available on the device
}
}

if (status.filteredProductIds.length) {
// Some products have been filtered because they were not returned by GooglePlay/iTunes
}

Enjoy!

· 2 min read

We're happy to announce the release the version 8.3 of the React Native plugin.
This new release is shipping some really helpful features!

What's new?

A new onDeferredPurchase event

Thanks to this event you'll now be able to easily detect when a new purchase occurs outside of the buy method.
For instance this event can be trigerred:

  • After a purchase is made outside the app (by redeeming a promo code on the store by example)
  • After a deferred payment (when the error code 'deferred_payment' is returned by the buy method)
  • After a payment fails because it couldn't be validated by IAPHUB (and succeeds later)
  var listener = Iaphub.addEventListener('onDeferredPurchase', async (transaction) => {

});

The enhancement of the restore method

The restore method will now return a RestoreResponse object.
This object will contain two properties:

  • newPurchases: The new purchases processed during the restore
  • transferredActiveProducts: The active products transferred (from another user) during the restore
var response = await Iaphub.restore();
// New purchases
console.log('New purchases: ', response.newPurchases);
// Extisting active products transferred to the user
console.log('Transferred active products: ', response.transferredActiveProducts);

New properties for the ActiveProduct object

We've also added a few extra properties for the active products.

  • isPromo
  • promoCode
  • originalPurchase

Enjoy!

· One min read

As you know we're on a mission to make in-app purchase as easy as possible.
The react-native-iaphub is already doing that pretty well but we've decided to make things even easier!

Our new React Native component react-native-iaphub-ui will now provide all the UI necessary to sell in-app purchases!
You'll be able to display a beautiful paywall that is highly customizable and includes (so far) the translations in 6 languages (English, Spanish, French, German, Portuguese, Japanese).

Here is a little preview of the component (the image and title isn't part of the component):



The usage of this component is of course totally optional but we're sure it'll help a lot of developers trying to deploy in-app purchases fast. The development of a great paywall takes a lot of time 🙂.