Join us for the monthly mini-profiles on Firebase team members, aka “Firebasers”, from all around the world! Learn about their backgrounds, how they got started with Firebase, what Firebase products they work on, their favorite ways to de-stress, advice, and more.
For our first feature, we’re happy to introduce you to a long standing member of the Firebase community. You may know his work from Firebase Release Notes, one of his talks at Google events, or used one of his many community responses from Stack Overflow. And now, we give you puf!
How did you get started with Firebase?
I was in the habit of answering questions on Stack Overflow to learn about interesting new technologies, when questions about Firebase started showing up. My answers got noticed, and that led to me becoming a member of the Firebase team at Google. And 7 years later, answering questions about Firebase on Stack Overflow is still one of my favorite things to do each day!
Not sure if it counts as a nickname, but I am known as puf. While I respond to both Frank and puf equally, I'm usually the only puf in the room. I got the nickname in my teens, as I was really tired of all the variations of my last name, and I've been known as “puf” to most people since then.
Mobile users expect their apps to be fast and responsive, and apps with a slow startup time, especially during coldstart, can leave them feeling frustrated. Firebase Performance Monitoring is a tool that helps you gain insight about various app quality signals, including startup time of your application. This article gives a deep dive into the Firebase Performance Monitoring tool and its impact during an Android application’s cold start.
Library impact at startup
Modern Android applications perform multiple operations until the application becomes responsive to the user. “Startup time” of an application measures the time between when an application icon is tapped on the device screen, to when the application is responsive. Code executing during startup time includes the application's code, along with code from dependencies that are involved in app startup. Any code that executes until the first frame is drawn is reflected in the time to initial display metric.
Many libraries do not need to get initialized during the application startup phase. Some libraries, like Firebase Performance Monitoring, provide value by initializing during the startup phase. It is this early initialization that enables measurement of app start, CPU/Memory impact during early phases of startup, and performance of network requests during application startup. But, this could lead to an increase in the startup time of the application.
You can measure the impact of a library during your app’s startup by creating 2 versions of your app (with and w/o the library) and measuring the “time between Application launch to Activity firstFrameDrawn” in both to compare.
Firebase Performance Monitoring at startup
Firebase Performance Monitoring performs the following tasks during an application cold start:
Registers dependencies
Configuration management: Controls measuring performance metrics on a percentage of devices by looking at locally cached configurations
Firebase Installations: Installation service for each Firebase installed device
Initializes the performance library
Tracks the startup time of the application
Measures detailed system metrics (CPU/Memory) for a fraction of the cold starts (See sessions).
Firebase Performance Monitoring does all these without developers needing to add any lines of code to their application.
Performance Monitoring app startup time optimization
There are many tools available to profile the performance of an application. We used the following tools for measuring the startup time and analyzing the impact of every single method in our library during application cold start.
Macrobenchmark is a recent tool launched at Google I/O '21 to measure the startup and runtime performance of your application on physical devices. We used this tool to measure the overall time taken by an application during a cold start.
Method tracing enables understanding all the classes/methods that were involved in the runtime of an application. This lists down the different methods that get executed at runtime and the duration each method takes for execution. Due to the overhead of method tracing, the duration of methods as specified in the trace file is bloated. Nonetheless, this duration can be used as a guiding metric to understand the impact of a method.
Using the method tracing APIs, we identified multiple opportunities within the application’s lifecycle events to reduce the impact of the library during application startup, including:
Content Provider
Activity Create
Activity onResume
We optimized the library in all these phases. Some key optimizations include:
In the content provider phase, we moved away from eager initialization to lazy initialization creating components when needed. Eg: dependency initialization.
In the phases of activity onCreate() and onResume(), we moved many of the non-essential operations from main thread to run on background thread allowing the main thread to focus on the applications’ needs (#1, #2)
Delayed initialization of certain non-urgent firebase performance components to a later time after the application has performed its startup operations. Eg: Event dispatch service
Delayed fetching of remote configurations Eg. Firebase Remote Configuration
Impact of Firebase Performance Monitoring
To benchmark the impact of Firebase Performance Monitoring, we built a simple Android application. Benchmarking performance depends on various factors. To make this measurement close to user needs, we measured the startup time with the following factors.
We ran the application with and without Firebase performance library to understand the startup time impact caused by the library. We used macrobenchmark to measure the duration of the startup time.
For an empty application with the above ground conditions, the table below captures the impact of the application startup before and after the optimizations.
With all the above changes, we have been able to reduce the impact of the library during startup time by more than 35%.
What’s next?
Application startup time improvement is a moving target for all developers. Though device hardware has been dramatically improving in recent years, the challenge of improved startup time performance continues to push barriers. We are continuously investing in reducing the startup time impact.
Update your Firebase Performance Monitoring SDK to the recent version to get these recent improvements on startup time, realtime metrics and alerts.
Mobile app and game developers can use on-device machine learning in their apps to increase user engagement and grow revenue. We worked with game developer HalfBrick to train and implement a custom model that personalized the user's in-game experience based on the player's skill level and session details, resulting in increased interactions with a rewarded video ad unit by 36%. In this blog post we'll walk through how HalfBrick implemented this functionality and share a codelab for you to try it yourself.
Background
Every end-user or gamer is different, and personalizing an app purely based on hard-coded logic can quickly become complex and hard to scale. However, taking all relevant signals into account, game developers can train a Machine Learning model to create a personalized experience for each user. Once trained, they can “ask” the model to give the best recommendations for a particular user given a set of inputs (e.g. “Which item from the catalog should I offer to a user that has reached skill level ‘pro’, is on level 5, and has 1 life left?")
Custom ML models can be architected, tuned, and trained based on the inputs that you think are relevant to your decision, making the implementation specific to your use case and customers. If you are looking for a simpler personalization solution that doesn’t require you to train your own model and where the answer is unlikely to change multiple times per session (e.g. "What is the right frequency to offer a rewarded video to each user?") we recommend using Firebase Remote Config’s personalization feature.
We recently worked with game developer HalfBrick on optimizing player rewards within one of their most popular games, with over 500M downloads, Jetpack Joyride. In-between levels, players are presented with an option to obtain a digital good by watching a rewarded video ad. Our objective was to increase the conversion rate for this particular interaction. Before the study, the digital good offered in return for watching the ad was always selected at random. Using a custom ML model, we were able to personalize which reward to offer using inputs such as the gamer’s skill level, and information about the current session (e.g. why they died in the last round, what powerups they selected), and increased conversions by 36% in just our first iteration of the experiment. Once trained, the model runs fully on-device, so it doesn’t require network requests to a cloud service and there are no per-inference costs.
Solution
ML workflows largely anchor themselves on to the following components: A problem to solve, data to train the model, training of the model, model deployment, and client-side implementation. We have described the problem above, and will now cover the rest of the steps. You can also follow along with more detailed implementation steps in the codelab.
Collect the data necessary to train the model
HalfBrick collected 129 different signals to train the model. These were of different types, such as event timestamp, user skill levels, information about recent sessions, and other information about the user's gameplay style. This is where intuition around which factors could influence the outcome are very helpful (e.g. a user’s skill level, point balance, or choice of avatar may be useful when predicting which powerups they’d prefer).
We can collect training data easily by sending events to Google Analytics for Firebase and then exporting them to BigQuery. BigQuery is Google’s fully-managed, serverless data warehouse that enables scalable analysis over petabytes of data. In our scenario, it makes it easy to summarize and transform the data to get it ready for model training, as well as combine it with other data sources our app might be using
Train the model, evaluate its performance, and iterate
Training requires a model architecture (e.g. number of layers, types of layers, operations), data, and the actual training process. We picked a reference architecture implemented in TensorFlow, and iterated both on the data we used to train it and the architecture itself. In a production workflow we would retrain the model regularly with fresh data to ensure that it continues to behave optimally.
In our codelab we have abstracted away the process of refining the model architecture, so you can still implement this workflow without having much of a background in ML.
Deploy the latest version of the model
Traditional ML models that run in the cloud can be easily updated, just like you would a web application or service. With on-device ML we need a strategy to get the latest model onto the user’s device. The first version can be bundled with the app, so that when the user first installs it there is a version ready to go. Subsequent updates are made by deploying the models to Firebase ML. With a combination of Remote Config and Firebase ML you can direct users to the right model name (e.g. “active_model = my_model_v1.0.3”), which will then automatically download the latest available model.
Run the model on the device
Once the model is deployed on the device, we use the TensorFlow Lite runtime to “make inferences” or ask questions of the model based on a set of inputs. You can think of this as asking, “What digital good should I show a user based on the following characteristics?” We configured our implementation so that a certain percentage of sessions are shown a random option, which will help us gather new data and keep the model fresh and updated.
Try it yourself!
We have created a codelab for you to easily follow and replicate these steps in your own app or game. In this implementation you will encounter a scenario similar to HalfBrick's, but we've reduced the number of input features to 6 to make it easier for you to replicate and learn from. You should start with these and iterate as you see fit.
We hope you can use this ML workflow to build smarter and more engaging apps for your users and grow your business!
Back in 2019 we launched Firebase Extensions - pre-packaged solutions that save you time by providing extended functionality to your Firebase apps, without the need to research, write, or debug code on your own. Since then, a ton of extensions have been added to the platform covering a wide range of features, from email triggers and text messaging, to image resizing, translation, and much more.
With the Google Pay Firebase Extension, your app can accept payments from Google Pay users, using one or more of the many supported Payment Service Providers (or PSPs), without the need to invoke their individual APIs.
With the extension installed, your app can pass a payment token from the Google Pay API to your Cloud Firestore database. The extension will listen for a request written to the path defined during installation, and then send the request to the PSP's API. It will then write the response back to the same Firestore node, which you can listen and respond to in real time.
Open Source
Like all Firebase Extensions, the Google Pay Firebase Extension is entirely open source, so you can modify the code yourself to change the functionality as you see fit, or even contribute your changes back via pull requests - the sky's the limit.
Summing it up
Whether you're new to Google Pay or Firebase, or an existing user of either, the new Google Pay extension is designed to save you even more time and effort when integrating Google Pay and any number of Payment Service Providers with your application.
An important part of turning your app into a business is to optimize your user experience to drive the bottom line results you want. A popular way to do this is through manual experimentation, which involves setting up A/B tests for different components of your app and finding the top performing variant. Now, you can save time and effort - and still maximize the objectives you want - with Remote Config’s latest personalization feature. Personalization harnesses the power of machine learning to automatically find the optimal experience for each user to produce the best outcomes, taking the load off you.
At Firebase Summit 2021, we announced that Remote Config personalization is officially available in beta! Let’s take a closer look at this new feature, how it differs from A/B testing, and how you can use it today to grow your business.
What is Remote Config personalization?
Remote Config lets you dynamically control and change the behavior and appearance of your app without releasing a new version or setting up any complex infrastructure. You can use Remote Config to implement feature flags, perform A/B tests, customize your app for different user segments, and now, with personalization, optimize your user experience with minimal work. All you need to do is specify the objective you want to maximize, and personalization will continuously find and apply the right app configuration for each user, taking their behavior and preferences into account and tracking impact on secondary metrics along the way. For example, you can personalize the difficulty of your game according to player skill levels to maximize engagement and session duration.
How does Remote Config personalization differ from A/B testing?
A/B testing and personalization are both good frameworks for app optimization. While they share some similarities, there are a few big differences that are worth pointing out. First, A/B testing requires you to be hands-on throughout the whole process - from setting up the experiment, determining the variables, monitoring and analyzing results, to rolling out the winning variant. With personalization, you determine the experiences you want to try and state the objective you want to maximize. Then, the personalization algorithm uses machine learning to do the rest. It automatically tries different alternatives with different users, learns which alternatives work best, and chooses the alternative that is predicted to maximize your objective.
Second, A/B testing finds a single, global optimum, while personalization gets more granular to find the optimum treatment for each user so you’re not leaving value on the table.
And a third important difference is the timing required for each feature. A/B testing usually takes at least a few weeks to run an experiment and return a result, whereas personalization goes to work immediately, optimizing selections from the moment it is enabled.
When should you use A/B testing vs. Remote Config personalization?
Halfbrick, the game studio behind titles like Jetpack Joyride, Dan the Man, and the instant-classic Fruit Ninja, used personalization to optimize ad frequency, which led to a 16% increase in revenue without affecting engagement or retention. They also used personalization to determine the best time (i.e. when users are most enjoying the game) to ask users to rate their app, and were able to boost positive app store ratings by 15%.
In their own words:
"The granularity achieved with Remote Config's personalization feature is impossible for a human to instrument. Personalization has given us new insight into how we can optimize our ad strategy and even helped us challenge our own assumptions that players don't like too many ads."
— Miguel Pastor, Product Manager, Halfbrick
Ahoy Games, another early customer, tried personalization in a number of their games and successfully grew in-app purchases by 12-13% with little to no effort from their team.
Their CEO, Deniz Piri, had this to say:
“We are very impressed with how magical the personalization feature has been. It's so much more than an A/B test, as it continuously optimizes and serves the right variant to the right groups of people to maximize conversion goals. Without Firebase, we would have a harder time succeeding in an arena full of bigger corporations with our humble 13-person team.”
How to set up personalization in your app
Let’s walk through an example - say you wanted to personalize the moment you show an ad to players in your game based on how many levels they’ve completed, with the objective of maximizing the number of ad clicks generated in a gaming session.
We’ll suppose you have three alternatives that personalization can choose from:
Show an ad after every level completed
Show an ad after every three levels completed
Show an ad after every seven levels completed
Let’s look at how you can set this up in your application using Remote Config.
Alternatively, you can also check out this video walkthrough of the personalization feature which includes an overview and an example on how to personalize the timing for showing an app rating prompt to maximize the likelihood of users submitting a review. You can also check out the personalization documentation for complete instructions on getting started with personalization.
The first step will be to go into the Firebase console and into the Remote Config section to create an RC parameter that can be used to provide one of these alternatives in your application. This can be done by navigating to the Firebase console > Remote Config and clicking on “Create configuration” if it’s your first time using Remote Config, or “Add parameter” if you already have some created. This will open up the parameter editor as shown below.
Next, click on Add new > Personalization which will open the personalization editor where you can specify alternative values for the parameter, select the primary objective, as well as set additional metrics and targeting conditions for the personalization. In this example, I’m using ad clicks as the primary optimization goal, and tracking user engagement as a secondary metric to monitor as personalization delivers personalized values to users.
How to create a personalized parameter, including personalization goals and additional metric tracking within a few clicks in the Remote Config parameter editor.
Now you’ll just need to click on “Save” and “Publish changes” to make the new parameter available to any running application instances. The final step is to implement and use your new Remote Config parameter in your application code. You can follow the getting started guide to complete these final steps based on which platform your app is targeting.
From here, personalization will go to work immediately, selecting the best predicted alternative for each user, and collecting metrics along the way to help you determine the effectiveness of personalization in optimizing towards your primary goal. Over time, you’ll see a results summary screen similar to the one in the screenshot below:
The box in gray represents the baseline holdout group, while the box in blue represents the group of users who’ve received personalized values. The total lift shows how much additional value personalization has generated relative to the holdout group that didn’t receive personalized values. Since the baseline group will be much smaller than the personalization group, the numbers in the baseline holdout group are scaled up so that the numbers are comparable, and the total lift can be calculated. You can also breakdown baseline performance details to see how each alternative value performed individually.
As time goes by, you can revisit the results summary page to ensure that the personalization is continuing to deliver more value than the baseline group, maximizing your goal automatically as personalization and Remote Config do their work.
Now that personalization is available in public beta you can start scaling your app today without scaling your effort. Check it out in the Firebase console today, or take a look at our documentation to learn more.
Here at Firebase, we believe developers play an instrumental role in helping people learn, live better, go places, and grow businesses. That’s why we’re committed to providing you with integrated, easy-to-use, and extensible tools so you can continue to create experiences that billions of people not only rely on, but love.
Millions of apps actively use Firebase every month, created by businesses of all sizes, from startups to global enterprises. Your trust in us is what motivates and inspires us to make Firebase even better. Today, Firebase Summit is returning as a virtual event and we’re excited to unveil updates to our platform that will help you accelerate app development, run your app with confidence, and scale with ease. Read on for more details on what’s new, and don’t forget to check out all of the great content (including technical sessions, demos, pathways, and more) from the summit on our event website!
Jump to a particular section if you’re short on time, or read the entire article below.
Accelerate app development with new building blocks
Accelerate app development with new building blocks
Firebase helps you get your app up and running by providing fully-managed infrastructure, with a streamlined experience, that lets you focus on what matters most.
Firebase Extensions are pre-packaged bundles of code that automate common development tasks and let you add functionality to your app in fewer steps. We’ve been partnering with companies you know and trust so you can integrate multiple services without learning new APIs. Our friends at Stripe recently added one-time payments and an SDK to their Run Payments with Stripe extension. Plus, they just launched a new feature that lets you accept over 15 different payment methods including wallets, bank redirects, and "Buy now, Pay later" within your app.
We’re also unveiling new Extensions for adding critical e-commerce features to your app in less time. These Extensions can help you ship and track merchandise with ShipEngine, re-engage users who abandon their shopping carts with SendGrid emails or SMS messages via Twilio, and implement search on Cloud Firestore with Elastic. You can even add a single interface to accept payments from multiple providers through Google Pay - which is especially handy if you’re launching your app internationally. For more details, go to the Firebase Extensions page and install them today! And if you need inspiration to get started, check out the code for our sample app on GitHub that uses over 17 different Extensions and view the deployed version at: https://karas-coffee.web.app/.
These new Extensions, built by our partners in collaboration with Firebase, help you add e-commerce features to your app much faster
With enhanced support for Apple platforms, you can deliver a smooth cross-device experience
If you’re a game developer, you’ll be happy to learn that many of our C++ SDKs now support Apple TV, so you can develop phenomenal Apple Arcade games with Firebase! On top of that, we’re expanding support for game frameworks and engines by making Cloud Firestore available for Unity and C++. This lets you add the power of Cloud Firestore to your game in seconds to store and sync your game data in near real-time, add offline support, and scale your game experience to support thousands of players.
Cloud Firestore is now available for Unity and C++, giving you real-time data synchronization capabilities and offline support
We’ve also made a number of big improvements to Crashlytics’ Unity and NDK SDKs to make it easier to debug your game’s codebase. Now, Crashlytics tracks a wider range of native crash types, and includes IL2CPP support for Unity games to show more symbolicated C++ frames that can be mapped to your C# code.
Finally, with the latest release of Dartpad, Flutter’s online editor, you can use Flutter and Firebase together to develop apps that reach users across platforms with just your browser. Flutter is Google's open source framework for building beautiful, natively compiled, multi-platform apps from a single codebase. It's a natural complement to Firebase's cross-platform backend services. Today, Dartpad supports Cloud Firestore and Firebase Authentication, with other Firebase products coming soon! Go to dartpad.dev and import the Firebase packages to get started. You can also take a look at our sample app.
Dartpad, Flutter’s online editor, now gives you support for Firebase right out of the box
We’re launching detailed documentation that specifies what data each Firebase product collects and shares to help you comply with Google Play’s upcoming safety policies. Our goal is to build upon Google’s commitment to privacy and transparency, and give you a head start to prepare for Google Play’s new data safety section, which launches to app users next year.
The above image is an example only and subject to change
Gain actionable insights to run your app with confidence
With Firebase, you can monitor your app’s performance and stability, test changes, and get insight on how you can resolve issues to deliver the best experience possible.
Firebase Performance Monitoring gathers and presents data about your app’s performance, so you know exactly what’s happening in your app –and when users are experiencing slowness– from their point of view. However, no matter how thoroughly you test your app on your local machine, your app can still run into latency issues because users will access it on different devices, from different countries, and on different network speeds. To keep you informed, we’re releasing a new feature called performance alerts in beta! These new performance alerts will send you an email when your app start time exceeds a given threshold so you can investigate and fix the latency issue as soon as it appears. Performance alerts can be configured from the console and we’ll be adding more alerts for otherperformance metrics soon.
Performance Monitoring’s new real-time alerts will let you know if your app start time slows down
Firebase Crashlytics gives you a complete view into your app’s stability so you can track, prioritize, and resolve bugs before they impact a large number of users. On top of Crashlytics' enhanced support for Apple platforms and game reporting, Crashlytics now reports Application Not Responding (ANRs) errors! According to our research, ANRs account for almost 50% of all unintended application exits on Android, meaning they can be more detrimental to your app’s quality than crashes. To give you a comprehensive view of your app’s stability issues, Crashlytics now reports ANRs and surfaces contextual information about impacted threads so you can pinpoint the cause of the ANR.
Crashlytics now reports Application Not Responding errors, giving you a more comprehensive view of app stability
We’re also unveiling a new concept in Crashlytics called signals. Signals analyze your crashes to uncover interesting commonalities and characteristics that are helpful for troubleshooting. Today, we’re launching with three signals: early crashes, fresh issues, and repetitive issues. Early crashes refer to crashes that users experience near app start. Fresh issues are new issues in the last 7 days, while repetitive issues are issues that users have been encountering over and over again. Signals are available to both Apple and Android app developers. Check them out during your next app release!
Crashlytics signals surface interesting commonalities and characteristics of crashes to improve troubleshooting
Scale with ease by using powerful engagement tools
As your app grows, Firebase offers the control, automation, and flexibility you need to drive the business outcomes you want, such as increasing engagement and revenue.
Firebase Cloud Messaging makes it easy to send targeted, automated, and customized push notifications across platforms so you can reach users even when they aren’t actively using your app. Firebase In-App Messaging gives you the ability to send contextual messages to users who are actively using your app so you can encourage them to complete key in-app actions. These two products go hand-in-hand in keeping users engaged. That’s why we’re thrilled to reveal a redesigned console experience that brings them together. This unified dashboard gives you a holistic view into all of your messaging campaigns, so you can run sophisticated, multi-touch campaigns for different audiences and see how they perform – from one place. For example, you can send a coupon code to users who are predicted to churn to keep them around because both Cloud Messaging and In-App Messaging work seamlessly with Google Analytics’ new Predictive Audiences. To try the new unified dashboard, visit the console and click the “Preview now” button.
The unified dashboard for Cloud Messaging and In-App Messaging lets you view and manage your campaigns from one place
Another way to retain and delight users is by personalizing the app experience to suit their needs and preferences. With Firebase Remote Config, you can dynamically control and change the way your app looks and behaves without releasing a new version. Today, we’re excited to launch a new Remote Config feature called personalization into beta! Personalization gives you the ability to automatically optimize individual user experiences to maximize the objectives you care about through the power of machine learning. After a simple setup, personalization will continuously find and apply the right app configuration for each user to produce the best outcome, taking the load off of you.
Halfbrick, the game studio behind titles like Jetpack Joyride, Dan the Man, and the instant-classic Fruit Ninja, has already used personalization to increase revenue by 16% and boost positive app store ratings by 15%! Ahoy Games, another early customer, tried personalization in a number of their games and successfully grew in-app purchases by 12-13% with little to no effort from their team.
Remote Config personalization uses machine learning to help you optimize user experiences to achieve your goals
We’ve also made several core improvements to Remote Config, including updating the parameter edit flow to make it easier to change targeting conditions and default values, and adding data type support to strengthen data validation and reduce the risk of pushing a bad value to your users. Finally, we’ve revamped the change history so you can clearly see when and how parameters were last changed. This will help you understand which app configuration changes correlate to changes in key metrics. Go to the Remote Config console to check out these updates and try personalization today!
Targeting and data validation improvements in Remote Config
Your partner throughout your app’s journey
From building your app to optimizing it, we are your partner throughout the entire journey. We aim to make app development faster, easier, and streamline your path to success.You can rely on us to help you make your app the best it can be for users and your business. To get more insight into the announcements we shared above, be sure to check out the technical sessions, codelabs, and demos from Firebase Summit! If you want a sneak peek at what we’ll be launching in 2022, join our Alpha program!
Getting feedback on your app's releases before they reach the store is critical. App Distribution makes it easy to share pre-release builds of your Android and iOS apps with your testers. You can distribute your apps to testers using the Firebase console, the Firebase CLI, or the App Distribution plugins for Gradle and fastlane.
We've also heard that you'd like to integrate your own tools directly with App Distribution, or implement custom pre-release testing workflows. That's where the Firebase App Distribution REST API comes in. With this API, you can build custom logic into your team's tools and services to add and remove testers, upload new app binaries, distribute your releases, update release notes, deleting releases, and more.
For example, let's say that your company gives all employees early access to the latest builds of your app. You also have a personnel management tool that automates the employee onboarding and offboarding process. Wouldn't it be nice if employee access was automatically granted and revoked as employees join and leave your company? With the REST API, you can build this functionality directly into your company's workflow.
Let's walk through the process to automatically grant and revoke access.
Next, in hooks that are triggered when an employee joins or leaves the company, use the testers.batchAdd and testers.batchRemove endpoints to add or remove the employee as a tester in App Distribution using an HTTP request to the API. For example, here's how you can add a new tester using curl:
Let's say you periodically audit access to your pre-release apps to make sure that only authorized internal testers have access. To automate this audit, you can use the testers.list endpoint to get the list of testers in your Firebase project. You can then write your own logic to compare that to your list of employee email addresses, or check the domains:
Tester access and auditing is just one example of custom functionality you can build using the API. Other examples of functionality that you can build include keeping release notes in sync with your bug tracking system, fetching details about your most recent release, adding testers to releases from third-party tools, deleting releases in bulk, or fetching test certificate info for your Android app bundle releases.
App Distribution helps you gain confidence in your releases, and the REST API empowers you to integrate pre-release testing into your existing workflows. So get started with the API today! To learn more, and to try out the API using the embedded API Explorer, see the Firebase App Distribution API documentation.
Try out the API using the API Explorer in the documentation.
If you’ve visited the Firebase console’s Analytics section recently, you might have noticed something new… an updated Analytics dashboard, a new Realtime view and a few other UI enhancements.
These new changes are part of our effort to improve the Google Analytics experience in Firebase, by providing access to some of the newest Google Analytics 4 innovations directly in the Firebase console.
New Google Analytics 4 features available in the console
The Dashboard
Firebase now shows a curated collection of Analytics cards that provide the same information as the previous dashboard, but presented more intuitively to get to key insights faster. This matches the ‘App Developer - Firebase’ collection in Google Analytics 4 - meaning you no longer need to switch to the Google Analytics interface to see this data. The cards are now organized by surfacing overview metrics first, followed by user engagement and retention cards, then monetization and user demographics.
The dashboard now also contains a lot of explorer cards that allow you to more easily drill-down into specifics for data represented by that card for more details - like the new App Versions card which provides a quick view into the number of users you have per app version, and a jumpoff link to see more data like engagement rates, revenue and conversions per app version as well.
The Publisher card is another example of providing a more natural flow to learn more about how different ad units are performing as well as the revenue they are generating.
Before adding this card to the dashboard, accessing this information would require digging into specific event reports, like the ad_impression event report to get out the ad unit performance or revenue data. Well, no need to go digging through various event reports anymore with this updated flow that should make accessing this information more convenient and intuitive.
One feature that’s been around in Google Analytics 4 for a while but only just making an appearance in the Firebase console is the Comparisons tool, which replaces what was previously ‘Filters’. Similar to the Filters tool, with the Comparisons tool you can create comparison groups based on any custom or pre-defined Analytics dimensions or audiences. The advantage of the Comparisons tool is that you can create up to five comparison groups at once, and view and compare the Analytics data for each of these groups across all cards on the Analytics dashboard. For example, if you recently ran a promotional campaign offering 10% off in-app purchases to your top purchasers using Remote Config, you can check to see the impact of that at a glance on metrics like user engagement and app revenue by comparing the top purchasers audience, your most engaged users audience, and all users by applying Comparisons in the dashboard.
Note to compare events or conversions as you would have done using Filters in the past, you can navigate to the Events or Conversions card from the dashboard to reveal a detailed report that you can then apply comparisons on.
Check out this article or this video that covers how to use the Comparison tool in more detail.
The Realtime view
The Realtime dashboard now shows the same views as in Google Analytics 4 and is great for, well, seeing events come in real-time from around the world. This can be really useful after just releasing a new feature, and seeing new events come in for the first time as it rolls out to your users. The updated dashboard contains new cards and new card capabilities, like the User Acquisition card that can be filtered by source, campaign, medium and platform, as well as the Users card that can now be filtered by audience.
One of the biggest benefits of this new change is the ability to use the Comparisons tool in the Realtime dashboard, too, so you can create and compare different groups over real-time app analytics data.
Google Analytics settings page
As part of this change, the Google Analytics settings page now links out to the Google Analytics console where you can modify any Analytics settings as you would previously in the Firebase > Project Settings > Integration > Google Analytics page. The Analytics Linking card however is still available and can be edited from within the Firebase console.
We invite you to take the updated Analytics dashboard in the Firebase console for a spin, and as always, let us know if you have any feedback or questions.