<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: RevenueCat</title>
    <description>The latest articles on DEV Community by RevenueCat (@revenuecat).</description>
    <link>https://dev.to/revenuecat</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F6567%2Fa19bc59d-fa27-4265-ba9c-8f61eb00b12e.jpeg</url>
      <title>DEV Community: RevenueCat</title>
      <link>https://dev.to/revenuecat</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/revenuecat"/>
    <language>en</language>
    <item>
      <title>An iOS developer's guide to Apple's Fiscal Calendar (2024)</title>
      <dc:creator>Peter @ RevenueCat</dc:creator>
      <pubDate>Fri, 12 Jan 2024 15:22:53 +0000</pubDate>
      <link>https://dev.to/revenuecat/an-ios-developers-guide-to-apples-fiscal-calendar-2024-5fg2</link>
      <guid>https://dev.to/revenuecat/an-ios-developers-guide-to-apples-fiscal-calendar-2024-5fg2</guid>
      <description>&lt;p&gt;If you have an iOS app, understanding and planning around Apple's fiscal calendar is key to effective financial management.&lt;/p&gt;

&lt;p&gt;This is a concise guide to help you plan your financial year effectively. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding Apple’s Fiscal Year:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apple's fiscal year typically runs for 364 days, segmented into four quarters.&lt;/li&gt;
&lt;li&gt;Each quarter includes one 35-day fiscal month and two 28-day fiscal months.&lt;/li&gt;
&lt;li&gt;Roughly every five years, an extra week is added to the fiscal year to align with the 365-day calendar year.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Developer Payment Schedule:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apple generally pays developers 33 days post the end of a fiscal month.&lt;/li&gt;
&lt;li&gt;Exception: The payment for the November fiscal month might be processed earlier, possibly for financial reporting purposes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Fiscal Year 2024 Payment Dates:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;October 2023: Payment due December 7, 2023&lt;/li&gt;
&lt;li&gt;November 2023: Payment due January 4, 2024&lt;/li&gt;
&lt;li&gt;December 2023: Payment due February 1, 2024&lt;/li&gt;
&lt;li&gt;January 2024: Payment due March 7, 2024&lt;/li&gt;
&lt;li&gt;February 2024: Payment due April 4, 2024&lt;/li&gt;
&lt;li&gt;March 2024: Payment due May 2, 2024&lt;/li&gt;
&lt;li&gt;April 2024: Payment due June 6, 2024&lt;/li&gt;
&lt;li&gt;May 2024: Payment due July 4, 2024&lt;/li&gt;
&lt;li&gt;June 2024: Payment due August 1, 2024&lt;/li&gt;
&lt;li&gt;July 2024: Payment due September 5, 2024&lt;/li&gt;
&lt;li&gt;August 2024: Payment due October 3, 2024&lt;/li&gt;
&lt;li&gt;September 2024: Payment due November 7, 2024&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Additional Points to Consider:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apple's fiscal calendar and payment dates are generally consistent worldwide, though local bank processing times can vary.&lt;/li&gt;
&lt;li&gt;Unlike Google, which pays developers on the 15th of each month, Apple has a distinct 33-day post-fiscal month schedule.&lt;/li&gt;
&lt;li&gt;To receive payments, ensure a valid Paid Applications Agreement, proper banking information in App Store Connect, and adherence to the minimum payment threshold for each region.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more detailed insights and additional resources on managing your app revenues and staying updated with Apple's fiscal policies, check out &lt;a href="https://www.revenuecat.com/blog/growth/apple-fiscal-calendar-year-payment-dates/"&gt;our comprehensive blog post&lt;/a&gt;. This summary is designed to provide you with the essentials, making it easier to manage your finances and plan ahead effectively.&lt;/p&gt;

</description>
      <category>ios</category>
      <category>apple</category>
      <category>marketing</category>
    </item>
    <item>
      <title>Google App Campaigns for Developers: A Quick Guide</title>
      <dc:creator>Peter @ RevenueCat</dc:creator>
      <pubDate>Wed, 28 Jun 2023 10:59:17 +0000</pubDate>
      <link>https://dev.to/revenuecat/google-app-campaigns-for-developers-a-quick-guide-2413</link>
      <guid>https://dev.to/revenuecat/google-app-campaigns-for-developers-a-quick-guide-2413</guid>
      <description>&lt;p&gt;Google app campaigns (GAC) are a critical tool for app promotion, allowing developers to increase app visibility across Google's inventory, including Google Search, YouTube, Google Play, and the Google Display Network. However, getting the best results requires more than just a set-it-and-forget-it approach. In this guide, we'll cover the key insights developers should know to make the most of their GAC.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip 1: Understanding Campaign Optimization
&lt;/h2&gt;

&lt;p&gt;Remember that the conversion event you choose directly influences how Google's algorithm optimizes your campaign. Depending on your app’s objectives, you can choose anything from installs to in-app events such as purchases or subscriptions. Be careful to choose a high-funnel event for new campaigns and then gradually move towards lower-funnel events.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip 2: Creative is King
&lt;/h2&gt;

&lt;p&gt;Creatives are key to the success of your campaign. Consider using a mix of formats and sizes, including landscape, portrait, and square formats. Don’t shy away from using text, but keep it short and snappy. Google's algorithms will mix and match to find the best performing combinations, so experiment with different variants.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip 3: Localization and Internationalization
&lt;/h2&gt;

&lt;p&gt;Localizing your campaign not only means translating the language but also adapting creatives to cultural nuances. The more you tailor your ad to local audiences, the better results you'll see.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip 4: Budget and Bidding
&lt;/h2&gt;

&lt;p&gt;Bids are set per event, so a higher bid means your ad will be served more frequently. However, to ensure effective learning and optimization, Google recommends spending at least 10 times your target cost-per-install (CPI) per day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip 5: Performance Monitoring
&lt;/h2&gt;

&lt;p&gt;Use tools like Google's API, third-party partners, or specific reports to monitor campaign performance. Spend time analyzing the "campaigns" tab for more granular insights. Remember, the more data you can gather and analyze, the better.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip 6: Measuring Incrementality
&lt;/h2&gt;

&lt;p&gt;Google app campaigns use a “modeled” conversion system, which may or may not accurately reflect true performance. To ensure actual impact, it's recommended to run incrementality analysis or use media mix modeling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip 7: Search Keywords
&lt;/h2&gt;

&lt;p&gt;Although GAC doesn't allow you to select or report on specific keywords, you can use negative keyword lists to exert some control. Moreover, understand that a significant number of conversions may come from searches on your own app name, inflating campaign performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip 8: Pre-registration Campaigns
&lt;/h2&gt;

&lt;p&gt;Promoting your app before launch is possible with Google's pre-registration campaigns. However, be mindful of the budget allocation as pre-registrations may not convert into actual installs later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip 9: Other Considerations
&lt;/h2&gt;

&lt;p&gt;Ensure your campaign structure and location settings are well-optimized to avoid spreading your budget thin or attracting unwanted inventory. You may also consider running "video only" campaigns or using Firebase for audience exclusion.&lt;/p&gt;

&lt;h2&gt;
  
  
  In Conclusion
&lt;/h2&gt;

&lt;p&gt;Google app campaigns, while offering tremendous potential, require a strategic approach, patience, and continuous monitoring. By choosing your optimization carefully, experimenting with creatives, and diligently analyzing performance, you can turn GAC into a powerful tool for promoting your app.&lt;/p&gt;

&lt;p&gt;This tips blog is a summary of our &lt;a href="https://www.revenuecat.com/blog/growth/a-practical-guide-to-google-app-campaigns/"&gt;definitive guide to Google app campaigns&lt;/a&gt; — so if you're looking to delve deeper, check it out!&lt;/p&gt;

</description>
      <category>marketing</category>
      <category>android</category>
    </item>
    <item>
      <title>RevenueCat now supports Unity Package Manager</title>
      <dc:creator>Toni Rico</dc:creator>
      <pubDate>Fri, 10 Mar 2023 09:21:25 +0000</pubDate>
      <link>https://dev.to/revenuecat/revenuecat-now-supports-unity-package-manager-4lo5</link>
      <guid>https://dev.to/revenuecat/revenuecat-now-supports-unity-package-manager-4lo5</guid>
      <description>&lt;p&gt;At RevenueCat, we believe that making our SDKs as easy to use as possible is of paramount importance. Developers need to have a great experience and be able to start earning money without any of the headaches associated with the stores. &lt;/p&gt;

&lt;p&gt;One of the first things that developers need to do is to install our SDK in their app. Each platform has different systems. For Unity, our SDK has always been distributed as an asset package (a .unitypackage file). Now, we are glad to announce that, starting on version 4.6.4 of our SDK, we have added support for Unity Package Manager (UPM) and have set it as our preferred distribution system. &lt;/p&gt;

&lt;p&gt;We are using &lt;a href="https://openupm.com/" rel="noopener noreferrer"&gt;OpenUPM&lt;/a&gt; as the registry for our dependency. You can find more details on how to install our SDK using UPM in our &lt;a href="https://www.revenuecat.com/docs/unity#installation" rel="noopener noreferrer"&gt;installation docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using an asset package vs Unity Package Manager
&lt;/h2&gt;

&lt;p&gt;First, we should understand the differences between both distribution systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Asset package
&lt;/h3&gt;

&lt;p&gt;To summarize, &lt;a href="https://docs.unity3d.com/Manual/AssetPackages.html" rel="noopener noreferrer"&gt;asset packages&lt;/a&gt; are compressed files containing Unity assets, such as images, textures or scripts. This container can be imported into your Unity project, which will add all the assets to your assets directory. This is a relatively simple import process but it has its downsides, like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No version management support&lt;/strong&gt;. A .unitypackage doesn’t have a concept of version so it’s more difficult to keep track of the current version, update the dependency, and other common tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No dependency management support&lt;/strong&gt;. It doesn’t provide any system to set up a chain of dependencies if you depend on other packages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependencies live alongside other assets&lt;/strong&gt;. This means developers can accidentally modify the dependency in ways unintended by the authors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The asset package file for RevenueCat can be downloaded from our Unity SDK Github repo &lt;a href="https://github.com/RevenueCat/purchases-unity/releases" rel="noopener noreferrer"&gt;releases page&lt;/a&gt; and you can just import it into your project, which looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2FZMLy6swgd-TzFz2vOvLxPD8TiqzGkPOzpsHjFTXDUUzxzJJ7TmoHP-1umCfS_H9qhejr4gr74B_sWw6prVqwTa9PHaiMWv5R_Q0ZFtPmcEt94TftfwmQlDial8vrNpHGDp7cp-OGn7kN2g9VHKUpcQ" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2FZMLy6swgd-TzFz2vOvLxPD8TiqzGkPOzpsHjFTXDUUzxzJJ7TmoHP-1umCfS_H9qhejr4gr74B_sWw6prVqwTa9PHaiMWv5R_Q0ZFtPmcEt94TftfwmQlDial8vrNpHGDp7cp-OGn7kN2g9VHKUpcQ" width="488" height="647"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 1. Importing the RevenueCat Unity SDK as an asset package file.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Unity Package Manager
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://docs.unity3d.com/Manual/Packages.html" rel="noopener noreferrer"&gt;Unity Package Manager&lt;/a&gt; is a system released by Unity back in 2017. It’s based on npm and it allows the distribution of packages through a package registry, where these dependencies are published. &lt;/p&gt;

&lt;p&gt;This distribution system addresses the downsides of .unitypackages by providing version management support, dependency management support, and separating the dependencies from the rest of your project (among other advantages). &lt;/p&gt;

&lt;p&gt;Package maintainers can distribute packages using options such as npm’s registry, creating their own registry, or using OpenUPM’s registry. Then, users of a package just need to add the registry to their project which will allow them to see and install all the packages there. You can find more details on how to do this &lt;a href="https://www.revenuecat.com/docs/unity#install-using-openupm" rel="noopener noreferrer"&gt;on our Unity SDK installation docs&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;At RevenueCat, we publish our package using the OpenUPM registry. You can add this registry to your project in your Project Settings &amp;gt; Package Manager section.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2FbAteA-0XDwN6qpVLvE5yDkCwtpT7fvvfP2bBr5FI7uTpdmwrzAk8NUXNy4kHiHb2diwa-xVL8n515hTHsO0HzEk1wo4PKTgwPC_ZOAqVPLunMIi4sVS80x3fnng5u1IpsCUcOPjMfnd2ZrPEA572ig" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2FbAteA-0XDwN6qpVLvE5yDkCwtpT7fvvfP2bBr5FI7uTpdmwrzAk8NUXNy4kHiHb2diwa-xVL8n515hTHsO0HzEk1wo4PKTgwPC_ZOAqVPLunMIi4sVS80x3fnng5u1IpsCUcOPjMfnd2ZrPEA572ig" width="1570" height="1104"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 2. Importing the RevenueCat Unity SDK using Unity Package Manager.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As you can see, an asset package has the advantage of being simpler to import, but has several downsides when you want to distribute a software package — downsides that UPM manages to solve. At RevenueCat, we offer both distribution systems, so developers can import our SDK as they prefer — though we recommend using UPM.&lt;/p&gt;

&lt;h2&gt;
  
  
  The migration process
&lt;/h2&gt;

&lt;p&gt;We’ve been distributing our Unity SDK as an asset package for a while, so now we will explain the process we had to follow to support UPM. We followed &lt;a href="https://docs.unity3d.com/Manual/CustomPackages.html" rel="noopener noreferrer"&gt;Unity’s documented process&lt;/a&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Adapting our code to support UPM
&lt;/h3&gt;

&lt;p&gt;We wanted to make sure developers could use our SDK as a UPM package but we also wanted to allow them to continue using it as an asset package if they preferred. First of all, we had to add a few things to make our SDK compatible with UPM:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First, we added the &lt;a href="https://docs.unity3d.com/Manual/upm-manifestPkg.html" rel="noopener noreferrer"&gt;package manifest&lt;/a&gt; with the information of our package, like version number and changelog links. &lt;/li&gt;
&lt;li&gt;We added some &lt;a href="https://docs.unity3d.com/Manual/ScriptCompilationAssemblyDefinitionFiles.html" rel="noopener noreferrer"&gt;assembly definition files&lt;/a&gt; to the folders containing the scripts of our SDK. This allows developers to access the scripts in our package in a much more organized way.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s it! Now we could start distributing our package. Pretty easy right? Well, not quite yet. We had two more problems to solve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Our SDK’s dependency, Google’s External Dependencies Manager for Unity (EDM4U), is not available through UPM.&lt;/li&gt;
&lt;li&gt;We want to make sure we test both distribution systems to avoid any regressions. This was not straightforward.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Google’s External Dependencies Manager for Unity (EDM4U)
&lt;/h2&gt;

&lt;p&gt;Our SDK has a dependency with Google’s External Dependencies Manager for Unity (&lt;a href="https://github.com/googlesamples/unity-jar-resolver" rel="noopener noreferrer"&gt;EDM4U&lt;/a&gt;). This is used to resolve our SDK dependencies with our iOS and Android SDKs on each respective platform. &lt;/p&gt;

&lt;p&gt;Google officially only supports distributing this dependency as an asset package and they don’t distribute it officially in any package registry available through UPM. When we distribute our SDK as an asset package, we also include the EDM4U dependency within the package but adding this dependency through UPM was trickier due to the lack of UPM support from the library.&lt;/p&gt;

&lt;p&gt;For now, we are asking developers to download the EDM4U asset package and add it to their project when they use our SDK through UPM. This can have problems if the specific EDM4U version doesn’t work with our SDK. We plan to add some functionality to the Unity Editor to download this library and make sure it matches our SDK.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing both distribution systems
&lt;/h2&gt;

&lt;p&gt;Part of our engineering culture is to make sure our code is reliable, and automated tests are an intrinsic part to make sure that’s true. Since we are supporting two distribution systems, we need to make sure both work as expected. &lt;/p&gt;

&lt;p&gt;Some of the things we need to test are making sure our SDK can be imported successfully as an asset package and through UPM, and making sure our API is accessible and functional when using either system. In our Unity SDK, we have what we call API tests. These tests make sure the API of our SDK can’t be changed by accident. Since we wanted to offer both distribution systems, we had to make sure both systems had reliable API tests.&lt;/p&gt;

&lt;p&gt;In order to run API tests, we have to add our package to a Unity project, call each method in our API and make sure the project compiles correctly. Additionally, to create an asset package, we need to add the assets that belong to the package to a unity project and export it from that project. That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We need a Unity project in order to export the asset package.&lt;/li&gt;
&lt;li&gt;We need a Unity project to run API tests with a project that imports our SDK as an asset package.&lt;/li&gt;
&lt;li&gt;We need a Unity project to run API tests with a project that imports our SDK from UPM.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before adding UPM support, we already had the first two projects. Note that we can’t reuse the same project easily since adding the same sources multiple times to the same project would cause collision errors in Unity. &lt;/p&gt;

&lt;p&gt;After adding UPM support we had to either create a new project that used UPM or reuse the existing projects. Additionally, since we recommend using UPM, we wanted our main development Unity project to use UPM to import the SDK, to make sure we were using the same as developers use.&lt;/p&gt;

&lt;p&gt;We decided to reuse the existing projects to avoid creating extra unnecessary projects. Currently our setup consists of two projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Subtester&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;This is the project we use to test our SDK. &lt;/li&gt;
&lt;li&gt;It imports our SDK using a local package through UPM (this means we get access to the latest changes in the SDK immediately).&lt;/li&gt;
&lt;li&gt;We run automated API tests in this project. &lt;/li&gt;
&lt;li&gt;We use it to export the asset package to be used by the other project.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;IntegrationTests&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;It imports our SDK using an asset package generated from Subtester.&lt;/li&gt;
&lt;li&gt;We run automated API tests in this project.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;The Subtester project does a lot of things. This project uses the SDK through UPM, so the SDK sources are not part of the assets. The issue is that in order to be able to export an asset package from this project to be able to distribute it as a unitypackage file, the sources need to be part of the assets of the project. In order to do this, we created a script that runs during our automation processes. This script:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adds the SDK sources as assets of the project.&lt;/li&gt;
&lt;li&gt;Removes the UPM dependency with our SDK. This is necessary, otherwise the project won’t compile since it will have duplicated sources (from the assets and from UPM).&lt;/li&gt;
&lt;li&gt;Downloads the latest version of EDM4U and adds it as assets of the project.&lt;/li&gt;
&lt;li&gt;Finally, it creates an asset package with our SDK and EDM4U included.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The IntegrationTests project is pretty straightforward. It’s a simple project that includes our API tests. When running automated tests, we import the asset package generated from Subtester beforehand and then compile iOS and Android projects that include these API tests. &lt;/p&gt;

&lt;h2&gt;
  
  
  Distributing our package: OpenUPM vs npm registry
&lt;/h2&gt;

&lt;p&gt;Another decision we had to make when adding UPM support was where to publish our package. Our investigation led us to two popular registries: &lt;a href="https://www.npmjs.com/" rel="noopener noreferrer"&gt;npm’s official registry&lt;/a&gt; or OpenUPM’s registry. Both are very popular but we decided to publish in OpenUPM for now. Reasons for that are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenUPM has automations to automatically detect new versions of the SDK released in Github, so we can avoid adding automations to publish ourselves.&lt;/li&gt;
&lt;li&gt;OpenUPM is oriented towards unity developers, whereas npmjs is more broad.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We might revisit this decision in the future or maybe even publish to both.&lt;/p&gt;

&lt;h2&gt;
  
  
  Have any feedback?
&lt;/h2&gt;

&lt;p&gt;In this post we described the process we followed in order to add UPM support to our SDK. We are excited for you to try it out! &lt;a href="https://community.revenuecat.com/" rel="noopener noreferrer"&gt;Please let us know if you have any feedback&lt;/a&gt; as it greatly helps us to improve our SDKs.&lt;/p&gt;

</description>
      <category>unity3d</category>
      <category>sdk</category>
      <category>revenuecat</category>
    </item>
    <item>
      <title>How we migrated our SDK docs to DocC at RevenueCat</title>
      <dc:creator>Andy Boedo</dc:creator>
      <pubDate>Mon, 06 Mar 2023 11:46:12 +0000</pubDate>
      <link>https://dev.to/revenuecat/how-we-migrated-our-sdk-docs-to-docc-at-revenuecat-3dai</link>
      <guid>https://dev.to/revenuecat/how-we-migrated-our-sdk-docs-to-docc-at-revenuecat-3dai</guid>
      <description>&lt;p&gt;Early in 2022, we migrated our documentation for iOS at RevenueCat from Jazzy to DocC, and we wanted to share the reasons behind the switch and the process we went through to make it happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why move to DocC?
&lt;/h2&gt;

&lt;p&gt;At RevenueCat, we were interested in DocC since it was announced at WWDC ‘21. It seemed like a promising format, with a clean look that’s familiar to any iOS developer, and lots of potential for documentation that truly guides the reader. &lt;/p&gt;

&lt;p&gt;Our docs were previously generated using &lt;a href="https://github.com/realm/jazzy" rel="noopener noreferrer"&gt;Jazzy&lt;/a&gt;, a great open-source library. While we never had issues with Jazzy, Apple’s DocC promised noticeable advantages when compared to Jazzy.&lt;/p&gt;

&lt;p&gt;Here are a few of the reasons why we decided to make the move to DocC. &lt;/p&gt;

&lt;h3&gt;
  
  
  Format and navigation
&lt;/h3&gt;

&lt;p&gt;DocC allows you to organize the information for the reader, allowing for a nicer introduction into what the SDK does. Most doc generators simply show you a main page and access to all symbols, so new readers don’t know where the entry points to the SDK are and how the symbols relate to each other. &lt;/p&gt;

&lt;p&gt;This however can easily be done with DocC: you can generate Topics and better organize the docs. This way, the symbols can be cleanly organized into logical sections, like “Configure the SDK” and “Displaying Products”, instead of a disorganized list of all the things the SDK can do. &lt;/p&gt;

&lt;p&gt;The resulting documentation is more readable and the overall design is more polished. It even supports Dark Mode! &lt;/p&gt;

&lt;p&gt;But you don’t have to take my word for it. Check out the &lt;a href="https://revenuecat.github.io/purchases-ios-docs/3.14.1/" rel="noopener noreferrer"&gt;last version of docs we generated using Jazzy&lt;/a&gt; and our &lt;a href="https://revenuecat.github.io/purchases-ios-docs/4.17.5/documentation/revenuecat/" rel="noopener noreferrer"&gt;current version using DocC&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Checking for linked symbols
&lt;/h3&gt;

&lt;p&gt;This was ultimately what made us make the jump to DocC: we wanted to have a clear way to know if we have a symbol linked in our docs that’s out of date. &lt;/p&gt;

&lt;p&gt;There is a Build Setting in Xcode (RUN_DOCUMENTATION_COMPILER) that allows DocC’s compiler to generate warnings if a symbol in the documentation doesn’t match the source code, which helps ensure that our documentation stays up-to-date and accurate. This is covered more in detail later in this post. &lt;/p&gt;

&lt;h3&gt;
  
  
  IDE integration
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frevenuecat.dreamhosters.com%2Fwp-content%2Fuploads%2F2023%2F02%2Fide-integration-1024x910.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frevenuecat.dreamhosters.com%2Fwp-content%2Fuploads%2F2023%2F02%2Fide-integration-1024x910.jpeg" alt="DocC integrates seamlessly with Xcode." width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 1. DocC integrates seamlessly with Xcode.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Another big benefit of DocC is that it is backed by Apple, which means it is well-supported and integrates seamlessly with Xcode. The docs generated through DocC look the same as the ones you get when you select “Show Quick Help” (or ⌃⌥+click on a symbol) in Xcode, which makes it a lot easier for us to ensure that the Quick Help section looks correct and is easy to read. &lt;/p&gt;

&lt;h3&gt;
  
  
  Future improvements
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://developer.apple.com/documentation/docc/building-an-interactive-tutorial" rel="noopener noreferrer"&gt;Interactive Tutorials&lt;/a&gt; look really promising, although admittedly we haven’t created our first one of those yet. We’re looking forward to trying them out!&lt;/p&gt;

&lt;p&gt;Apple has been hard at work improving DocC and adding features to it, including a Swift Package Manager plugin and the ability to easily host DocC docs in GitHub Pages. &lt;/p&gt;

&lt;h2&gt;
  
  
  How we migrated without stopping development
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Update our docs to common format between Jazzy and DocC&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Our first priority when deciding to try out DocC was to retain the ability to make releases and generate documentation while we’re still migrating docs. &lt;/p&gt;

&lt;p&gt;The first step towards this goal was to update our documentation so that its formatting was compatible with both Jazzy and DocC’s formats. This was important because it allowed us to easily switch between the two while we were testing and making adjustments.&lt;/p&gt;

&lt;p&gt;Luckily for us, Jazzy adopted most of the format conventions that DocC uses, so updating our docstrings to DocC format was easy to do. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frevenuecat.dreamhosters.com%2Fwp-content%2Fuploads%2F2023%2F02%2Fdocc-jazz-docstrings-1024x127.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frevenuecat.dreamhosters.com%2Fwp-content%2Fuploads%2F2023%2F02%2Fdocc-jazz-docstrings-1024x127.jpeg" alt="Jazzy adopted most of the format conventions of DocC, making updating easy." width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 2. Jazzy adopted most of the format conventions of DocC, making updating easy.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Enable DocC documentation compiler to fix typos in symbols&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Some of our old docs had typos in the links to symbols in the SDK. We set the build setting in Xcode called RUN_DOCUMENTATION_COMPILER to Yes, which compiles docs when you build the project. This step is thankfully very fast (~0.2 seconds for our SDK), and it adds a build warning if a symbol isn’t correctly referenced. We used this to clean up our docs. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.revenuecat.com%2Fstatic%2F5db8267fe6ea78efe03dc0e5a69def81%2Fdoc-documentation-compiler.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.revenuecat.com%2Fstatic%2F5db8267fe6ea78efe03dc0e5a69def81%2Fdoc-documentation-compiler.jpeg" alt="When compiling documentation in DocC, warnings are given when symbols aren't reference correctly." width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 3. When compiling documentation in DocC, warnings are given when symbols aren’t reference correctly.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Take advantage of DocC’s power&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Once we had basically the same docs generated with DocC instead of Jazzy, we could truly start to work towards making them more useful. One of DocC’s best features is the ability to organize the docs into Categories and Topics, allowing for a clearer structure. &lt;/p&gt;

&lt;p&gt;This allows us to design the flow of information that a reader first sees when going into our docs, to make it as easy to navigate as possible. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frevenuecat.dreamhosters.com%2Fwp-content%2Fuploads%2F2023%2F02%2Ftopic-category-organization-1024x809.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frevenuecat.dreamhosters.com%2Fwp-content%2Fuploads%2F2023%2F02%2Ftopic-category-organization-1024x809.jpeg" alt="DocC allows you to organize docs into Categories and Topics." width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 4. DocC allows you to organize docs into Categories and Topics.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Hosting in GitHub Pages&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We moved the documentation into GitHub Pages and set up a &lt;a href="https://github.com/RevenueCat/purchases-ios/blob/4.17.2/fastlane/Fastfile#L428" rel="noopener noreferrer"&gt;CI job&lt;/a&gt; to automatically generate and deploy the docs with each release of a new SDK version.&lt;/p&gt;

&lt;p&gt;When we started working on this it was a lot harder to do because you needed to export an archive of the docs from Xcode and then do some work on top of them to publish them. But, thankfully, Apple added support for exporting for static site hosting. &lt;/p&gt;

&lt;p&gt;Apple has a tutorial for &lt;a href="https://apple.github.io/swift-docc-plugin/documentation/swiftdoccplugin/publishing-to-github-pages/" rel="noopener noreferrer"&gt;how to host docs in GitHub Pages&lt;/a&gt;, so we won’t duplicate it here, but the basic command is:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frevenuecat.dreamhosters.com%2Fwp-content%2Fuploads%2F2023%2F02%2Fhosting-docs-in-github-pages-1024x256.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frevenuecat.dreamhosters.com%2Fwp-content%2Fuploads%2F2023%2F02%2Fhosting-docs-in-github-pages-1024x256.jpeg" alt="The command for publishing docs to GitHub Pages." width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 5. The command for publishing docs to GitHub Pages.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We also added a &lt;a href="https://github.com/RevenueCat/purchases-ios/blob/4.17.2/fastlane/Fastfile#L406" rel="noopener noreferrer"&gt;fastlane lane to preview the docs&lt;/a&gt; locally so we could check for formatting errors before publishing a new version.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. &lt;strong&gt;Versioning&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;While we love DocC and at this stage we have a pretty clear picture of how to publish docs, there’s one problem that DocC has no answer for: having different versions of docs for different versions of an SDK. &lt;/p&gt;

&lt;p&gt;Ideally, we would want a version selector that you can use to navigate to the version you want and you’d be directed to the latest version by default. &lt;/p&gt;

&lt;p&gt;However, there’s no way to achieve that using just DocC.&lt;/p&gt;

&lt;p&gt;Instead, what we did was: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a new folder which has a subfolder per version of the SDK.&lt;/li&gt;
&lt;li&gt;Host all the docs in a new repo, so that versions are independent of branches in the source repo. This allows for us to develop on one branch while the docs repo gets updated for latest releases separately.&lt;/li&gt;
&lt;li&gt;Create a new page that redirects the user to the latest version of docs if they navigate to the root of GitHub Pages. &lt;/li&gt;
&lt;li&gt;Add a step that updates that redirect page in CI when there’s a new release to make it point to the corresponding new version of the docs. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can see how this is structured in &lt;a href="https://github.com/RevenueCat/purchases-ios-docs/tree/main" rel="noopener noreferrer"&gt;our docs repo here&lt;/a&gt;. The corresponding CI job is located &lt;a href="https://github.com/RevenueCat/purchases-ios/blob/4.17.1/fastlane/Fastfile#L428" rel="noopener noreferrer"&gt;here in our source repo&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion and future
&lt;/h2&gt;

&lt;p&gt;DocC has been a big improvement for our SDK Reference Docs at RevenueCat. While we’re happy with the result, there are a few things we’d like to do in the future: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduce interactive tutorials for our main use cases.&lt;/li&gt;
&lt;li&gt;Add a version selector (please, Apple, add support for this!).&lt;/li&gt;
&lt;li&gt;Introduce a language selector to be able to see the Objective-C docs (&lt;a href="https://github.com/apple/swift-docc-plugin/issues/47" rel="noopener noreferrer"&gt;hopefully coming soon!&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The actual migration path was thankfully not difficult, because Jazzy is compatible with most of DocC’s format. And we can now rest assured that the symbols referenced by our SDK are correct.&lt;/p&gt;

&lt;p&gt;Take a look at &lt;a href="https://revenuecat.github.io/purchases-ios-docs/" rel="noopener noreferrer"&gt;our SDK Reference docs&lt;/a&gt; and let us know what you think!&lt;/p&gt;

</description>
      <category>docc</category>
      <category>jazzy</category>
      <category>ios</category>
      <category>revenuecat</category>
    </item>
    <item>
      <title>What’s the best way to monetize kids apps?</title>
      <dc:creator>Peter @ RevenueCat</dc:creator>
      <pubDate>Fri, 24 Feb 2023 14:51:30 +0000</pubDate>
      <link>https://dev.to/revenuecat/whats-the-best-way-to-monetize-kids-apps-1c8f</link>
      <guid>https://dev.to/revenuecat/whats-the-best-way-to-monetize-kids-apps-1c8f</guid>
      <description>&lt;p&gt;Choosing the most appropriate monetization strategy is of fundamental importance to all apps, regardless of intended audience or function. But apps for children stand out as being uniquely challenging, often in ways that aren’t immediately apparent.&lt;/p&gt;

&lt;p&gt;We’re not going to cover all of the challenges facing kids apps — that’s for another post. But there are three which have a huge impact on monetization (as well as on overall design) in this category.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Kids apps are heavily regulated&lt;/strong&gt; — in terms of data management, analytics, and advertising. &lt;/li&gt;
&lt;li&gt;When you’re building a kids app, &lt;strong&gt;you’re designing for two user groups&lt;/strong&gt; : the kids and the parents. And unless you establish &lt;strong&gt;parent trust&lt;/strong&gt; , they’re not going to pay.&lt;/li&gt;
&lt;li&gt;Kids have an insatiable curiosity and can be difficult to keep focused and engaged. And &lt;strong&gt;unless kids are engaged, parents aren’t going to see the value&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On the Sub Club podcast, we’ve interviewed two kids apps creators: &lt;a href="https://subclub.com/episode/why-more-apps-need-to-be-more-than-just-apps-melissa-cash-felix-boudreau-pok-pok" rel="noopener noreferrer"&gt;Melissa Cash &amp;amp; Félix Boudreau&lt;/a&gt; from award-winning preschool app Pok Pok; and &lt;a href="https://subclub.com/episode/how-to-build-a-great-kids-app-with-minimal-data-brennan-clark-sago-mini" rel="noopener noreferrer"&gt;Brennan Clark from Sago Mini&lt;/a&gt;, which offers three subscription apps for preschoolers (and has seen over 100 million downloads).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What stands out within these conversations is the strength of the subscription model when it comes to monetizing kids apps.&lt;/strong&gt; So through the lens of these three key challenges facing kids apps, and supported by the experiences of Pok Pok and Sago Mini, we will outline why kids apps makers should be looking to subscriptions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Navigating child privacy guidelines
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;“We wanted to create the absolute purest experience for kids from day one. That has been challenging to be honest, because there are tricks of the trade, which I’m sure a lot of the people listening know about in order to make more money. But, from the very beginning of our journey, we wanted to make sure we’re starting with a clean slate that’s creating the most value for the child first.”&lt;/p&gt;

&lt;p&gt;&lt;cite&gt;Melissa Cash, Pok Pok&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The kids app space is, quite understandably, heavily regulated — as is all media aimed at children. For instance, there’s the Children’s Online Privacy Protection Act (&lt;a href="https://www.ftc.gov/legal-library/browse/rules/childrens-online-privacy-protection-rule-coppa" rel="noopener noreferrer"&gt;COPPA&lt;/a&gt;) in the US, &lt;a href="https://ico.org.uk/for-organisations/guide-to-data-protection/ico-codes-of-practice/age-appropriate-design-code/" rel="noopener noreferrer"&gt;the Children’s code&lt;/a&gt; in the UK, and General Data Protection Regulation (GDPR) in the EU. These regulations, together with the subsequent app store guidelines (&lt;a href="https://developer.apple.com/app-store/review/guidelines/#kids" rel="noopener noreferrer"&gt;Apple’s&lt;/a&gt; and &lt;a href="https://support.google.com/googleplay/android-developer/answer/9893335?hl=en-GB#:~:text=Apps%20that%20solely%20target%20children,Android%20API%2033%20or%20higher." rel="noopener noreferrer"&gt;Google’s&lt;/a&gt;), heavily restrict what data you can collect and transmit in your app, as well as what content you can show to kids.&lt;/p&gt;

&lt;p&gt;How does this affect monetization?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;These regulations make it extremely difficult (and, in many cases, impossible) to make monetization models like in-app purchases or advertising work&lt;/strong&gt;. The tactics that are used to make money from these are often manipulative or pressuring — such as frequently gating progress until an ad has been watched or a purchase has been made. These pressuring tactics are strictly against the rules. And children are especially susceptible — &lt;a href="https://www.nngroup.com/articles/kids-cognition/" rel="noopener noreferrer"&gt;according to NN Group:&lt;/a&gt; “Because kids’ ability to plan and execute is still limited, they are more vulnerable to attractive games and may develop addictions to games or apps easily.”  &lt;/p&gt;

&lt;p&gt;As for advertising, while in general it isn’t entirely prohibited, &lt;strong&gt;the third-party networks you can use are restricted to ones which comply with Apple and Google’s rules.&lt;/strong&gt; Also &lt;a href="https://www.nngroup.com/articles/childrens-websites-usability-issues/" rel="noopener noreferrer"&gt;from the NN Group&lt;/a&gt; in a separate UX study: “On a more negative note, children still don’t understand the web’s commercial nature and lack the skills needed to identify advertising ** ** and treat it differently than real content.”&lt;/p&gt;

&lt;p&gt;Sadly, despite these regulations, a worrying amount of apps don’t seem to be complying. A &lt;a href="https://jamanetwork.com/journals/jamanetworkopen/fullarticle/2793493" rel="noopener noreferrer"&gt;2022 academic study&lt;/a&gt; found that “a majority” of apps used by 160 children aged 3 to 5 years “were associated with manipulative design features.” These “dark patterns” (interactive designs that benefit the designer at the expense of the user) include things such as making the user undertake tedious activities unless a purchase is made or disrupting the user during daily activities to return to the app.&lt;/p&gt;

&lt;p&gt;Separately, a &lt;a href="https://appleinsider.com/articles/22/11/17/thousands-of-apps-violate-us-child-privacy-law" rel="noopener noreferrer"&gt;2022 Pixalate study&lt;/a&gt; found that many thousands of apps across Apple and Google’s stores don’t comply with COPPA regulations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frevenuecat.dreamhosters.com%2Fwp-content%2Fuploads%2F2023%2F02%2Fpixalate-study-1024x576.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frevenuecat.dreamhosters.com%2Fwp-content%2Fuploads%2F2023%2F02%2Fpixalate-study-1024x576.jpeg" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Children’s Privacy Risk Scorecard&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy regulations — for kids and adults alike — are only ever going to become more strict in the future. Subscriptions, meanwhile, can help app creators continue to grow&lt;/strong&gt; and make consistent revenue, while still remain compliant — and not resort, as these studies have shown, to trying to get around the rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building parent trust
&lt;/h2&gt;

&lt;p&gt;While you may be designing an app to be used predominantly by children, it’s not them who are going to be paying for the privilege. So you’re designing for two separate user groups, both of whom have different goals and expectations.&lt;/p&gt;

&lt;p&gt;To convince parents to pay for a kids app, they need to see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what value the app is going to bring to their kids &lt;/li&gt;
&lt;li&gt;that their kids are actively using the app (and deriving that value) &lt;/li&gt;
&lt;li&gt;that the app is trustworthy and is safe in the hands of their kids&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether or not a parent believes an app will deliver value is somewhat dependent on their own outlook (clearly, apps that focus on education and development have an advantage here). And to see long-term value, kids need to be kept engaged — we’ll be coming back to this shortly. &lt;/p&gt;

&lt;p&gt;But &lt;strong&gt;crucially, none of this matters if an app doesn’t build trust with parents&lt;/strong&gt;. How do you build parent trust? Avoiding “tricks of the trade”, with which most parents are going to be intimately familiar, is a great start.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“ &lt;strong&gt;Subscriptions have unlocked a bit of additional trust in that there is no sneaky stuff&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We’re not doing in-app ads. We’re not doing a bunch of IAPs, gems, all this type of stuff. We have a single subscription price. Parents can lock that in or just enjoy the free experience. And having that kind of safe, trusted environment for their kid is another really big selling point for parents.”&lt;/p&gt;

&lt;p&gt;&lt;cite&gt;Brennan Clark, Sago Mini&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frevenuecat.dreamhosters.com%2Fwp-content%2Fuploads%2F2023%2F02%2Fsago-mini-1024x473.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frevenuecat.dreamhosters.com%2Fwp-content%2Fuploads%2F2023%2F02%2Fsago-mini-1024x473.jpeg" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Sago Mini World&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sago Mini also builds trust with the style of content they provide: “[Make] sure it’s interactive. It’s not this passive…YouTube-kid style of content. That’s been a really big thing. Parents love that. Parents trust that.”&lt;/p&gt;

&lt;p&gt;And for Pok Pok, not only does it find that the subscription model builds trust with parents, but so does adding a paywall right at the beginning of the user journey:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“We’re asking parents to commit right away to a subscription. We do offer a free trial because it’s very important that the kid can try the app and actually see if it’s a good fit… But at the same time, like Melissa said, *&lt;em&gt;we’re betting on parents who value having a very pure experience where there’s no paywall, there’s no sneaky game mechanics that the kids might fall into and then they get that crazy bill because of in-app purchases. We’re against that 100%. *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And also I think it’s beneficial for the parents because… we want to create something that the child can play with without the parents being involved… A side effect with paywalls in a freemium version is that the kid’s going to run into a paywall. At two to six, he might not even be able to read… so he doesn’t know what’s happening.”&lt;/p&gt;

&lt;p&gt;&lt;cite&gt;Félix Boudreau, Pok Pok&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Trust comes when parents are confident that the app maker has their kids’ best interests in mind — and when the monetization model is hands-off and easy to navigate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping kids focused and engaged
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.revenuecat.com%2Fstatic%2Fcd2265f50752bf8ed90b0929d7bd4166%2Fpok-pok.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.revenuecat.com%2Fstatic%2Fcd2265f50752bf8ed90b0929d7bd4166%2Fpok-pok.jpeg" alt="An entire playroom in the palm of your hands: Pok Pok" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Pok Pok&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And finally, even when you’ve built trust, if the kid isn’t engaged and deriving value from the app, then nor will the parent see the value in paying. Once again, the subscription model supports the kind of content creation needed to keep the experience fresh and interesting.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“We knew that we wanted to create something that was always evolving…because kids are so curious… So we knew we had to create new content regularly and we also had a million ideas… And in order to do that, we need recurring revenue. So a big piece of the why came from that. &lt;strong&gt;It was just like: we know we want to make more content over time, so we should be a subscription.&lt;/strong&gt; ”&lt;/p&gt;

&lt;p&gt;&lt;cite&gt;Melissa Cash, Pok Pok&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Keeping kids engaged is only half the battle. The other half is making sure the parent knows it. One way Sago Mini achieve this is by building a separate app for parents:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Another thing that we did was we launched a parent app as well…when their kid is drawing something or doing a coloring sheet in one of our apps, there are artefacts that are actually sent to the parent app. And so that’s this nice touchpoint that reminds the parents of the value that their kids are getting.&lt;/p&gt;

&lt;p&gt;&lt;cite&gt;Brennan Clark, Sago Mini&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  In short: kids apps should look to subscriptions
&lt;/h2&gt;

&lt;p&gt;Subscriptions aren’t necessarily going to work for all apps, and they may work well in combination with other monetization methods in a hybrid approach. But subscriptions play well with strict child privacy regulations, build trust with parents, and provide consistent revenue that allows regular content creation.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>growth</category>
    </item>
  </channel>
</rss>
