If you manage multiple websites or apps, you probably share my frustration with Google Analytics 4 (GA4). Checking the real-time active users across five different projects means opening five tabs, clicking through dropdowns, and waiting for properties to load.
It’s tedious. So, as developers do, I decided to build my own solution: LiveStack GA.
LiveStack is a native Android dashboard that aggregates the real-time active user count from ALL your selected GA4 properties into a single, live-updating screen.
Here is a breakdown of how I built it, the tech stack I used, and the absolute nightmare of getting an OAuth-based app approved by Google Play Reviewers.
🛠️ The Tech Stack
I needed to build a highly responsive, data-heavy dashboard rapidly, so I went with:
- Frontend: Flutter (Dart). The hot-reload feature saved me hours when tweaking the drag-and-drop property list UI.
- Authentication: Firebase Auth & Google Sign-In.
- Data Source: Google Analytics Data API (v1beta).
The core logic is simple: Authenticate the user requesting the analytics.readonly scope, fetch their account summaries, and then run a concurrent polling function to fetch the activeUsers metric for the selected properties.
🛡️ The Final Boss: Google Play Reviewers
Building the app was the easy part. Getting it published was a psychological thriller.
Since the app requests a sensitive OAuth scope (https://www.googleapis.com/auth/analytics.readonly), it required a strict verification process. But the real issue wasn't the API approval—it was the Play Store App Review.
My app kept getting rejected for a "Sign in failed" error. I tested it locally on physical devices and emulators, and it worked flawlessly. I double-checked the Play App Signing SHA-1 keys in Firebase. Everything was perfect.
So, what was happening?
The Emulator IP Trap:
Google Play Reviewers (or their automated bots) test apps on fresh emulators located in various data centers.
- The reviewer opens my app and clicks "Sign in with Google."
- They input the test credentials I provided.
- Google’s own Account Security detects a login from a suspicious IP/unrecognized emulator and blocks the attempt, asking for OTP verification.
- The reviewer cannot provide the OTP, cancels the login flow, and the app throws a
nullresponse, which my UI caught as "Sign in canceled." - The reviewer assumes my app is broken and hits Reject.
Yes, Google's security was blocking Google's reviewers from testing an app that uses Google's API.
💡 How I Bypassed the Loop
If you are building an Android app that relies heavily on Google Sign-In, here is how you beat this loop:
-
Manual GCP Sync: Make sure the Play Store App Signing SHA-1 is manually registered as an Android Client ID in the Google Cloud Console (APIs & Services > Credentials), not just in Firebase. Sometimes Firebase fails to sync it to GCP, causing silent
Developer Error 10crashes on the reviewer's end. - The "Unlisted Video" Method: You cannot change Google's security policies, so you have to prove the app works visually. I recorded a screen capture of the app logging in perfectly with the test credentials, uploaded it to YouTube as Unlisted, and explicitly linked it in the App Access instructions.
- Firm Instructions: I added a note to the reviewer in the Play Console: "If you get a sign-in error, it is because Google Account Security is blocking your emulator's IP. Please refer to this video proof."
After weeks of rejections and debugging, the app finally got approved! 🎉
🚀 The Result
LiveStack GA is now live on the Play Store.
- It monitors live traffic across dozens of websites simultaneously.
- It auto-sorts properties based on highest active users.
- It’s completely secure (all API calls happen locally on the device, no third-party servers).
If you are an indie hacker, developer, or marketer, I’d love for you to try it out and let me know what you think of the UI/UX.
👉 Download LiveStack GA on Google Play
Have you ever faced a similar ridiculous rejection loop with app reviewers? Let’s hear your horror stories in the comments!
Top comments (0)