From 40702e783240580e8df1f16b3bc82e41fe0dfe37 Mon Sep 17 00:00:00 2001
From: MartinBraquet
Date: Sun, 21 Dec 2025 01:06:01 +0200
Subject: [PATCH] Add android app link to google play
---
android/capawesome.json | 2 +-
backend/api/src/create-notification.ts | 19 +++++++++++++++++++
common/src/constants.ts | 1 +
web/components/contact.tsx | 6 ------
web/components/nav/sidebar.tsx | 10 +++++++---
web/lib/firebase/users.ts | 4 ++--
web/lib/service/android-push.ts | 4 ++--
web/lib/util/webview.ts | 4 ++--
web/pages/_app.tsx | 4 ++--
9 files changed, 36 insertions(+), 18 deletions(-)
diff --git a/android/capawesome.json b/android/capawesome.json
index 2cfe7aa..55fa09b 100644
--- a/android/capawesome.json
+++ b/android/capawesome.json
@@ -1,3 +1,3 @@
{
- "version": 16
+ "version": 17
}
\ No newline at end of file
diff --git a/backend/api/src/create-notification.ts b/backend/api/src/create-notification.ts
index 1428957..957b6e1 100644
--- a/backend/api/src/create-notification.ts
+++ b/backend/api/src/create-notification.ts
@@ -3,6 +3,25 @@ import {Notification} from 'common/notifications'
import {insertNotificationToSupabase} from 'shared/supabase/notifications'
import {tryCatch} from "common/util/try-catch";
import {Row} from "common/supabase/utils";
+import {ANDROID_APP_URL} from "common/constants";
+
+export const createAndroidReleaseNotifications = async () => {
+ const createdTime = Date.now();
+ const id = `android-release-${createdTime}`
+ const notification: Notification = {
+ id,
+ userId: 'todo',
+ createdTime: createdTime,
+ isSeen: false,
+ sourceType: 'info',
+ sourceUpdateType: 'created',
+ sourceSlug: ANDROID_APP_URL,
+ sourceUserAvatarUrl: 'https://firebasestorage.googleapis.com/v0/b/compass-130ba.firebasestorage.app/o/misc%2Fcompass-192.png?alt=media&token=9fd251c5-fc43-4375-b629-1a8f4bbe8185',
+ title: 'Android App Released on Google Play',
+ sourceText: 'The Compass Android app is now publicly available on Google Play! Download it today to stay connected on the go.',
+ }
+ return await createNotifications(notification)
+}
export const createAndroidTestNotifications = async () => {
const createdTime = Date.now();
diff --git a/common/src/constants.ts b/common/src/constants.ts
index 28397d1..8d1b773 100644
--- a/common/src/constants.ts
+++ b/common/src/constants.ts
@@ -17,6 +17,7 @@ export const stoatLink = "https://stt.gg/YKQp81yA"
export const redditLink = "https://www.reddit.com/r/CompassConnect"
export const xLink = "https://x.com/compassmeet"
export const formLink = "https://forms.gle/tKnXUMAbEreMK6FC6"
+export const ANDROID_APP_URL = 'https://play.google.com/store/apps/details?id=com.compassconnections.app'
export const IS_MAINTENANCE = false // set to true to enable the maintenance mode banner
diff --git a/web/components/contact.tsx b/web/components/contact.tsx
index b48d2f6..7d71a4e 100644
--- a/web/components/contact.tsx
+++ b/web/components/contact.tsx
@@ -29,12 +29,6 @@ export function ContactComponent() {
You can also contact us through this feedback form or any of our socials. Feel free to give your contact information if you'd like us to get back to you.
-
Android App
-
- To release our app, Google requires a closed test with at least 12 testers for 14 days. Please share your Google Play–registered email address so we can add you as a tester.
- You'll be able to download the app from the Play Store and use it right away.
- Your email address will NOT be shared with anyone else and will be used solely for the purpose of the review process.
-
(
))}
- router.push('/contact')}
- />
+ onClick={() => router.push(ANDROID_APP_URL)}
+ />}
{user === null && }
{/*{user === null && }*/}
diff --git a/web/lib/firebase/users.ts b/web/lib/firebase/users.ts
index 8a82241..b86913c 100644
--- a/web/lib/firebase/users.ts
+++ b/web/lib/firebase/users.ts
@@ -6,7 +6,7 @@ import {getAuth, GoogleAuthProvider, signInWithCredential, signInWithPopup, conn
import {safeLocalStorage} from '../util/local'
import {app} from './init'
import {GOOGLE_CLIENT_ID} from "common/constants"
-import {isAndroidWebView} from "web/lib/util/webview"
+import {isAndroidApp} from "web/lib/util/webview"
import {SocialLogin} from "@capgo/capacitor-social-login"
import {Capacitor} from "@capacitor/core"
import {IS_FIREBASE_EMULATOR} from "common/envs/constants"
@@ -113,7 +113,7 @@ export async function googleNativeLogin() {
}
export async function firebaseLogin() {
- if (isAndroidWebView()) {
+ if (isAndroidApp()) {
console.log('Running in APK')
return await googleNativeLogin()
}
diff --git a/web/lib/service/android-push.ts b/web/lib/service/android-push.ts
index 077bbda..1b25c98 100644
--- a/web/lib/service/android-push.ts
+++ b/web/lib/service/android-push.ts
@@ -2,12 +2,12 @@ import {PushNotifications} from '@capacitor/push-notifications'
import {useEffect} from "react"
import {api} from "web/lib/api"
import {useUser} from "web/hooks/use-user"
-import {isAndroidWebView} from "web/lib/util/webview";
+import {isAndroidApp} from "web/lib/util/webview";
import {useRouter} from "next/router";
export default function AndroidPush() {
const user = useUser() // authenticated user
- const isAndroid = isAndroidWebView()
+ const isAndroid = isAndroidApp()
const router = useRouter()
useEffect(() => {
if (!user?.id || !isAndroid) return
diff --git a/web/lib/util/webview.ts b/web/lib/util/webview.ts
index cecdb7b..a0219d9 100644
--- a/web/lib/util/webview.ts
+++ b/web/lib/util/webview.ts
@@ -1,7 +1,7 @@
import {Capacitor} from "@capacitor/core";
import {IS_WEBVIEW} from "common/hosting/constants";
-export function isAndroidWebView() {
+export function isAndroidApp() {
try {
// Detect if Android bridge exists
// return typeof (window as any).AndroidBridge?.isNativeApp === 'function';
@@ -11,4 +11,4 @@ export function isAndroidWebView() {
}
}
-export function isNativeMobile() { return isAndroidWebView() }
\ No newline at end of file
+export function isNativeMobile() { return isAndroidApp() }
\ No newline at end of file
diff --git a/web/pages/_app.tsx b/web/pages/_app.tsx
index 2e9ffbf..a71753e 100644
--- a/web/pages/_app.tsx
+++ b/web/pages/_app.tsx
@@ -12,7 +12,7 @@ import clsx from 'clsx'
import {initTracking} from 'web/lib/service/analytics'
import WebPush from "web/lib/service/web-push"
import AndroidPush from "web/lib/service/android-push"
-import {isAndroidWebView} from "web/lib/util/webview"
+import {isAndroidApp} from "web/lib/util/webview"
import {Capacitor} from '@capacitor/core'
import {StatusBar} from '@capacitor/status-bar'
import {App} from '@capacitor/app'
@@ -91,7 +91,7 @@ function MyApp({Component, pageProps}: AppProps) {
const router = useRouter()
useEffect(() => {
- console.log('isAndroidWebView app:', isAndroidWebView())
+ console.log('isAndroidWebView app:', isAndroidApp())
if (!Capacitor.isNativePlatform()) return
const onShow = () => document.body.classList.add('keyboard-open')
const onHide = () => document.body.classList.remove('keyboard-open')