Building LiveStack: A Real-Time GA4 Dashboard (And Surviving Google Play's OAuth Review)

Building LiveStack: A Real-Time GA4 Dashboard (And Surviving Google Play's OAuth Review)

# flutter# googleanalytics# android# buildinpublic
Building LiveStack: A Real-Time GA4 Dashboard (And Surviving Google Play's OAuth Review)Widodo Purnomosidi

If you manage multiple websites or apps, you probably share my frustration with Google Analytics 4...

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.

  1. The reviewer opens my app and clicks "Sign in with Google."
  2. They input the test credentials I provided.
  3. Google’s own Account Security detects a login from a suspicious IP/unrecognized emulator and blocks the attempt, asking for OTP verification.
  4. The reviewer cannot provide the OTP, cancels the login flow, and the app throws a null response, which my UI caught as "Sign in canceled."
  5. 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:

  1. 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 10 crashes on the reviewer's end.
  2. 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.
  3. 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!