From 75ccc2e6942703338692dc0d8ea64ce0ff4e5c1f Mon Sep 17 00:00:00 2001 From: klockky Date: Fri, 15 May 2026 18:14:22 +0300 Subject: [PATCH] =?UTF-8?q?feat(push):=20FCM=20via=20MAX=20server=20?= =?UTF-8?q?=E2=80=94=20oneme=20flavor,=20dedicated=20FCM=20workflow,=20opc?= =?UTF-8?q?ode=2022,=20notifications=20+=20CI/lint=20fixes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-android-fcm.yml | 91 +++++++++ .github/workflows/build-android.yml | 18 +- .github/workflows/flutter-dev.yml | 17 +- .github/workflows/flutter-main.yml | 78 +++++++- android/app/build.gradle.kts | 20 +- android/app/src/komet/google-services.json | 29 +++ android/app/src/main/AndroidManifest.xml | 4 + android/app/src/oneme/google-services.json | 29 +++ android/settings.gradle.kts | 1 + lib/backend/modules/account.dart | 33 +++ lib/core/push/push_service.dart | 188 ++++++++++++++++++ .../screens/chats/chat_list_screen.dart | 7 +- lib/frontend/screens/chats/chat_screen.dart | 1 - .../screens/profile/edit_profile_screen.dart | 3 +- .../profile/password_entry_screen.dart | 2 - .../screens/profile/security_screen.dart | 2 +- lib/frontend/widgets/message_bubble.dart | 178 ++--------------- lib/main.dart | 18 ++ pubspec.lock | 128 +++++++++++- pubspec.yaml | 3 + 20 files changed, 647 insertions(+), 203 deletions(-) create mode 100644 .github/workflows/build-android-fcm.yml create mode 100644 android/app/src/komet/google-services.json create mode 100644 android/app/src/oneme/google-services.json create mode 100644 lib/core/push/push_service.dart diff --git a/.github/workflows/build-android-fcm.yml b/.github/workflows/build-android-fcm.yml new file mode 100644 index 0000000..b603622 --- /dev/null +++ b/.github/workflows/build-android-fcm.yml @@ -0,0 +1,91 @@ +name: Build Android (FCM) + +on: + workflow_dispatch: + push: + branches: + - main + - master + paths: + - 'lib/**' + - 'android/**' + - 'pubspec.yaml' + - '.github/workflows/build-android-fcm.yml' + pull_request: + paths: + - 'lib/**' + - 'android/**' + - 'pubspec.yaml' + - '.github/workflows/build-android-fcm.yml' + +jobs: + build-android-fcm: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v3 + + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + - name: Setup Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: '3.41.5' + channel: 'stable' + + - name: Get dependencies + run: flutter pub get + + - name: Configure Gradle + run: | + mkdir -p ~/.gradle + echo "org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m" >> ~/.gradle/gradle.properties + echo "kotlin.daemon.jvmargs=-Xmx1536m" >> ~/.gradle/gradle.properties + + - name: Build Universal APK + run: flutter build apk --release --flavor oneme + + - name: Build Split APKs + run: flutter build apk --release --split-per-abi --flavor oneme + + - name: Upload Universal APK + uses: actions/upload-artifact@v4 + with: + name: komet-android-fcm-universal + path: build/app/outputs/flutter-apk/app-oneme-release.apk + retention-days: 30 + + - name: Upload arm64-v8a APK + uses: actions/upload-artifact@v4 + with: + name: komet-android-fcm-arm64-v8a + path: build/app/outputs/flutter-apk/app-oneme-arm64-v8a-release.apk + retention-days: 30 + + - name: Upload armeabi-v7a APK + uses: actions/upload-artifact@v4 + with: + name: komet-android-fcm-armeabi-v7a + path: build/app/outputs/flutter-apk/app-oneme-armeabi-v7a-release.apk + retention-days: 30 + + - name: Upload x86_64 APK + uses: actions/upload-artifact@v4 + with: + name: komet-android-fcm-x86_64 + path: build/app/outputs/flutter-apk/app-oneme-x86_64-release.apk + retention-days: 30 + + - name: Build App Bundle + run: flutter build appbundle --release --flavor oneme + + - name: Upload App Bundle artifact + uses: actions/upload-artifact@v4 + with: + name: komet-android-fcm-aab + path: build/app/outputs/bundle/onemeRelease/app-oneme-release.aab + retention-days: 30 diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml index 380cd38..4866fe6 100644 --- a/.github/workflows/build-android.yml +++ b/.github/workflows/build-android.yml @@ -45,47 +45,47 @@ jobs: mkdir -p ~/.gradle echo "org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m" >> ~/.gradle/gradle.properties echo "kotlin.daemon.jvmargs=-Xmx1536m" >> ~/.gradle/gradle.properties - + - name: Build Universal APK - run: flutter build apk --release + run: flutter build apk --release --flavor komet - name: Build Split APKs - run: flutter build apk --release --split-per-abi + run: flutter build apk --release --split-per-abi --flavor komet - name: Upload Universal APK uses: actions/upload-artifact@v4 with: name: komet-android-universal - path: build/app/outputs/flutter-apk/app-release.apk + path: build/app/outputs/flutter-apk/app-komet-release.apk retention-days: 30 - name: Upload arm64-v8a APK uses: actions/upload-artifact@v4 with: name: komet-android-arm64-v8a - path: build/app/outputs/flutter-apk/app-arm64-v8a-release.apk + path: build/app/outputs/flutter-apk/app-komet-arm64-v8a-release.apk retention-days: 30 - name: Upload armeabi-v7a APK uses: actions/upload-artifact@v4 with: name: komet-android-armeabi-v7a - path: build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk + path: build/app/outputs/flutter-apk/app-komet-armeabi-v7a-release.apk retention-days: 30 - name: Upload x86_64 APK uses: actions/upload-artifact@v4 with: name: komet-android-x86_64 - path: build/app/outputs/flutter-apk/app-x86_64-release.apk + path: build/app/outputs/flutter-apk/app-komet-x86_64-release.apk retention-days: 30 - name: Build App Bundle - run: flutter build appbundle --release + run: flutter build appbundle --release --flavor komet - name: Upload App Bundle artifact uses: actions/upload-artifact@v4 with: name: komet-android-aab - path: build/app/outputs/bundle/release/app-release.aab + path: build/app/outputs/bundle/kometRelease/app-komet-release.aab retention-days: 30 diff --git a/.github/workflows/flutter-dev.yml b/.github/workflows/flutter-dev.yml index a1dc487..7e5d633 100644 --- a/.github/workflows/flutter-dev.yml +++ b/.github/workflows/flutter-dev.yml @@ -13,10 +13,17 @@ jobs: - name: Checkout code uses: actions/checkout@v3 + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + - name: Set up Flutter uses: subosito/flutter-action@v2 with: - flutter-version: 'stable' + flutter-version: '3.41.5' + channel: 'stable' - name: Install dependencies run: flutter pub get @@ -24,5 +31,11 @@ jobs: - name: Flutter analyze run: flutter analyze + - name: Configure Gradle + run: | + mkdir -p ~/.gradle + echo "org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m" >> ~/.gradle/gradle.properties + echo "kotlin.daemon.jvmargs=-Xmx1536m" >> ~/.gradle/gradle.properties + - name: Build Android APK - run: flutter build apk --release + run: flutter build apk --release --flavor komet diff --git a/.github/workflows/flutter-main.yml b/.github/workflows/flutter-main.yml index 3255616..f43dd96 100644 --- a/.github/workflows/flutter-main.yml +++ b/.github/workflows/flutter-main.yml @@ -6,17 +6,23 @@ on: - 'main' jobs: - analyze-and-build-all: + android: runs-on: ubuntu-latest - steps: - name: Checkout code uses: actions/checkout@v3 + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + - name: Set up Flutter uses: subosito/flutter-action@v2 with: - flutter-version: 'stable' + flutter-version: '3.41.5' + channel: 'stable' - name: Install dependencies run: flutter pub get @@ -24,8 +30,34 @@ jobs: - name: Flutter analyze run: flutter analyze + - name: Configure Gradle + run: | + mkdir -p ~/.gradle + echo "org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m" >> ~/.gradle/gradle.properties + echo "kotlin.daemon.jvmargs=-Xmx1536m" >> ~/.gradle/gradle.properties + - name: Build Android APK - run: flutter build apk --release + run: flutter build apk --release --flavor komet + + web-linux: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: '3.41.5' + channel: 'stable' + + - name: Install Linux desktop dependencies + run: | + sudo apt-get update + sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev + + - name: Install dependencies + run: flutter pub get - name: Build Web run: flutter build web --release @@ -33,13 +65,41 @@ jobs: - name: Build Linux run: flutter build linux --release + windows: + runs-on: windows-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: '3.41.5' + channel: 'stable' + + - name: Install dependencies + run: flutter pub get + - name: Build Windows run: flutter build windows --release - - name: Build iOS (only macOS runners) - if: runner.os == 'macOS' - run: flutter build ios --release + apple: + runs-on: macos-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 - - name: Build macOS (only macOS runners) - if: runner.os == 'macOS' + - name: Set up Flutter + uses: subosito/flutter-action@v2 + with: + flutter-version: '3.41.5' + channel: 'stable' + + - name: Install dependencies + run: flutter pub get + + - name: Build iOS + run: flutter build ios --release --no-codesign + + - name: Build macOS run: flutter build macos --release diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 1e361bc..fa4342c 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -3,6 +3,7 @@ plugins { id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. id("dev.flutter.flutter-gradle-plugin") + id("com.google.gms.google-services") } android { @@ -20,16 +21,27 @@ android { } defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId = "ru.komet.app" - // You can update the following values to match your application needs. - // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = flutter.minSdkVersion + minSdk = maxOf(flutter.minSdkVersion, 23) targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName } + flavorDimensions += "distribution" + + productFlavors { + create("komet") { + dimension = "distribution" + isDefault = true + applicationId = "ru.komet.app" + } + create("oneme") { + dimension = "distribution" + applicationId = "ru.oneme.app" + } + } + buildTypes { release { // TODO: Add your own signing config for the release build. diff --git a/android/app/src/komet/google-services.json b/android/app/src/komet/google-services.json new file mode 100644 index 0000000..9027e06 --- /dev/null +++ b/android/app/src/komet/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "659634599081", + "project_id": "max-messenger-app", + "storage_bucket": "max-messenger-app.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:659634599081:android:00000000000000000000ab", + "android_client_info": { + "package_name": "ru.komet.app" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyABuDYeeDXIOrKTXLkUj30Ii143ofPe63Q" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index b2c538d..8dd5624 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -2,6 +2,7 @@ + +