Home
Blog
Authors
Dan Burcaw

Dan Burcaw is Co-Founder & CEO of Nami ML. He built a top mobile app development agency responsible for some of the most elite apps on the App Store and then found himself inside the mobile marketing industry after selling his last company to Oracle.

Latest articles by
Dan Burcaw
Written by
Dan Burcaw
5 Nov

Maximizing Revenue and User Engagement: Insights from Paywall AB Testing for Mobile Apps

Discover the insights from paywall A/B testing for mobile apps to maximize your revenue and user engagement. Learn how to find the right pricing structures, subscription models, and paywall designs to improve your content monetization strategy.

As more and more content providers move towards offering their services through mobile apps, paywalls have become an increasingly popular way to monetize content. A paywall is a digital barrier that prevents users from accessing certain content unless they pay a fee or subscribe to a service. While paywalls can be an effective way to generate revenue, they can also be a barrier to user engagement and retention. Paywall AB testing for a mobile app can help you determine what works best for your audience.

A/B testing is a method of comparing two versions of a web page, app screen, or other digital interface to determine which one performs better. In the context of paywalls for mobile apps, this might involve testing different pricing structures, subscription models, or the placement of the paywall itself. To A/B test, you randomly show different versions of the paywall to different groups of users and measuring their behavior.  This can provide valuable insights into what motivates users to pay for content and what turns them off.

Here are some key findings that can emerge from conducting paywall AB testing in a mobile app:

Price Sensitivity

One of the most important things to test when implementing a paywall is the pricing structure. Different users will have different levels of price sensitivity, and what works for one group may not work for another. Paywall AB testing can help you find the sweet spot. You want the price to be high enough to generate revenue but low enough to encourage subscriptions.

paywall ab testing for price sensitivity
Photographer: Angèle Kamp | Source: Unsplash

👉Read more: Paywall Performance: Key Metrics to Drive Revenue and Growth

Subscription Model

There are a variety of subscription models available, including one-time purchases, monthly or annual subscriptions, and freemium models that offer a limited amount of content for free. Testing different models can help you determine which one is most effective for your audience.

User Engagement

The placement and design of the paywall can have a big impact on user engagement. If the paywall is too intrusive, users may be turned off and abandon the app altogether. Conversely, if the paywall is too hidden, users may not even realize that they need to pay for content. Paywall AB testing can help you find the right balance.

Content Segmentation

Another important factor to consider when implementing a paywall is how you segment your content. Some content may be more valuable to certain users than others. And different users may be willing to pay for different types of content. By segmenting your content and testing different pricing structures for each segment, you can maximize your revenue.

Getting User Feedback from Paywall AB Testing

Finally, A/B testing can help you gather valuable feedback from your users. By tracking user behavior and conducting surveys or interviews, you can learn more about what motivates users to pay for content and what they find most valuable.

user feedback from paywall ab testing
user feePhotographer: AbsolutVision | Source: Unsplash

In conclusion, paywall AB testing can be a valuable tool for content providers looking to monetize their mobile app. By testing different pricing structures, subscription models, and paywall designs, you can find the right balance between revenue generation and user engagement. The key is to be willing to experiment to continually improve the user experience.

Want to save your developers valuable time while driving better results for your mobile app? Try Nami's no-code paywalls – the easiest way to implement paywalls. With Nami, you can run paywall A/B tests more quickly, gain valuable insights into user behavior, and continually optimize your revenue and engagement strategies. Sign up for Nami today and start seeing the benefits of no-code paywalls for your mobile app.


       

       if(window.strchfSettings === undefined) window.strchfSettings = {};
   window.strchfSettings.stats = {url: "https://nami.storychief.io/en/maximizing-revenue-user-engagement-paywall-ab-testing-mobile-apps?id=323455574&type=26",title: "Maximizing Revenue and User Engagement: Insights from Paywall AB Testing for Mobile Apps",id: "51b60849-ff21-4408-b48f-9543da3cae59"};
           (function(d, s, id) {
     var js, sjs = d.getElementsByTagName(s)[0];
     if (d.getElementById(id)) {window.strchf.update(); return;}
     js = d.createElement(s); js.id = id;
     js.src = "https://d37oebn0w9ir6a.cloudfront.net/scripts/v0/strchf.js";
     js.async = true;
     sjs.parentNode.insertBefore(js, sjs);
   }(document, 'script', 'storychief-jssdk'))
   
   👉Read more: Paywall AB Testing

Written by
Dan Burcaw
5 Nov

Mobile Growth: Why and How to Develop Subscription-Based App

Nami CEO Dan Burcaw joined the Mobile Growth & Pancakes podcast to talk subscriptions.

Nami CEO Dan Burcaw joined the Mobile Growth & Pancakes podcast to discuss subscription apps.

Getting your users to subscribe is so often the holy grail of many marketing departments, doing it right can be the differentiator in your way to success. In this episode of Mobile Growth & Pancakes, Esther Shatz is joined by Dan Burcaw, Co-Founder and CEO of Nami ML, to discuss strategies and tactics related to subscription-based apps.


       

       if(window.strchfSettings === undefined) window.strchfSettings = {};
   window.strchfSettings.stats = {url: "https://nami.storychief.io/en/mobile-growth-develop-subscription-based-apps?id=371032162&type=26",title: "Mobile Growth: Why and How to Develop Subscription-Based App",id: "51b60849-ff21-4408-b48f-9543da3cae59"};
           (function(d, s, id) {
     var js, sjs = d.getElementsByTagName(s)[0];
     if (d.getElementById(id)) {window.strchf.update(); return;}
     js = d.createElement(s); js.id = id;
     js.src = "https://d37oebn0w9ir6a.cloudfront.net/scripts/v0/strchf.js";
     js.async = true;
     sjs.parentNode.insertBefore(js, sjs);
   }(document, 'script', 'storychief-jssdk'))
   

👉Read more: Monetizing Digital Products with Subscriptions
   

Written by
Dan Burcaw
5 Nov

SKError Code Unknown & Other StoreKit SKError Cases

Understanding how to resolve StoreKit's SKError Code unknown error case plus a quick overview of all SKError.Code enumeration cases.

SKError.Code.unknown

Nothing is more frustrating than an error code that isn’t helpful. Such is the case with Apple StoreKit’s SKError.Code enumeration’s unknown case.  This is a catch-all error code if one of the long list of error codes doesn’t match.

Apple suggests two things if this error is encountered:

  • Development: Create a use a new App Store Connect test user
  • Production: Sign-out then back in to App Store

There are likely other undocumented reasons why this error might get thrown. If neither of the potential resolutions above do not fix the issue, please  reach out and we’ll try to help.

All SKError.Code cases

In addition to SKError Code Unknown, here is the complete SKError.Code enumeration list:

  • clientInvalid: client not allowed to perform the attempted action
  • paymentCancelled: User canceled a payment request
  • paymentInvalid: one of the payment parameters not recognized by the App Store
  • paymentNotAllowed: user not allowed to authorize payments
  • storeProductNotAvailable: requested product is not available on the store
  • cloudServicePermissionDenied: user not allowed to access Cloud service
  • cloudServiceNetworkConnectionFailed: device could not connect to network
  • privacyAcknowledgementRequired: user has not acknowledged Apple’s privacy policy for Apple Music
  • unauthorizedRequestData: app attempting to use properly without required entitlement
  • invalidOfferIdentifer: offer identifier is invalid
  • invalidOfferPrice: price specified in App Store Connect is no longer valid
  • invalidSignature: signature in a payment discount isn’t valid
  • missingOfferParams: parameters are missing in a payment discount
  • ineligibleForOffer: user is ineligible for subscription offer
  • overlayCancelled: indicates cancellation of an overlay
  • overlayInvalidConfiguration:  the overlay’s configuration is invalid
  • overlayPresentedInBackgroundScene: overlay displayed in background scene
  • overlayTimeout: overlay timed out
  • unsupportedPlatform: current platform doesn’t support overlays
  • unknown: unknown or unexpected error occurred

👉Read more: StoreKit Payment Sheet Failed: PassbookServiceUI Crash

A Final Word About StoreKit

If you are a Nami customer, you generally don’t need to worry about StoreKit implementation details since we take care of it for you. However, the Nami SDK does  surface certain StoreKit messages for debugging purposes depending on the log level.


       

       if(window.strchfSettings === undefined) window.strchfSettings = {};
   window.strchfSettings.stats = {url: "https://nami.storychief.io/en/skerror-code-unknown-skerror-cases?id=1832936048&type=26",title: "SKError Code Unknown & Other StoreKit SKError Cases",id: "51b60849-ff21-4408-b48f-9543da3cae59"};
           (function(d, s, id) {
     var js, sjs = d.getElementsByTagName(s)[0];
     if (d.getElementById(id)) {window.strchf.update(); return;}
     js = d.createElement(s); js.id = id;
     js.src = "https://d37oebn0w9ir6a.cloudfront.net/scripts/v0/strchf.js";
     js.async = true;
     sjs.parentNode.insertBefore(js, sjs);
   }(document, 'script', 'storychief-jssdk'))
   
   👉App Store Error ITMS-9000 Invalid Binary Fix

Written by
Dan Burcaw
4 Nov

Fixing Error ITMS-9000 on Apple App Store

Error ITMS-9000, also known as Invalid Binary, is an Apple App Store error that developers often encounter during the submission process. This error signifies that the binary submitted does not meet the necessary requirements for distribution on the App Store. Resolving Error ITMS-9000 involves identifying the configuration issues in Xcode, provisioning profiles, or project settings to ensure the binary meets Apple’s standards.

What Causes Error ITMS-9000?

Error ITMS-9000 occurs when the app’s binary is improperly configured or fails to meet certain technical criteria set by Apple. This includes issues with the app’s entitlements, missing or mismatched provisioning profiles, or outdated build settings in Xcode. Familiarizing yourself with Apple’s requirements for app binaries can help prevent this error during submission.

Common Scenarios for Error ITMS-9000 - Invalid Binary

Developers frequently encounter this error in the following situations:

  1. Mismatched or Missing Provisioning Profiles: Submissions can fail if the binary isn’t properly signed with a valid provisioning profile.
  2. Incorrect App Entitlements: If entitlements do not match what is configured in App Store Connect, the submission may be rejected.
  3. Outdated or Improper Xcode Build Settings: Incompatible build settings or outdated SDKs in Xcode can trigger this error.
  4. Incomplete Metadata or Missing Assets: App metadata or required assets that are incomplete or missing often result in an Invalid Binary error.

👉Read more: SKError Code Unknown SKError Cases

Step-by-Step Solutions for Error ITMS-9000

Solution 1: Verify Provisioning Profiles and Code Signing

  • Purpose: Ensures that the app binary is properly signed and meets Apple’s distribution requirements.
  • Steps:
  1. In Xcode, go to Signing & Capabilities and ensure the correct provisioning profile is selected.
  2. Confirm that both the development and distribution profiles are active and valid.
  3. Rebuild the app with the correct provisioning profile and retry submission.
  • Result: Valid provisioning profiles eliminate most code-signing issues, allowing the binary to be properly validated.

Solution 2: Confirm App Entitlements in Xcode

  • Purpose: Ensures that the entitlements match the configurations in App Store Connect.
  • Steps:
  1. In Xcode, navigate to the Signing & Capabilities tab for the project.
  2. Confirm that all required entitlements (e.g., push notifications, iCloud) are correctly configured.
  3. Ensure these match the capabilities listed in App Store Connect.
  • Result: Matching entitlements prevent configuration mismatches and submission rejections.

Solution 3: Update Build Settings and SDK Version in Xcode

  • Purpose: Updates the project to meet Apple’s latest build requirements.
  • Steps:
  1. Open the Build Settings tab in Xcode.
  2. Ensure that the Base SDK is set to the latest iOS version.
  3. Confirm that the Deployment Target is compatible with Apple’s requirements for your app.
  4. Rebuild the binary and resubmit.
  • Result: Updated build settings ensure compatibility with App Store requirements and minimize submission errors.

Solution 4: Check Metadata and Assets in App Store Connect

  • Purpose: Ensures that all necessary app information and assets are complete and accurately filled out.
  • Steps:
  1. In App Store Connect, check the app’s metadata (description, screenshots, icons).
  2. Verify that all required assets are uploaded in the correct resolutions.
  3. Double-check localization settings if the app is available in multiple languages.
  • Result: Complete and accurate metadata helps prevent binary rejection due to missing information.

Solution 5: Use Application Loader for Direct Binary Uploads

  • Purpose: Sometimes bypassing Xcode submission and using Application Loader can help when facing submission errors.
  • Steps:
  1. Export the app archive from Xcode and save it to your machine.
  2. Use Application Loader to upload the binary directly to App Store Connect.
  3. Follow any additional instructions provided by Application Loader if errors occur.
  • Result: Uploading via Application Loader can sometimes resolve Xcode submission issues.

👉Read more: The App Store Rejected My App, Now What

Conclusion

Error ITMS-9000 - Invalid Binary, often arises from issues with provisioning profiles, entitlements, build settings, or incomplete metadata. By verifying profiles, checking entitlements, updating build settings, reviewing metadata, and considering Application Loader for uploads, developers can resolve this error and submit successfully.

Nami’s low-code solutions can streamline app configuration and deployment, handling these technicalities so you can focus on the core aspects of your app. Learn more at NamiML.

Written by
Dan Burcaw
4 Nov

How to Fix Error Code 3 on Google Play

Error Code 3, also known as Billing Unavailable, is a frequent issue developers encounter when testing in-app purchases or subscriptions on Google Play. This error typically indicates that the billing service is inaccessible on the device, often due to configuration issues or limitations in the testing environment. Addressing Error Code 3 effectively allows developers to ensure that Google Play Billing integration works seamlessly across all devices.

What Causes Error Code 3?

Error Code 3 typically arises when the billing service cannot be accessed due to configuration, network, or device limitations. This may happen if the app isn’t published on a testing track in the Google Play Console, or if the device does not support Google Play services (e.g., certain restricted or non-Android devices). Additionally, attempting to test billing functionality on an emulator without Google Play Store integration will often lead to this error.

Knowing these causes allows developers to apply focused solutions to rectify the error.

Common Scenarios for Error Code 3 - Billing Unavailable

The error frequently appears in the following situations:

  1. Testing on Unpublished Development Builds: Development builds without publishing in Play Console may lack access to billing functionality.
  2. Device-Specific Limitations: Testing on devices without Google Play services, like some emulators or restricted Android versions.
  3. Lack of Google Play Store Access: Devices that do not have the Google Play Store installed cannot access the billing service.
  4. Network Issues: Testing in regions or under network conditions that restrict access to Google Play services.

Step-by-Step Solutions for Error Code 3

Solution 1: Publish the App to an Internal or Closed Testing Track

  • Purpose: Allows billing functionality to be tested in a controlled environment by ensuring that the app is accessible through the Play Console.
  • Steps:
  1. Open the Google Play Console and navigate to App Releases.
  2. Set up an Internal Testing Track or Closed Testing Track for the app.
  3. Add testing accounts and publish the app to this track.
  • Result: This enables the app to access Google Play Billing, as it’s available on an approved track for testing.

Solution 2: Test on a Physical Device with Google Play Store Installed

  • Purpose: Emulators or devices without Google Play Store often lack access to billing services.
  • Steps:
  1. Test in-app purchases on a physical Android device that has the Google Play Store installed.
  2. Ensure that the device has the latest version of Google Play services installed.
  • Result: Testing on a real device with Google Play Store ensures compatibility with billing services.

Solution 3: Verify Google Play Services Availability on the Device

  • Purpose: Google Play services are required to enable billing functionality, and devices without it will not support in-app purchases.
  • Steps:
  1. On the testing device, go to Settings > Apps > Google Play Services.
  2. Confirm that Google Play services are installed and updated.
  • Result: Ensures that the device can access billing functions by confirming Google Play services are operational.

Solution 4: Clear Cache and Data for Google Play Store and Google Play Services

  • Purpose: Helps refresh the billing data and configurations by clearing cached information.
  • Steps:
  1. On the device, go to Settings > Apps > Google Play Store.
  2. Go to Storage and select Clear Cache and Clear Data.
  3. Repeat the process for Google Play Services.
  4. Restart the device and retry the purchase flow.
  • Result: This often resolves errors arising from outdated or mismatched cached billing data.

Solution 5: Ensure a Stable Network Connection

  • Purpose: A stable internet connection is necessary to establish communication with Google Play’s billing service.
  • Steps:
  1. Switch to a stable Wi-Fi or cellular network.
  2. Confirm that the device can access other Google services, such as the Play Store.
  • Result: Testing with a stable network ensures uninterrupted billing communication with Google servers.

Conclusion

Error Code 3 - Billing Unavailable, is a common issue that often stems from limitations in testing environments, device compatibility, or network conditions. By following these steps—publishing to a testing track, testing on devices with Google Play Store, verifying Google Play services, clearing cache, and ensuring network stability—developers can effectively troubleshoot and resolve this error.

With Nami’s low-code solutions, developers can skip the hassle of configuring and updating in-app billing, providing a ready-to-go environment that keeps your app’s billing setup in check. Discover more at NamiML.