diff --git a/android/app/build.gradle b/android/app/build.gradle index ad7a6c69..4395d8b0 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -11,7 +11,7 @@ android { applicationId "com.compassconnections.app" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 83 + versionCode 84 versionName "1.17.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { diff --git a/android/app/src/main/java/com/compassconnections/app/MainActivity.java b/android/app/src/main/java/com/compassconnections/app/MainActivity.java index 6864fd9a..4838d599 100644 --- a/android/app/src/main/java/com/compassconnections/app/MainActivity.java +++ b/android/app/src/main/java/com/compassconnections/app/MainActivity.java @@ -238,7 +238,16 @@ public class MainActivity extends BridgeActivity implements ModifiedMainActivity checkForUpdates(); Uri data = getIntent().getData(); - if (data != null) pendingDeepLink = data.toString(); + if (data != null) { + pendingDeepLink = data.toString(); + } else { + // Check for notification endpoint when app is opened from cold start via notification click + String endpoint = getIntent().getStringExtra("endpoint"); + if (endpoint != null) { + Log.i("CompassApp", "onCreate found endpoint from notification: " + endpoint); + pendingDeepLink = endpoint; + } + } } private void handleDeepLink(String url) { diff --git a/web/lib/service/android-push.ts b/web/lib/service/android-push.ts index 0a96a3a4..1d52bcb7 100644 --- a/web/lib/service/android-push.ts +++ b/web/lib/service/android-push.ts @@ -1,7 +1,7 @@ import {PushNotifications} from '@capacitor/push-notifications' import {debug} from 'common/logger' -import {useRouter} from 'next/router' import {useEffect} from 'react' +import toast from 'react-hot-toast' import {useUser} from 'web/hooks/use-user' import {api} from 'web/lib/api' import {isAndroidApp} from 'web/lib/util/webview' @@ -9,7 +9,6 @@ import {isAndroidApp} from 'web/lib/util/webview' export default function AndroidPush() { const user = useUser() // authenticated user const isAndroid = isAndroidApp() - const router = useRouter() useEffect(() => { if (!user?.id || !isAndroid) return debug('AndroidPush', user) @@ -36,12 +35,14 @@ export default function AndroidPush() { }) PushNotifications.addListener('pushNotificationReceived', (notif) => { - debug('Push received', notif) - const url = notif?.data?.url - if (url) { - router.push(url) - window.location.href = url - } + console.debug('Push received', notif, window.location.pathname) + const endpoint = notif?.data?.endpoint as string + if (!endpoint) return + if (!endpoint.startsWith('/messages/')) return + if (endpoint === window.location.pathname) return + const author = notif?.title + const message = notif?.body + toast.success(`${author}: "${message}"`) }) }, [user?.id, isAndroid]) diff --git a/web/pages/_app.tsx b/web/pages/_app.tsx index 131aae9e..3e2c69d2 100644 --- a/web/pages/_app.tsx +++ b/web/pages/_app.tsx @@ -10,6 +10,7 @@ import clsx from 'clsx' import {DEPLOYED_WEB_URL} from 'common/envs/constants' import {IS_VERCEL, PNG_FAVICON} from 'common/hosting/constants' import {debug} from 'common/logger' +import {isUrl} from 'common/parsing' import type {AppProps} from 'next/app' import {Major_Mono_Display} from 'next/font/google' import Head from 'next/head' @@ -164,7 +165,7 @@ function MyApp(props: AppProps) { const link = window.AndroidBridge?.getPendingDeepLink?.() if (link) { - handleAppLink({url: link, endpoint: new URL(link).pathname}) + handleAppLink({endpoint: isUrl(link) ? new URL(link).pathname : link}) } }, [])