Posted by Kacey Fahey, Google Play Developer Marketing
Nexon Korea Company has published several games across PC, mobile, and console. With the launch of their mobile game FAITH, a MMORPG released exclusively in Japan, they wanted to promote the game before launch and find a way to capture early consumer demand that would help boost early installs at launch.
Nexon ran a pre-registration campaign on Google Play with a multi-channel marketing campaign driving players to pre-register and receive an exclusive pre-registration reward. Their campaign used consistent creative assets throughout TV commercials, YouTube influencer campaigns, social media, performance marketing campaigns, and more. Offering a pre-registration reward provided an incentive and benefit for players who pre-registered on Google Play during the month-long campaign leading up to launch.
“It was very easy to run, since the steps to activate the campaign were very clear and simple. All we needed to do was prepare the store assets and APK, then set them up in the Google Play Console,” said Hyomin Kim, Head of Platform Partnerships at Nexon Korea Corporation. Their exclusive pre-registration reward of 300 diamonds (in-game currency) was set up as a unique managed product as part of the campaign. At launch, Google Play provides the reward to all players who pre-registered, allowing Nexon to consume and grant the reward to players in-game using the Google Play Billing API. Not only did this create additional value for users, but it allowed Nexon to identify those who pre-registered in-game so they could measure the cohort’s performance after launch. Once the game became available on launch day, everyone who pre-registered on Google Play received a notification to install.
Nexon reported they had historically seen around 50% of Google Play pre-registrations convert to installs. By offering a pre-registration reward for FAITH, they increased their conversion rate by 20%. And not only that, the campaign drove other strong performance metrics with players who pre-registered for FAITH on Google Play having almost 50% higher day 60 retention than those who did not pre-register. This audience has also shown stronger monetization behavior, with over 70% higher ARPDAU than non-pre-registrants.
“Google Play pre-registration is now a ‘must-do’ strategy when Nexon launches games. From our previous experience, Google Play pre-registration is one of the most effective pre-registration platforms amongst all the channels we utilize, especially for organic impressions and installation conversion,” said Kim.
All app and game developers can run pre-registration campaigns and offer a pre-registration reward. Get started today!
Posted by Allen Huang and Rohan Shah, Product Managers on Android UI
One of the biggest changes in Android Q is the introduction of a new gesture navigation. Just to recap - with the new system navigation mode - users can navigate back (left/right edge swipe), to the home screen (swipe up from the bottom), and trigger the device assistant (swipe in from the bottom corners) with gestures rather than buttons.
By moving to a gesture model for system navigation, we can provide more of the screen to apps to enable a more immersive experience.
We wanted to give folks an inside look at how we’ve approached this challenge, the rationale, and some of the trade-offs as well. There is some nerding out on design around gestures ahead, but hopefully it provides some insight into our process and how we balance the developer and OEM ecosystem in service of users. If you’re looking for more detail on how to handle these changes as an app developer, check out Chris’s “Going edge-to-edge” article series.
One of the amazing things about Android is the opportunity for app developers and Android partners to try new, innovative approaches on the phone.
In the last 3 years, we’ve seen gesture navigation patterns proliferate on handheld devices (though gestures have been around as early as 2009!).
This trend was led by innovative Android partners and Android apps trying some very cool ideas (for example: Fluid NG, XDA).
When we started researching this more, we honed in on the user benefits:
It wasn’t all roses though - we also saw issues with many of the gesture modes:
But most of all, we realized that there was a larger issue of fragmentation when different Android phones had different gestures, especially for Android developers.
Over the last year, we worked with partners like Samsung, Xiaomi, HMD Global, OPPO, OnePlus, LG, Motorola, and many others to standardize gesture navigation going forward. To ensure a consistent user and developer experience, the Android Q gestures will be the default gesture navigation for new Q+ devices.
Understanding that these gestures don’t work for every user, especially those with more limited dexterity and mobility, three-button navigation will continue to be an option on every Android device.
We started with research to understand how users held their phones, what typical reach looked like, and what parts of the phone users used the most. From there, we built many prototypes that we tested across axes like desirability, speed-of-use, ergonomics, and more. And we put our ultimate design through a range of studies - how quickly users learned the system, how quickly users got used to the system, how users felt about it.
A unique element of Android navigation since the very beginning is the Back button. It is appreciated by many users that find Android easier to navigate and learn (despite many debates on what the “correct” behavior is) -- and it's used a lot! In fact, 50% more than even Home. So one of our design goals was to make sure the back gesture was ergonomic, dependable, and intuitive -- and we prioritized this goal above other less frequent navigation such as drawers and recents.
Looking at the reachability charts below, we designed our two core gestures (Back and Home) to coincide with the most reachable/comfortable areas and movement for thumbs.
Phone screen heatmaps showing where users can comfortably do gestures, holding the phone in only one hand
As mentioned, we built prototypes of many different gesture models, comparing user ratings and timed user tasks on what ultimately became the Q model to several other navigation paradigms. Here’s a few graphs showing the results of our testing:
Comparison of user ratings for ergonomics and one-handed use across different navigation modes (higher is better)
Comparison of average time required to complete Home/Back tasks across various navigation modes (lower is better)
Comparison of average time required to complete Overview/Recents-based tasks across various navigation modes (lower is better)
Users, on average, performed tasks involving Home and Back more quickly than most other models - even faster than they did with buttons. The model did, however, come at the cost of being able to quickly access Overview/Recent apps, which users go to less than half as often as the Home screen.
From a more qualitative perspective, users viewed the Q model as more one-handed and reachable, although buttons were still viewed as more ergonomic for more users.
Although we arrived at the side swipe as the gesture for back that best balanced many tradeoffs, it is important to note that there were hard decisions, particularly in how that gesture impacted apps.
For example, we found that ~3-7% of users (depending on the Google app) swipe to open the App Navigation Drawer - the rest of our users push the hamburger menu to invoke the drawer. This drawer swipe gesture is now overloaded with back and some users will need to adapt to using the hamburger menu. This was a tough choice but given the prolific use of back we optimized for what worked best there.
Because it’s never a goal to change out behavior on users, we tried several ways to enable users to distinguish the drawer gesture from the Back gesture. However, all these paths led to users pulling in the drawer when they were trying to go Back and having less confidence that Back would work.
Beyond drawers, gestures are a big change for people and it took on average 1-3 days to adapt - in particular, users struggled with patterns like swiping right or left on a carousel and triggering Back.
In qualitative studies, we found that after an initial break-in period of 1-3 days, users became fluent and could consistently distinguish between these two gestures. The majority of users did not want to switch back to 3 button nav (even though that remains an option).
Additional research showed that there is a clear adjustment phase for users to get used to a new system navigation (across many different navigations). In our Q model, we found that usage of Back goes down for the first 1-3 days. After that period, the average # of Back presses/day ends up being the same as 3-button and our P navigation.
With gestural navigation, we are aiming to move forward and standardize the user experience on Android. The model we landed on is the optimal one for most users, but it also means that some of the gestures conflict with existing app gestures, necessitating developer adjustments to how users interact with your apps. We take our responsibility to Android developers seriously and want to help you in this process.
There are three key steps to support gesture navigation:
We’ve just published the first article in our “Going edge-to-edge” series on Medium, detailing those steps in turn. The final article in the series will cover some of the common scenarios we’ve seen, and how you can best support them in your apps.
Thank you all for the feedback -- all of your comments and interactions have helped us improve the gesture navigation experience in Android Q and, more broadly, help make Android better each day.
Posted by Dave Burke, VP of Engineering
We’re just a few weeks away from the official release of Android Q! As we put the final polish on the new platform, today we’re rolling out Beta 6, the last Beta update. Now is the time to make sure your apps are ready, before we bring the official release to consumers. Take this opportunity to finish up your testing and publish your app updates soon to give users a smooth transition to Android Q.
You can get Beta 6 today on Pixel devices by enrolling here. If you're already enrolled and received Beta 5, you'll automatically get Beta 6 soon. Partners participating in the Android Q Beta program will also be updating their devices over the coming weeks -- visit their sites to learn more. To get started with Android Q, visit developer.android.com/preview.
Watch for more information on the official Android Q release coming soon!
Today’s Beta 6 update includes the latest Android Q system images for Pixel and Android Emulator, the final API 29 SDK, and updated build tools for Android Studio. Beta 6 includes all of the features, system behaviors, and developer APIs that you’ll find in the final platform, so it gives you everything you need to get your apps ready. For users, Beta 6 includes many new fixes and optimizations -- take a look at the release notes for details.
We've made further refinements to Gesture Navigation in Beta 6 based on user feedback. First, to ensure reliable and consistent operation, there's a 200dp vertical app exclusion limit for the Back gesture. Second, we've added a sensitivity preference setting for the Back gesture. Watch for more details coming soon in our blog post series on optimizing for gesture navigation.
With the consumer release coming soon, we’re asking all Android developers to update your current apps for compatibility as soon as possible.
Here’s how to do it:
We realize that supporting these changes is an investment for you too, so thanks to all of you who have prioritized the work to get your apps ready for Android Q!
Next, when you're ready, dive into Android Q and learn about the new features and APIs that you can use. Here are some of the top features to get started with.
We recommend these for every app:
We recommend these if relevant for your app:
These are just a few of the many new features and APIs in Android Q -- to see them all, visit the Android Q Beta site for developers.
As soon as you're ready, publish your APK updates to Google Play that are compiled against, or optionally targeting, API 29. To make sure that your updated app runs well on Android Q as well as older versions, try using Google Play testing tracks. With tracks you can safely get early feedback from a small group of users and then do a staged rollout to production.
It’s easy! Just enroll any supported Pixel device here to get the update over-the-air. If you're already enrolled, you'll receive the update soon and no action is needed on your part. Downloadable system images are also available here. Partners who are participating in the Android Q Beta program will be updating their devices over the coming weeks. See android.com/beta for details.
To get started developing, download the official API 29 SDK and tools into the stable release of Android Studio 3.4, or for the latest Android Q support update to Android Studio 3.5 Beta. Then follow these instructions to configure your environment, and see the release notes for known issues.
Please continue to share your feedback and requests in our issue tracker. You can use our hotlists for filing platform issues (including privacy and behavior changes), app compatibility issues, and third-party SDK issues.
A big thank you to our developer community for your participation in our recent Reddit AMA on r/androiddev! It’s always great to hear what’s important to you and we hope we were able to help!
Posted by Wojtek Kaliciński, Developer Advocate, Android
Stephanie Saad Cuthbertson announces support for Kotlin during the Developer Keynote at I/O 2017.
Today at OSCON (the O'Reilly Open Source Software Conference), Kotlin was awarded the Open Source Award for Breakout Project of the Year.
There is no doubt to us why Kotlin received this award: it’s a fast moving (but thoughtfully developed) programming language that lets you write better code, faster. It’s great to see Kotlin continue to receive the sort of recognition as Breakout Project of the Year, building on other awards like #1 fastest growing language on Github.
We’re big fans of Kotlin, and we’ve heard that you are too – feedback from you is in part why we announced support for the language over two years ago. This meant bundling the Kotlin plugin in Android Studio, along with promising to support Kotlin-built apps going forward.
But there was a long way to go for many teams at Google to provide a first class experience with Kotlin in the Android ecosystem, and to convince developers that Kotlin on Android is not just a fad, but is here to stay.
If you haven’t tried Kotlin yet, now is a great time to start! In fact, in the past two years, we’ve been adding a number of new features and upgrades to the Kotlin for Android experience, including:
The road to fully supporting Kotlin on Android was not always easy, but it was truly rewarding seeing Kotlin adoption among professional Android developers rise from a handful of early adopters to around 50% since the original announcement!
We were confident when we announced earlier this year at Google I/O 2019 that Android is going increasingly Kotlin-first, opening up the possibility for APIs built specifically around Kotlin and for Kotlin users, starting with the new, declarative UI toolkit - Jetpack Compose (still in early development).
We want to congratulate JetBrains, our partners through the Kotlin Foundation and creators of Kotlin, on receiving the OSCON Open Source Award today. It shows how disruptive and transformative Kotlin has been, and not just for the Android developer community, but beyond.
We know one thing: on Android, Kotlin is here to stay.
Posted by Florina Muntenescu, Android Developer Advocate
Displaying text is an important task in most apps, so in Android Q we're continuing to introduce new features to support your needs and improve performance. We disabled hyphenation by default, enabled creating a typeface using multiple fonts or font families, exposed the list of fonts installed on the device, and improved some of the most-used text styling APIs.
Our performance tests showed that when hyphenation is enabled, up to 70% of the time spent on measuring text is on hyphenation.
Hyphenation takes up to 70% of the time spent measuring text
Given that hyphenation often isn’t needed for all TextViews in an app, and because of the impact on performance, we decided to turn hyphenation off by default in Android Q and AppCompat v1.1.0. If you want to use hyphenation, you need to manually turn it on in your app by setting the hyphenation frequency to normal. You can set this in multiple ways:
TextViews
As a TextAppearance attribute in styles.xml:
TextAppearance
styles.xml
<style name="MyTextAppearance" parent="TextAppearance.AppCompat"> <item name="android:hyphenationFrequency">normal</item> </style>
As a TextView attribute:
TextView
<TextView android:hyphenationFrequency="normal" />
Directly in code:
textView.hyphenationFrequency = Layout.HYPHENATION_FREQUENCY_NORMAL
Find out more about how hyphenation works from this talk at Android Dev Summit 2018.
Consider a button which mixes a custom font (Lato in this example) with an icon font:
Button with icon and Latin fonts
The Button class accepts only a single instance of a typeface to be set on the text. Pre-Android Q, you can create a Typeface using a single font family. Android Q enables the creation of a typeface from multiple font families with a new API, Typeface.CustomFallbackBuilder, that allows adding up to 64 font families per typeface.
Button
Typeface
Typeface.CustomFallbackBuilder
Our icon font example can be implemented like this:
button.typeface = Typeface.CustomFallbackBuilder( // add the Latin font FontFamily.Builder( Font.Builder(assets, "lato.ttf").build() ).build() ).addCustomFallback( // add the icon font FontFamily.Builder( Font.Builder(assets, "icon_font.ttf").build() ).build() ).build()
When creating the font family, make sure you don’t put fonts that belong to different families in the same font family object nor the same style fonts into the same font family. For example, putting Lato, Kosugi, and Material into the same font family creates an invalid configuration, as does putting two bold fonts into the same font family.
To define the general font family (serif, sans-serif, or monospace) to be used when text is rendered using system fonts, use the setSystemFallback() method to set the system fallback font:
setSystemFallback()
Typeface.CustomFallbackBuilder( FontFamily.Builder( ... ).build() ).setSystemFallback("sans-serif") .build()
Android Q brings several updates to different text styling APIs:
TextAppearance now supports the fontVariationSettings attribute:
fontVariationSettings
<style name="MyTextAppearance" parent="TextAppearance.AppCompat"> <item name="android:fontVariationSettings">...</item> </style>
The fontVariationSettings attribute can be set directly on the TextView in Android Q and in AppCompatTextView:
AppCompatTextView
<TextView ... app:fontVariationSettings="..." />
TextAppearanceSpan now supports typeface, shadow settings, fontFeatureSettings and fontVariationSettings.
TextAppearanceSpan
typeface
fontFeatureSettings
LineBackgroundSpan and LineHeightSpan interfaces now have standard implementations: LineBackgroundSpan.Standard and LineHeightSpan.Standard.
LineBackgroundSpan
LineHeightSpan
LineBackgroundSpan.Standard
LineHeightSpan.Standard
With more than 100 languages supported by Android, and with different fonts supporting different character sets, knowing which system font can render a given character is not trivial. Apps doing their own text rendering such as games, document viewers, or browsers need this information. In Android Q, you can retrieve the supported system font for a string with the FontMatcher NDK API.
FontMatcher
System fonts that can render this text
Let’s consider the above search string. The FontMatcher API returns us the font object and length. A simplified pseudocode example looks like this:
// font = NotoSansCJK-Regular.ttc // length = 2 auto[font, length] = AFontMatcher_match("たすく a.k.a. のな"); // font = Roboto-Regular.ttf // length = 8 auto[font, length] = AFontMatcher_match(" a.k.a. のな"); // font = NotoSansCJK-Regular.ttc // length = 2 auto[font, length] = AFontMatcher_match("のな");
The FontMatcher API never returns nullptr:
nullptr
If you want to get all available system fonts, you can do this with a new font enumeration API. In Java, you can use SystemFonts.getAvailableFonts, or in the NDK, you can use ASystemFontIterator. The results of the font enumeration are changed only by a system update, so you should cache them.
SystemFonts.getAvailableFonts
ASystemFontIterator
Android added a new Myanmar font to Android Q that is Unicode-compliant and capable of rendering both Unicode and non-Unicode Burmese (commonly known as Zawgyi), right out of the box. This means starting in Android Q, Android makes it easier for users to switch to Unicode: a user can now use a Unicode font to read Unicode and non-Unicode text for the first time. Android also added new requirements to the Android ecosystem CDD that takes a stronger stance in requiring Unicode, including a new subtag "Qaag" which OEMs should use as a locale designating non-Unicode Burmese. All of these changes should make developers’ life easier in the long term, as reduced ecosystem fragmentation makes it easier to develop for our 50M users in Myanmar.
Emojis in Android Q
Say Hello to your new emoji friends! The latest update includes a number of disability-focused emojis, multi-racial couples, as well as a few cute animals and household objects. See the latest and greatest in Gboard on your Android Q device of choice.
Text plays an important role in a vast majority of apps, so we’re continuing to invest in improving text API features and performance. Learn more about the new APIs in Android Q along with best practices when working with text in our Google I/O 2019 talk:
Android Q Beta 5 launches today! Today we're rolling out Beta 5, bringing Android Q Beta very close to the system behaviors you'll see in the final release. Developer APIs were already finalized in the previous update. So, now is the time to test your apps for compatibility and make sure they are ready!
You can get Beta 5 today on Pixel devices by enrolling here. If you're already enrolled and received Beta 4 on your Pixel device, you'll automatically get the update to Beta 5. Partners participating in the Android Q Beta program will also be updating their devices to Beta 5 over the coming weeks.
To get started with Android Q Beta, visit developer.android.com/preview.
The Beta 5 update includes the latest Android Q system images for Pixel and Android jEmulator, along with the final Android Q developer APIs (API level 29), the official API 29 SDK, and updated build tools for Android Studio. These give you everything you need to test your apps on Android Q and build with Android Q features.
As we talked about at Google I/O, we’ve been working closely with device-maker partners to ensure a standardized Android gestural navigation for users and developers. Gestural navigation lets apps use the full screen for content while minimizing the visible system chrome and navigation – which is particularly important on today’s edge-to-edge screens. In Beta 5 we’re continuing to improve and polish based on your feedback and we wanted to provide an update on a few key areas.
We’ve introduced a swipe gesture from either corner to get to the Assistant - you’ll notice indicators in the bottom corners that we’re continuing to tune.
For apps using a navigation drawer, we’ve added a peek behavior when users have grabbed the drawer to indicate that a swipe will bring in the navigation drawer. This works for all versions of DrawerLayout, with DrawerLayout 1.1.0-alpha02 optimized for the best experience.
Custom launchers are another area where we’ve heard feedback and we’re continuing to work on issues, particularly with stability and Recents. Starting in Beta 6, we’ll switch users to 3-button navigation when they are using a custom launcher by default. We’ll address the remaining issues in a post-launch update allowing all users to switch to gestural navigation. Meanwhile, please continue to give us your feedback.
With the consumer release coming soon, it’s highest priority for all Android developers to update your current apps for compatibility as soon as possible.
We realize that supporting these changes is an investment for you too, and we're working to minimize the impact on your apps and be responsive to your input as we move toward the final release.
As soon as you're ready, publish your APK updates to Google Play that are compiled against, or optionally targeting, API 29. To make sure that your updated app runs well on Android Q as well as older versions, try using Google Play testing tracks. With tracks you can safely get early feedback from a small group of users -- including Beta 5 users — and then do a staged rollout to production.
There will be one more Beta release before the consumer launch later this quarter. Please continue to share your feedback and requests -- you can use our hotlists for filing platform issues (including privacy and behavior changes), app compatibility issues, and third-party SDK issues.
Also, the Android engineering team will host a Reddit AMA on r/androiddev to answer your technical questions about Android Q later this month. Look out for an announcement on r/androiddev with details in the coming weeks. We look forward to addressing your questions!
Posted by Don Turner, Developer Advocate for Android Media
In Android Q there's a new API which allows applications to capture the audio of other applications. It's called the AudioPlaybackCapture API and it enables some important use cases for easier content sharing and accessibility.
Some examples include:
There may be some situations where a developer wishes to disallow the capture of their app's audio. This article explains how audio capture works for users and how developers can disallow their app's audio from being captured if they need to.
In order to capture the audio of other apps the user must grant the record audio permission to the app doing the capturing.
AUDIO_RECORD permissions dialog
Additionally, before a capture session can be started the capturing app must call MediaProjectionManager.createScreenCaptureIntent(). This will display the following dialog to the user:
MediaProjectionManager.createScreenCaptureIntent()
Screen capture intent dialog
The user must tap "Start now" in order for a capturing session to be started. This will allow both video and audio to be captured.
Cast icon showing red in status bar
During a capture session the cast icon is shown in red in the status bar.
Whether your app's audio can be captured by default depends on your target API. Here's a table which summarizes the default behaviour:
There may be situations where an app wishes to disallow its audio from being captured by other apps. This could be because the audio contains:
An app's audio capturing policy can be set either for all audio or for each individual audio player.
To disallow capture of all audio by third party apps you can do either of the following:
AndroidManifest.xml
<application
...
android:allowAudioPlaybackCapture="false"/>
AudioManager.setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)
To disallow capture for an individual player you can set the capture policy for the audio player when it is built by calling:
AudioAttributes.Builder.setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)
This approach may be useful if your app plays content with differing licenses. For example, both copyrighted and royalty-free content.
By default system apps and components are allowed to capture an app's audio if its usage is MEDIA, GAME and UNKNOWN, as this enables important accessibility use cases, such as live captioning.
In rare cases where a developer wishes to disallow audio capture for system apps as well they can do so in a similar way to the approach for third party apps. Note that this will also disallow capture by third party apps.
This can only be done programmatically by running the following code before any audio is played:
AudioManager.setAllowedCapturePolicy(ALLOW_CAPTURE_BY_NONE)
To disallow capture for an individual player you can set the capture policy for the audio player when it is built:
AudioAttributes.Builder.setAllowedCapturePolicy(ALLOW_CAPTURE_BY_NONE)
If your app is targeting API 28 or below and you would like to enable audio capture add android:allowAudioPlaybackCapture="true" to your app's manifest.xml.
android:allowAudioPlaybackCapture="true"
manifest.xml
If you would like to disallow some or all of your audio from being captured then update your app according to the instructions above.
For more information check out the Audio Playback Capture API documentation.
Posted by Patricia Correa, Director, Developer Marketing
We just wrapped up the Indie Games Showcase in Europe, Japan & South Korea! Back in March we started our search for some of the newest and most creative indie titles from these regions. The search culminated last week with the celebration of indie developers at events in London, Tokyo, and Seoul, and the selection of the winners from our finalists. Developers from 12 countries traveled to the events and showcased their games to the audience of gamers, industry experts, YouTube creators, and journalists.
The games were on show to the public, who spent several hours trying out their games and voting for their favourites, alongside the Google Play team. The top 10 finalists were then selected, and went on to pitch their games, and compete for big prizes in front of the jury.
Now, we are happy to announce the winners from each region! They will be returning home with a prize package that includes promotions on the Google Play Store, consultations with Google teams, Google hardware, and more.
We also want to take this opportunity to congratulate all the other finalists and developers who entered the competition this year. We are impressed by your creativity and passion, and hope you will continue to create amazing experiences for players worldwide.
G30 - A Memory Maze by Ivan Kovalov (Russia)
Ordia by Loju (United Kingdom)
Photographs by EightyEight Games (United Kingdom)
The other finalists as selected by audience and Google Play votes were:
#DRIVE by Pixel Perfect Dude (Poland)
Fly THIS! By Northplay (Denmark)
Golf Peaks by Afterburn (Poland)
Rest in Pieces by Itatake (Sweden)
see/saw by Kamibox (Germany)
STAP by Overhead Game Studio (United Kingdom)
Tesla vs. Lovecraft by 10tons (Finland)
Infection - 感染 - by CanvasSoft
MeltLand by 個人
Bear's Restaurant by 個人
Lunch Time Fish by SoftFunk HULABREAKS
ReversEstory by 個人
Kamiori - カミオリ by TeamOrigami
キグルミキノコ Q-bit -第一章- by 個人
クマムシさん惑星 ミクロの地球最強伝説 by Ars Edutainment
Girl x Sun - Terasene - Tower defence & Novel game by SleepingMuseum
Persephone by Momo-pi
ROOMS: The Toymaker's Mansion by HandMade Game
Seoul2033: Backer by Banjiha Games
Cartoon Craft by Studio NAP
Hexonia by Togglegear
Hexagon Dungeon by Bleor Games
7Days - Decide your story by Buff Studio
WhamBam Warriors by DrukHigh
Onslot Car by Wondersquad
Maze Cube by IAMABOY
언노운 나이츠 by teamarex
How useful did you find this blog post?
★ ★ ★ ★ ★
Posted by Oscar Rodriguez, Developer Advocate
When designing and developing an app or game, at some point you may ask yourself if you want to monetize it.
If you choose to do so by selling products via Google Play, you will most likely have a store screen that shows available items for sale, and use the Google Play Billing Library to display dialogs that allow your users to complete their purchase.
While there is a more detailed explanation in the documentation and in the Billing Library TrivialDrive samples, the general flow is as follows:
launchBillingFlow()
onPurchasesUpdated()
consumeAsync()
acknowledgePurchase()
If your app is still using the Google Play Billing AIDL API, it is also possible to perform the same task. Keep in mind that the AIDL API is now deprecated, so we strongly recommend you migrate to the Google Play Billing Library as soon as possible.
If you are using the AIDL API, the flow is very similar:
getBuyIntent()
getBuyIntentExtraParams()
startIntentSenderForResult()
Intent
onActivityResult()
getPurchases()
consumePurchase()
Nevertheless, just implementing the above mentioned flow is not enough to correctly handle all types of purchases. There are two main cases in which purchases will not be correctly handled by this flow.
The first case happens when the purchase flow is interrupted before it finishes. The app may have crashed, the user may have killed the app, or the user’s Internet connection may have been lost. In any case, it is possible for the app not to have delivered the item to the user even though Google Play has already processed the payment. In this case, the item is in limbo, because Google Play will not allow an item to be re-purchased until it is consumed, but the app or game won’t consume the item outside of the flow mentioned above.
The second case happens during alternative purchase flows, such as in-app promotions, the recently announced out-of-app subscription surfaces, promo codes for subscriptions, or other promotions in collaboration with Google. In these cases, a user gets an item directly on the Play Store app, while the target app or game may be paused, not running, or even not installed.
For these cases, the Google Play Billing Library and the Google Play Billing AIDL API offer a mechanism to detect purchases that are not acknowledged or consumed.
When using the Google Play Billing API, do the following:
onResume()
queryPurchases()
For the Google Play Billing AIDL API, do the following:
In either case, when you detect and process an unconsumed item in this manner, users will expect the app or game to communicate about it. We suggest that you display a dialog, message box, or notification that tells the user that they have successfully received their item.
Keep in mind that your app’s onResume() callback will be called when its process is started, as well as when it is brought to the foreground, regardless of which screen the app or game was in before it was paused. For example, a game with a home screen, a store screen, and a game screen might get its onResume() called from any of those screens. For an optimal user experience, we suggest you make it so your app or game handles unacknowledged or unconsumed items regardless of the screen you display when onResume() gets called. Thorough testing of this process in each screen is crucial to deliver a great user experience.
Finally, there is one more case your app must handle: when a user acquires an item from the Play Store app, and both the Play Store app and your app are visible at the same time with multi-window mode.
To support this scenario with the Google Play Billing Library, do the following:
PurchasesUpdatedListener
com.android.vending.billing.
PURCHASES_UPDATED
onPause()
Just as before, you should display a dialog, message box, or notification that tells the user that they have successfully received their item.
If you follow these steps, your app or game will be better prepared to robustly handle purchase flow interruptions and alternative purchase flows.
Posted by Vineet Tanwar, Business Development Manager, Google Play
In April we opened applications for the 2019 class of Indie Games Accelerator, a program to help top mobile game startups from emerging markets achieve their full potential on Google Play. We’re truly awed by the response we have received with over 1,700 applications from developers across 37 countries*. We continue to be impressed by the innovation and creativity of game developers everywhere.
Now, it's time to introduce you to the developers selected for the class of 2019. Here they are:
Congratulations to the selected participants and we look forward to meeting you in Singapore!
Find out more about the program or express your interest in joining the next class of the Indie Games Accelerator.
* The competition is open to developers from the following countries: Bangladesh, Brunei, Cambodia, India, Indonesia, Laos, Malaysia, Myanmar, Nepal, Pakistan, Philippines, Singapore, Sri Lanka, Thailand, Vietnam, Egypt, Jordan, Kenya, Lebanon, Nigeria, South Africa, Tunisia, Turkey, Argentina, Bolivia, Brazil, Chile, Colombia, Costa Rica, Ecuador, Guatemala, Mexico, Panama, Paraguay, Peru, Uruguay and Venezuela
Posted by Patricia Correa, Director, Platforms & Ecosystems Developer Marketing
Back in March we opened submissions for the Indie Games Showcase, an international competition for games studios from Europe*, South Korea, and Japan who are constantly pushing the boundaries of storytelling, visual excellence, and creativity in mobile.
We were once again impressed by the diversity and creativity that the indie community is bringing to mobile, and we’re happy to announce the 20 finalists.
Check out the local websites to learn more about the finalists and the events.
AntVentor by LoopyMood (Ukraine)
CHUCHEL by Amanita Design (Czech Republic)
Fobia by Tapteek (Russia)
Gold Peaks by Afterburn (Poland)
Grayland by 1DER Entertainment (Slovakia)
Hexologic by MythicOwl (Poland)
Lucid Dream Adventure by Dali Games (Poland)
OCO by SPECTRUM48 (United Kingdom)
Peep by Taw (Russia)
Returner Zhero by Fantastic, yes (Denmark)
Tiny Room Stories: Town Mystery by Kiary games (Russia)
ALTER EGO by 株式会社カラメルカラム
Jumpion - Make a two-step jump ! by Comgate
SumoRoll - Road to the Yokozuna by Studio Kingmo
Escape Game: The Little Prince by 株式会社 Jammsworks
ゴリラ!ゴリラ!ゴリラ!by Gang Gorilla Games
タシテケス by 個人
Destination: Dragons! by GAME GABURI
Cute cat's cake shop by 個人
Hamcorollin' by illuCalab.
Food Truck Pup: Cooking Chef by 合同会社ゲームスタート
다크타운 - 온라인 by 초콜릿소프트
Bad 2 Bad: Extinction by Dawinstone
셧더펑 : 슈팅액션 by Take Five Games
Catch Idle by HalftimeStudio
Mahjong - Magic Fantasy by Aquagamez
Road to Valor: World War II by Dreamotion Inc.
Rhythm Star: Music Adventure by Anbsoft
Super Jelly Pop by STARMONSTER
UNLINK Daily Puzzle by Supershock
몬스터파크 온라인 by OVENCODE
We will welcome all finalists at events in London, Seoul, and Tokyo, where they will showcase their games to an audience of players, press and industry experts, for a chance to win the top prizes.
The events are open to the public, so if you would like to meet these games developers, try out their creations, and help choose the winners, sign up on the regional websites.
Congratulations to all finalists!
* The competition is open to developers from the following European countries and Israel: Austria, Belgium, Belarus, Czech Republic, Denmark, Finland, France, Germany, Italy, Netherlands, Norway, Poland, Romania, Russia, Slovakia, Spain, Sweden, Ukraine, and the United Kingdom (including Northern Ireland).