Nov 20, 2024

13 Features That Improve App Growth, Retention, and Reviews: Our Mobile App Toolbox

Add them to your app in 15 minutes

Today, we're launching a ready-to-deploy toolbox for iOS apps. It includes:

These features all incorporate advanced targeting usually reserved for the largest products with dedicated growth orgs. Features like smart notifications which wait until the user is holding their unlocked device to deliver, or checking for ideal battery level and network conditions before showing a paywall.

How does this work?

Critical Moments is a iOS SDK that makes it easy to add growth features to your app:

  1. Install our iOS SDK with our quick start guide.
  2. Download the toolbox template from this article, which defines the 13 features.
  3. Customize the template, enabling the features your app needs. You can customize strings, targeting and even fonts/colors, all in JSON, without writing code.
  4. Update it any time, over the air, to add features, update targeting, update messaging, and more.

Download the toolbox template

Once you've completed our quick start guide, simply replace your local config with this template to get started:

Download Toolbox Template

Each feature in the template is disabled to start, and each is optional. You can enable as many or as few as you like.

Features

Notifications to Improve 1 Day Retention and Onboarding

Many apps lose over 80% of their users on the first day, marking the single largest point of churn. Improving day-1 retention quickly increases active user counts, boosts revenue, and reduces the effective cost of acquisition per active user.

Day 1 is crucial for preventing churn. The user just downloaded your app, recognizes it, and has a current need that your app promised to fulfill. Often, this churn results from users getting distracted and not completing their onboarding. Carefully timed notifications can bring them back while they still remember your app and what they want from it.

This template includes two notifications:

  • onboardingReminder: A 15-minute notification, reminding the user to complete onboarding.
  • secondOnboardingReminder: A 1-day notification, reminding the user to complete onboarding. This notification attempts to deliver at an ideal moment when the user is holding their unlocked phone, using our Smart Notifications.
Detailed Instructions

To enable onboarding notifications:

  1. Ensure your app asks for notification permissions, as notifications can't be sent without user approval. Place this prompt at an optimal point in the app's UX, but not so late that users who leave quickly miss it. Notifications can't help improve onboarding if the permission prompt is shown after onboarding.
  2. Update the strings in onboardingReminder and secondOnboardingReminder with your app's name and value proposition.
  3. Send a completed_onboarding event in your app when the user completes onboarding. We don't want to spam users who have already completed onboarding with reminders, so this event will cancel the notifications.

Notifications to Reduce Churn

Churn is when users stop using an app over time. Reducing churn is a key part of any growth team's goals.

The template defines a notification named churnNotification. This notification will remind users who haven't used the app in 30 days to try it again. It uses our smart notifications to try and show the notification at an optimal moment: when the user is holding their unlocked device.

Detailed Instructions

To enable churn notifications:

  1. Ensure your app asks for notification permissions, as notifications can't be sent without user approval.
  2. Update the strings in churnNotification with your app name and value proposition.
  3. Optionally adjust the timing from 30 days to another value.
  4. Optionally add a second reminder at 45 or 60 days using churnNotification as a template.

Improve App Rating by Optimizing App Review Prompt

Asking users to rate your app at the right moment in their user journey can significantly increase your app store rating.

This template includes a smartReviewAction which checks optimal conditions and attempts to ask users to rate your app at the perfect moment. This includes:

  • Avoiding frequent requests: it waits 21 days between requests.
  • Not asking on old or buggy app releases.
  • Not asking if the device is in low power mode or the battery is below 20%.
  • Not asking on outdated versions of iOS.
  • Not asking if the user's default language is one your app is not localized in.
Detailed Instructions

To enable review prompts:

  1. Actions need a trigger in the config to initiate them. The template includes two example review triggers: usedKeyFeatureReviewTrigger and keyFeatureTwoReviewTrigger. Add an event to your app after a key feature use, then update one or both of these triggers to watch for that event.
  2. Set a minimum app version in the smartReviewAction condition for review prompts. Gradually increase this over time so you no longer prompt for reviews on older app versions.
  3. Update the smartReviewAction condition with the list of languages your app is localized in.
  4. Optional: consider further optimizations. We've published a detailed guide on how to improve your app rating through better targeting.

Increase Revenue by Optimizing Paywall Targeting

Showing your paywall—the UI to upsell free users to paid users—is a critical moment impacting your app's conversion rate and revenue.

Getting the timing right for these requests is crucial. Our template includes a smartPaywallReminderAction which checks for common issues and will only present your paywall at the optimal moment. These checks include:

  • Ensuring the device is online, as subscribing isn't possible offline.
  • Ensuring the user has completed any steps they should complete before being asked, like finishing onboarding.
  • Avoiding showing it too often—we default to once a week at most.
  • Delaying display when in low power mode, low data mode, or when the battery is low.
  • Showing it at the right moments, such as after a positive interaction with your app, like completing a goal.
  • Allowing over-the-air updates of this logic, including adding more targeting filters, without additional code or app reviews.
Detailed Instructions

To enable the smart paywall trigger:

  1. Add a deep link to your paywall using iOS in-app links, and set the link in the smartPaywallReminderAction action to this deep link URL.
  2. Add an event completed_onboarding to your code to check users complete onboarding before being shown a paywall. If you have other events, add those too, and then include them in the smartPaywallReminderAction condition.
  3. Set the has_paid_subscription property in code, so you don't ask users who already subscribe to upgrade.
  4. Enable one or more triggers to activate the action. Each of these triggers has comments about how to enable them in a "TODO" field in the template.
  5. usedKeyFeaturePaywallTrigger: shows the paywall after the user uses a key feature of your app.
  6. showPaywallDay7Trigger: shows the paywall 7 days after install.
  7. showPaywallDay21Trigger: shows the paywall 21 days after install.
  8. showPaywallMonthlyTrigger: shows the paywall once a month after the above.

Use Banner UI to Increase Conversion Rate

Paywalls can interrupt users and should not be shown too frequently.

A banner offers users an option to explore your paid offering without interrupting the rest of your app's UI. Banners are easy to dismiss if the user isn't interested.

This template includes a pro_banner action which shows a dismissible banner, linking to your paywall.

app banner
Detailed Instructions

To enable the conversion banner UI:

  1. Add a deep link to your paywall using iOS in-app links, and set the link in the paywallAction action to this deep link URL. Alternatively, this can be a web link to your pricing page if you allow web-based conversions as opposed to in-app purchases.
  2. Set the has_paid_subscription property in code, so you don't ask users who already subscribe to upgrade.
  3. Optionally, update the showProBanner trigger to control when and how often this announcement is shown. The current example presents it to unpaid users on every 3rd launch. However, you can update this to any logic you like.

Announcements With Banners and Embedded Browser

Sometimes you need to make important announcements to your users, such as brand updates, regulatory policy compliance, or pricing changes.

Critical Moments offers powerful in-app messaging capabilities with various methods to communicate with your users like banners, modals, web links, and alerts.

This template includes an announcement_banner and announcement_info_action utilizing a native banner UI alongside an in-app embedded browser to make announcements to users.

Detailed Instructions

To enable this announcement:

  1. Update the string in announcement_banner with a short description of the announcement.
  2. Update the link in announcement_info_action with a web URL providing more info about the announcement.
  3. Update the banner_announcement_trigger to control when and how often this announcement is shown. The current example checks a specific date range and will only show it once by checking eventCount. However, you can update this to any logic you like.

Announcements With Native UI

You can also make an announcement using our native modal UI. You can combine text, images, and links with fully native pixel-perfect rendering.

The template includes an announcement_modal with an example content, which you can update as needed:

app announcement
Detailed Instructions

To enable this announcement:

  1. Update the content of announcement_modal with the correct strings and images for your announcement.
  2. Update the link in announcement_info_action with a web URL providing more info about the announcement, or delete the More info button from announcement_modal if no web URL is needed.

Request Users Update their App if on an Old or Buggy Release

Bad app releases happen. Sometimes an ugly bug makes it past QA and into users' hands. Other times, an API you depend on is deprecated. In such cases, you're likelier to receive an influx of negative reviews and canceled subscriptions.

Critical Moments can ask impacted users to upgrade to the latest app version from the app store. You can target who sees the message by checking their app version, or even target it to only show for impacted users (e.g. a bug that only occures on iPads, or on iOS 17 or older). You can update this logic over the air, anytime, without app updates.

The template includes two versions: requestAppUpdate which allows users to bypass, and forceAppUpdate which forces users to upgrade.

Detailed Instructions

To enable app update requests:

  1. Update the app ID in update_app_action with your app ID and ensure the URL will launch to your app store page when tapped.
  2. Decide whether you want to force users to upgrade or simply request they do. Each has a separate trigger: requestAppUpdate and forceAppUpdate.
  3. Add the buggy release versions (e.g., '1.4.3') in the array in the condition within requestAppUpdate or forceAppUpdate. This will request an app update for specific version numbers.
  4. Set a minimum app version in the versionLessThan condition check within requestAppUpdate and forceAppUpdate to request an update for any app version number below the minimum.
  5. Optional: Is the release only buggy on certain devices, like iPads but not iPhones, or only on older iOS versions? Update the condition to only display the message to impacted users using our rich targeting system.

“What's New” UI After Major App Updates

After a major update, it can be helpful to inform users about new features in your app. This is especially helpful if there are design or layout changes, as users can react negatively to change without warning.

whats new UI

This feature is implemented in the sample config via whats_new_modal and whatsNewTrigger.

Detailed Instructions

To enable the "What's New" UI:

  1. Update the content of whats_new_modal to describe your app's update.
  2. Update the whatsNewTrigger app version and date conditions to ensure only users who updated to the appropriate version see it.

Remote User Messaging During Service Outages

Server outages happen, and when they do, apps can be inundated with negative reviews and customer support requests.

A proactive in-app message, shown before users encounter broken features, can help mitigate negative reviews and reduce customer service inquiries. Since the CM config is hosted separately from your API, it can be updated even when other services are down.

app outage

The template includes outage_warning and outage_trigger.

Detailed Instructions

To enable outage messaging:

  1. When an outage is occurring, set the condition in outage_trigger to true and update your config file over the air using remote update.
  2. When the outage is over, set the condition in outage_trigger to false and update your config file over the air using remote update.

Smart Feature Flags

Critical Moments allows you to create feature flags that can be updated over the air.

Going beyonde standard feature flags, Critical Moments Smart Feature Flags allow you to update the state of a flag based on the user's realtime context. For example, a flag might be true only if the battery is > 20%, or even based on the weather where the user is!

Detailed Instructions

To use smart feature flags:

  1. Add your feature flag to the conditions section of the config. There's an example exampleFeatureFlagIsNewPhone flag in the template you can start with.
  2. Use the feature flags in your code by calling the checkNamedCondition API.

Theme UI to Match your Brand

If you've used any UI from the sections above, you might want to update the theme to match your brand's colors and fonts. The default theme, named system, resembles Apple's native UI and will use your app's accent color if it is set.

You can either create a completely custom theme or choose from one of our 21 built-in themes.

app themes
Detailed Instructions

To implement themes:

  1. Follow the instructions in the themes section of the config to create a custom theme, or set the defaultThemeName to one of the built-in themes.

See the themes docs for more information.

Get Creative

Our template is just a starting point. Feel free to experiment and adjust it to align with your unique brand identity. The possibilities are endless, so get creative!

Get Started

Ready to dive in? Follow our quick start guide, and you'll be enabling toolbox features in no time.

Over time you'll find more and more reasons to use Critical Moments in your app.

The Mobile Growth SDK

Critical Moments helps you increase conversions, improve app ratings, and make bugs disappear.