B4i Library RevenueCat

RevenueCat is a platform that simplifies in-app subscriptions and purchases for mobile apps. It provides tools for managing subscription billing, analytics, and user retention across iOS, Android, and web, without needing to build a backend. Usage is free for apps with less than $2,500 in monthly tracked revenue (MTR).


I use the library in CleanTasks and Lognote, I have only tested the whole thing in B4I.

The RevenueCatPurchaseHelper class now makes it even easier to integrate revenuecat into your apps.

Setup
Add this code to the "Main" module of your b4i project under Process_Globals
B4X:
Public HasPremium As Boolean = False

Example
B4X:
Sub Class_Globals
    Private PurchaseHelper As RevenueCatPurchaseHelper
End Sub
B4X:
    PurchaseHelper.Initialize(Me,"PurchaseHelper","YourRevenueCatApiKey") 'Add your RevenueCat API key
    PurchaseHelper.ProductIndentififer = Array As String("all_access_1_month_lognote","all_access_1_year_lognote") 'The Product identifyer
B4X:
    Wait For (PurchaseHelper.CheckPurchases) complete (Success As Boolean) 'Must be called at app start, as we check here whether the user has the Premium version
    Log("Do I have a premium version? " & Success)
   
    Wait For (PurchaseHelper.GetProductsInformation(PurchaseHelper.ProductIndentififer)) complete (lstPurchases As List)
   
    For Each ProductInfo As ProductInformation In lstPurchases
        'Log(ProductInfo.Tag)
        'Log(ProductInfo.Description)  
        CustomListView1.AddTextItem(ProductInfo.Title & " - " & ProductInfo.LocalizedPrice,ProductInfo.ProductIdentifier)  
    Next
Make payment:
Wait For (PurchaseHelper.RequestPayment(Value)) Complete (Success As Boolean)
Message Boxes
The texts in the message boxes are predefined, but in case you want to customize them, you can do so:
B4X:
    PurchaseHelper.RestoreErrorTitle = "Restore failed"
    PurchaseHelper.RestoreErrorDescription = "No purchases found To restore."
    PurchaseHelper.RestoreSuccessTitle = "Recovery successful"
    PurchaseHelper.RestoreSuccessDescription = "Your purchases have been successfully restored"
    PurchaseHelper.ProVersionExpired = "The Pro version has been canceled Or Not renewed, you are now using the basic version."
    PurchaseHelper.ProVersionExpiredTitle = "Pro Version expired"
    PurchaseHelper.PurchaseErrorTitle = "Purchase Failed"
    PurchaseHelper.PurchaseErrorDescription = "Purchase was cancelled."
    PurchaseHelper.PurchaseSuccessTitle = "You are now ready to go"
    PurchaseHelper.PurchaseSuccessDescription = "Your purchase was successful."

RevenueCat
Author: Alexander Stolte
Version: 1.01

  • RevenueCat
    • Functions:
      • CreatePurchase (ProductId As String, Product As Object) As ResumableSub
        Records a purchase for a Customer from iOS, Android, or Stripe and will create a Customer if they don't already exist.
        https://www.revenuecat.com/docs/api-v1#tag/transactions/operation/receipts
        Product - In B4I the ProductInformation Object in B4A the Receipt Token
      • GetCustomer As ResumableSub
        Gets the latest Customer Info for the customer with the given App User ID, or creates a new customer if it doesn't exist.
        https://www.revenuecat.com/docs/api-v1#tag/customers/operation/subscribers
      • Initialize (API_KEY As String, AppUserId As String, lst_ProductIdentifier As List)
        Initializes the object. You can add parameters to this method if needed.
        <code>RevCat.Initialize("RevenueCatAPIKey",RevCatUserId,Array As String("all_access_1_year","all_access_1_month"))</code>
  • RevenueCatPurchaseHelper
    • Functions:
      • CheckPurchases As ResumableSub
      • GetProductsInformation (ProductIndentififer As String) As ResumableSub
        Returns a list of ProductInformation
      • GUID As String
      • Initialize (Callback As Object, EventName As String, RevenueCatAPIKey As String)
        Initializes the object. You can add parameters to this method if needed.
      • RequestPayment (ProductIdentifier As String) As ResumableSub
      • RestorePurchases As ResumableSub
    • Properties:
      • isExpired As Boolean [read only]
      • ProductIndentififer As String()
      • ProVersionExpired As String
      • ProVersionExpiredTitle As String
      • PurchaseErrorDescription As String
      • PurchaseErrorTitle As String
      • PurchaseSuccessDescription As String
      • PurchaseSuccessTitle As String
      • RestoreErrorDescription As String
      • RestoreErrorTitle As String
      • RestoreSuccessDescription As String
      • RestoreSuccessTitle As String

Changelog
  • 1.00
    • Release
  • 1.01
    • Improvements
    • Remove is_restore from CreatePurchase
      • The parameter is Deprecated
    • Add class RevenueCatPurchaseHelper - Takes care of almost everything
      • Saving and restoring user tokens
      • Checking Purchasing status
      • Restore
      • Messageboxes
Have Fun

If you have errors or questions, then please create a new thread
 

Attachments

  • RevenueCat Example.zip
    4.4 KB · Views: 5
  • RevenueCat.b4xlib
    5.5 KB · Views: 4
Last edited:

Cristian Achim

Member
Licensed User
Longtime User
Hi!

I replaced

B4X:
RevCat.Initialize("RevenueCatAPIKey",RevCatUserId,Array As String("all_access_1_year","all_access_1_month"))

with

B4X:
RevCat.Initialize("appl_BwXDhxxxxxxxxxxxxxxx", RevCatUserId, Array As String("rto_silver", "rto_gold", "rto_platinum"))

and I received this error:

B4X:
ResponseError: request completed with error, status code: 404
{"code":7117,"message":"Page not found."}
01/01/1970 02:00:00
Has Premium? false

Also I see that
B4X:
Dim RevCatUserId As String = KeyValue.GetDefault("RevCatUserId",RevCat.GUID)
Log(RevCatUserId)

(empty string)

Is there anything else to change?
 
Last edited:

Alexander Stolte

Expert
Licensed User
Longtime User
and I received this error:
Make sure you have followed all the steps in the documentation:

only when you see all products from the apple dev console in revenuecat can you start testing.
 

Cristian Achim

Member
Licensed User
Longtime User
I already made all steps.
The products in RevenueCat, I imported them from App Store, I didn't create them manually.
That means that App Store communicate with RevenueCat.
Thank you!
 

Alexander Stolte

Expert
Licensed User
Longtime User
I have updated the example project, the user id is now saved.

It is best to execute the following again after initializing:
B4X:
KeyValue.Remove("RevCatUserId")
 

Cristian Achim

Member
Licensed User
Longtime User




Still not working

I think RevCat.GUID doesn't generate anything.

Is mandatory to create an integration like Webhook or else in RevenueCat?
 

Alexander Stolte

Expert
Licensed User
Longtime User

Alexander Stolte

Expert
Licensed User
Longtime User
I'm using this exact code:
 

Cristian Achim

Member
Licensed User
Longtime User
That's how it works. Thank you very much for your patience.
 

Robert Valentino

Well-Known Member
Licensed User
Longtime User
Be nice to see example for B4a

Maybe help some of us take Google out of the loop

PS: Looks nice and promising
 
Last edited:

Alexander Stolte

Expert
Licensed User
Longtime User
Update
  • 1.01
    • Improvements
    • Remove is_restore from CreatePurchase
      • The parameter is Deprecated
    • Add class RevenueCatPurchaseHelper - Takes care of almost everything
      • Saving and restoring user tokens
      • Checking Purchasing status
      • Restore
      • Messageboxes
The RevenueCatPurchaseHelper class now makes it even easier to integrate revenuecat into your apps.
Example project updated

Github repo:
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…