How to Migrate from Glassfy to RevenueCat
Glassfy is ceasing operations in December of 2024. This is how to migrate from Glassfy to RevenueCat
Glassfy recently announced that they are ceasing operations by the end of 2024. This guide will show you how to migrate from Glassfy to RevenueCat without affecting your subscribers.
Note that, for now, this guide details the process for an iOS migration. We will update with details specifically for Play shortly, but most of the principles and much of the process is the same. You can also check out the full ‘migration to RevenueCat’ guide in our docs, though this is less specifically geared towards migrating from Glassfy.
What RevenueCat plan to pick when migrating from Glassfy
The first step is to sign up for RevenueCat. It’s straight-forward (name, email, password), and you should be able to get started right away.
There’s just a single plan, which unlocks access to all the same features that our biggest customers use to serve tens of millions of subscribers, regardless of how much you pay us (if you’re even paying us at all).
Pricing is simple: 1% of tracked revenue in those months that you make $2,500 USD or more. In months where you make less, we won’t charge you and you’ll still have access to the full suite of features and functionality.
Configure RevenueCat
Now, it’s time to configure your App Store app in RevenueCat.
Start by creating a project in RevenueCat for your app, and within the project click on the Add an App button, then select “App Store”.
Add a name for your app, and then copy the values from the Glassfy App Store configuration. The descriptions of each value are fairly similar, but if you’re unsure what value goes where, simply follow this table:
Glassfy App Store | RevenueCat App Store |
App Bundle ID | App Bundle ID |
Apple Shared Secret * | App Store Connect App-Specific Shared Secret |
In-App Purchase Key p8 File | P8 key file from App Store Connect |
In-App Purchase Key ID | Key ID |
You will also need to enter your issuer ID in the RevenueCat purchases key section.
You can find your issuer ID at https://appstoreconnect.apple.com/access/integrations/api/subs. If there’s no code there, you may need to first create an API key, or you may not have admin access to this account. In the latter case, ask your admin to copy the code for you.
Click SAVE CHANGES, and then scroll down to the Apple Server to Server notification section.
Copy the Apple Server Notification URL, and – in App Store Connect – add it as your new Production Server URL under App > App Information > App Store Server Notifications:
Note that, in your App Store Connect, you’ll see the Glassfy Server to Server Notification URL. Copy this, before overwriting it with RevenueCat’s URL: You’ll need it in the next step.
Go back to RevenueCat’s Apple Server to Server notification section. In the Apple Server Notification Forwarding URL, paste Glassfy’s URL. This will ensure that, as long as Glassfy is still operational, your data will be synced there as well:
Setup Offerings
Next you’ll replicate your Glassfy product configuration in the RevenueCat dashboard. RevenueCat has similar concepts to Glassfy, but uses different terms:
Glassfy | RevenueCat |
Products | Products |
SKU | Package |
Offerings | Offerings |
Permissions | Entitlement |
For a more complete understanding of RevenueCat’s production configuration model you can check out our docs or this video overview:
Update your app
SDK References
The Glassfy and RevenueCat SDKs are relatively similar. Use this reference to map your Glassfy methods with their RevenueCat equivalents:
Initialize the SDK
Glassfy
1Glassfy.initialize(apiKey: "YOUR_API_KEY", watcherMode: false)
RevenueCat
1Purchases.configure(withAPIKey: "YOUR_API_KEY")
Fetch offering
Glassfy
1Glassfy.offerings { (offers, err) in
2 if let offering = offers?["premium_offering"] {
3 // display your offering's skus
4 for sku in offering.skus {
5 // sku.extravars
6 // sku.product.localizedTitle
7 // sku.product.localizedDescription
8 // sku.product.price
9 }
10 }
11}
RevenueCat
1Purchases.shared.getOfferings { (offerings, error) in
2 if let packages = offerings?.offering(identifier: "premium_offering")?.availablePackages {
3 for package in packages {
4 let product = package.storeProduct
5 print("Product Title: \(product.localizedTitle)")
6 print("Product Description: \(product.localizedDescription)")
7 print("Product Price: \(product.price)")
8 }
9 }
10}
Purchase an SKU
Glassfy
1Glassfy.purchase(sku: premiumSku) { (transaction, e) in
2 // update app status accordingly
3 if let p = transaction?.permissions["premium"] {
4 if p.isValid {
5 // unlock aFeature
6 } else {
7 // lock aFeature
8 }
9 }
10}
RevenueCat
1Purchases.shared.purchase(package: package) { (transaction, customerInfo, error, userCancelled) in
2 if customerInfo?.entitlements["premium"]?.isActive == true {
3 // Unlock that great "pro" content
4 }
5}
Verify permissions
Glassfy
1Glassfy.permissions { (permission, err) in
2 // update app status accondingly
3 if let permissions = permission?.all {
4 for p in permissions {
5 switch p.permissionId {
6 case "premium":
7 if p.isValid {
8 // unlock aFeature
9 } else {
10 // lock aFeature
11 }
12 default:
13 print("Permission not handled");
14 }
15 }
16 }
17}
RevenueCat
1Purchases.shared.getCustomerInfo { (customerInfo, error) in
2 // access latest customerInfo
3 if customerInfo?.entitlements["premium"]?.isActive == true {
4 // Unlock that great "pro" content
5 }
6}
Test and release
After testing all of your changes, publish the updated version of your app. Subscribers will retain access across versions.
If your new release is rejected by Apple, be sure to tag us in a Tweet or LinkedIN post, and we’ll send you some sweet, sweet App Store Rejection Socks 🧦
Migrate existing data
Reach out to support@glassfy.io and ask for an export of all receipts associated with your app and user.
Call the POST /receipts REST API endpoint to iterate through the list, and push each purchase to RevenueCat. This will create the customer in RevenueCat, which will validate the receipt and keep the subscription up-to-date.
Note that any end user that is not imported can restore purchases in your app which will grant access to their content, and lead to their data being synced with RevenueCat.
Now the fun begins
Congrats! Now your app is migrated, you can take advantage of the powerful capabilities RevenueCat enables.
Discover new insights into your business with our powerful charts or create a fully native, backend driven paywall with RevenueCat Paywalls. You can run A/B tests to compare different paywalls with Experiments, or send different paywalls to different users with our flexible Targeting feature.
If you have any issues or questions we’re here to support you as well. You can find a lot of help on the RevenueCat Community, or reach out to our support team directly.
Migrating from Paddle and Glassfy to RevenueCat
RevenueCat has a native integration with Stripe, as well as its own (Stripe-powered) web billing solution: RevenueCat Billing and Web SDK. If you’re looking to migrate from Paddle and Glassfy to RevenueCat’s web billing solution, reach out to support and we’ll see how we can help.
We are considering a more direct integration with Paddle as well (and have built custom solutions for some customers), so don’t hesitate to reach out and discuss your particular needs.
A shoutout to the Glassy team
Last but not least, a quick shoutout from us to Marco Pifferi and the Glassfy team.
Even as competitors, we a shared a mission: Help developers make more money. Glassfy took a different approach to that challenge then we did, and – especially in terms of business model – made big and admirable bets. In the actual platform, Glassfy built some unique capabilities which – in time – you may see reflected in RevenueCat as well.
We’ll be sad to no longer run into them ‘in the arena’, but have nothing but respect for their willingness to work with us on giving their users a ‘soft landing’.
Buona fortuna with the acquisition and whatever comes next, Marco and team!
You might also like
- Blog post
Implementing in-app purchases and monetizing your Roku app: A step-by-step guide
A comprehensive guide to implementing and monetizing your Roku channel, from choosing the right strategy to technical tips and integration best practices.
- Blog post
How we built the RevenueCat SDK for Kotlin Multiplatform
Explore the architecture and key decisions behind building the RevenueCat Kotlin Multiplatform SDK, designed to streamline in-app purchases across platforms.
- Blog post
Inside RevenueCat’s engineering strategy: Scaling beyond 32,000+ apps
The strategies and principles that guide our global team to build reliable, developer-loved software