Posted by Aditya Swamy, Director, Google Play PartnershipsI sat down for a “virtual coffee” with Haemin Yim, founder and CEO of Creatrip, from Korea to discuss starting on the web, setting up the company for global reach, and tips for startups looking to grow.
Despite having a great idea for an app, Haemin shared with me that it hasn’t always been smooth sailing. After gaining significant brand awareness and with increasing travel bookings across the app, the pandemic sent the travel industry into disarray. As with many businesses, this had significant implications for Creatrip. However, Haemin and the team used their strong understanding of the people using their app to quickly expand their offering.
With the knowledge that people often wanted to visit South Korea because of their interest in K-trends and culture; Haemin adapted the business to provide K-products to those who were unfortunately unable to travel during that period. This led Haemin to grow the business beyond just a travel app and into a global e-commerce platform.
Creatrip started as an app that provided travel content. It quickly expanded to provide people with in-app booking features, local currency exchange rates that weren’t previously digitized, and even a global e-commerce platform providing access to popular ‘K-items’. However, content is the key element that draws users into the app.
My top advice for businesses looking to continue to evolve their content is to expand their content creator pipeline. For example, by encouraging South Korean locals to contribute, Creatrip could gain a richer and more diverse range of content, showcasing Korea through the eyes of many different people. Haemin and the team are already in the process of building a new feature that allows people to create their own content on the app.
Think about short form video apps. By allowing people to become their own content creators, it enables them to have a much wider repository of content and encourages users to spend more time on the app. Now more people want to be creators and make their own content as seen on YouTube. This is fueling growth in watchtime, and adding more users.
Something I found particularly interesting from my chat with Haemin, was how she prepared the business for global reach from the start. Haemin believes that despite requiring a bit more time and effort, preparing for global reach from the beginning can actually allow for exponential growth, as you start to target the right markets and reach a global fan base. It is wonderful to see how Haemin brings her passion for all things Korean, to people all around the world. The team’s first step towards going global was by listening to and understanding the needs of the people already using Creatrip.
The team at Creatrip have definitely brought a lot of unique ideas to the app. With 90% of their users having started on the website, the team had an ingenious idea to bring people over to mobile. They listened to their global users and saw that people were keen to find out the currency exchange rates being provided at local stores in Seoul. They created a mobile-only feature that shows local currency rates from local stores. This required the team to actually go to the stores twice a day, however it led to a large increase in people using the mobile app - all by providing information that was previously unavailable to people from outside of Seoul.
It’s amazing to see how much Creatrip is flourishing; the app has grown from 100k monthly users up to 1.5 million. There are many factors that helped Creatrip grow over the past few years, but some notable takeaways from my chat with Haemin include:
As a final thought I couldn't let Haemin go without asking her favorite K trends. She mentioned that fusion fine dining was a top trend in Korea, NewJeans were a trending K-pop band, and South Korean blankets were a top K-product.
Do you have any questions for Creatrip? What are your own tips for other app or game businesses? Let us know on Twitter.
Posted by Neelansh Sahai Android Developer Relations Engineer (on Twitter and LinkedIn)What if you have a set of users who are quite fluent in English, Hindi, and Spanish, and they have a news app on their phones and prefer to read the news in Hindi? For their texting app, they prefer Spanish as they have some friends and family who they text with in Spanish. But for ease of access, they still prefer their device to be in English. Now there are many such use-cases where the users might want their app languages to be different from their system language. Interesting!
This blog focuses on how to integrate the Per-App Language Preferences API in your app to provide your users the flexibility to choose different languages for different apps.
1. Users can change the language settings from system settings by selecting:
Settings → System → Languages & Input → App Languages → [Select the desired App] → [Select the desired Language]
NOTE: Only those apps that have opted in for the feature by specifying the locale_config.xml file (more on this below), will appear in system settings.
There are 5 steps that need to be followed while working on the Per-App Language Preferences feature, listed here →
1. Create locale_config.xml file
NOTE: The locale tags must follow the BCP47 syntax, which is usually {language subtag}–{script subtag}–{country subtag}. Anything other than that will be filtered out by the system and won't be visible in the system settings.
<?xml version="1.0" encoding="utf-8"?><locale-config xmlns:android="http://schemas.android.com/apk/res/android"> ...
<!-- English --> <locale android:name="en"/>
<!-- Japanese (Japan) --> <locale android:name="ja-JP"/>
<!-- Chinese (Macao) in Simplified Script --> <locale android:name="zh-Hans-MO"/>
<!-- Chinese (Taiwan) in Traditional Script --> <locale android:name="zh-Hant-TW"/> ...</locale-config>
<manifest> ... <application ... android:localeConfig="@xml/locale_config"> </application></manifest>
def latestAppCompatVersion = “1.6.0-rc01”
dependencies { ... implementation "androidx.appcompat:appcompat:$latestAppCompatVersion" implementation "androidx.appcompat:appcompat-resources:$latestAppCompatVersion" ...}
val appLocale: LocaleListCompat = LocaleListCompat.forLanguageTags("xx-YY")// Call this on the main thread as it may require Activity.restart()AppCompatDelegate.setApplicationLocales(appLocale)
// Call this to get the selected locale and display it in your Appval selectedLocale = AppCompatDelegate.getApplicationLocales()[0]
NOTE: These APIs are also backward compatible, so even if the app is being used on Android 12 or lower, the APIs would still behave the same, and no additional checks for OS versions are required in your code.
<application ... <service android:name="androidx.appcompat.app.AppLocalesMetadataHolderService" android:enabled="false" android:exported="false"> <meta-data android:name="autoStoreLocales" android:value="true" /> </service> ...</application>
// Specify the constants to be used in the below code snippets
companion object {
// Constants for SharedPreference File const val PREFERENCE_NAME = "shared_preference" const val PREFERENCE_MODE = Context.MODE_PRIVATE // Constants for SharedPreference Keys const val FIRST_TIME_MIGRATION = "first_time_migration" const val SELECTED_LANGUAGE = "selected_language" // Constants for SharedPreference Values const val STATUS_DONE = "status_done"}
// Utility method to put a string in a SharedPreferenceprivate fun putString(key: String, value: String) { val editor = getSharedPreferences(PREFERENCE_NAME, PREFERENCE_MODE).edit() editor.putString(key, value) editor.apply()}// Utility method to get a string from a SharedPreferenceprivate fun getString(key: String): String? { val preference = getSharedPreferences(PREFERENCE_NAME, PREFERENCE_MODE) return preference.getString(key, null)}
// Check if the migration has already been done or notif (getString(FIRST_TIME_MIGRATION) != STATUS_DONE) {
// Fetch the selected language from wherever it was stored. In this case it’s SharedPref
// In this case let’s assume that it was stored in a key named SELECTED_LANGUAGE getString(SELECTED_LANGUAGE)?.let { it →
// Set this locale using the AndroidX library that will handle the storage itself val localeList = LocaleListCompat.forLanguageTags(it) AppCompatDelegate.setApplicationLocales(localeList)
// Set the migration flag to ensure that this is executed only once putString(FIRST_TIME_MIGRATION, STATUS_DONE) }}
Here are a few things that might prove to be beneficial for you users.
With that, most parts of the feature are covered. So let’s have a quick recap on what we discussed in today’s read.
Posted by Josh Wentz, Product Management, Google TV
TLDR: Google TV and Android TV will be requiring Android App Bundles that are archivable starting in May 2023 to save storage for users.
Over the past few decades, TV has transformed from linear channel surfing to on-demand content with multi-app experiences. Today, over 10,000 apps are available on Android TV OS. While software has grown exponentially, TV hardware has remained limited in capacity compared to its phone counterparts. In 2022, smartphones often have a minimum storage size of 64GB, but smart TVs have an average of just 8GB. Less storage results in users having to uninstall apps, hindering their overall TV experience. To help with this problem and others, Android introduced App Bundles in Nov 2020.
“Android App Bundles” (AABs) are the standard publishing format on Google Play (phones, tablets, TVs, etc) that have replaced “Android Package Kits” (APKs). App Bundles are smaller, faster, fresher, and better than its precursor. Key benefits include:
With TV storage confined and users having an increasing appetite for more apps, Google TV and Android TV will be requiring App Bundles starting in May 2023. While this provides about 6-months to transition, we estimate that in most cases it will take one engineer about 3-days to migrate an existing TV app from Android Package Kit (APK) to Android App Bundle (AAB). While developers can configure archiving for their mobile apps, TV apps are required to be archivable so that all users and developers can benefit on storage-constrained TVs.
For TV apps not transitioned in time, Google may hide such apps from the TV surface. If you’re working on a brand new TV app, be sure to use Android App Bundles from the start!
Visit our Developer Guide to learn more about how to migrate to an Android App Bundle (AAB).
All told, App Bundles bring a delightful experience to both you as developers and your users, especially in the living room. Thank you for your partnership in creating immersive content and entertainment experiences for the future of TV.