feat(mobile,deploy): 接入安卓极光与华为通道并准备公网部署配置

客户端默认指向 jxd.jinniu.ink 的 HTTPS/WSS;登录后把 OpenIM userID 设为极光 alias。
华为 agconnect-services.json 不伪造、不入库。Master Secret 只从服务器文件注入。

Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
编码工程师
2026-08-30 21:32:58 +08:00
co-authored by multica-agent
parent f35e1f03d5
commit f1fe4a3928
35 changed files with 687 additions and 64 deletions
+21
View File
@@ -0,0 +1,21 @@
# 华为厂商通道配置文件(缺口)
华为通道客户端其余依赖已接入。**唯一还缺的文件**是:
`mobile/android/app/agconnect-services.json`
## 从哪里取得
1. 打开华为 [AppGallery Connect](https://developer.huawei.com/consumer/cn/service/josp/agc/index.html)
2. 选择与包名 `cn.solsum.jinxunda` 对应的应用
3. 项目设置 → 应用 → 下载 `agconnect-services.json`
4. 把文件放到本目录(与 `build.gradle.kts` 同级)
5. **不要提交进 Git**(文件含华为 client_secret)。仓库已忽略该路径。
没有这份文件时:
- 安卓包仍可构建(AGConnect 插件按文件是否存在条件启用)
- 极光自己的通道仍可初始化
- **华为真机的厂商通道无法接通**,杀进程后的到达率会明显下降
本阶段不伪造、不提交该文件。
+12 -4
View File
@@ -4,6 +4,13 @@ plugins {
id("dev.flutter.flutter-gradle-plugin")
}
// 华为 agconnect-services.json 到位后才启用 AGConnect 插件,避免缺文件时整包编不过。
// 文件从华为 AppGallery Connect 下载,放到本目录,不要提交进 Git。
val agconnectServices = file("agconnect-services.json")
if (agconnectServices.exists()) {
apply(plugin = "com.huawei.agconnect")
}
android {
namespace = "cn.solsum.jinxunda"
compileSdk = flutter.compileSdkVersion
@@ -15,14 +22,15 @@ android {
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId = "cn.solsum.jinxunda"
// 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 24
minSdk = 24
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
manifestPlaceholders["JPUSH_PKGNAME"] = "cn.solsum.jinxunda"
manifestPlaceholders["JPUSH_APPKEY"] = "95fc2352648a7d4568ac8d72"
manifestPlaceholders["JPUSH_CHANNEL"] = "developer-default"
}
// 压缩打包 .so(默认未压缩存储,OpenIM/WebRTC 的 native 库让包多占近一倍体积);
@@ -4,6 +4,9 @@
<!-- OpenIM 插件注册网络状态监听必须要这个权限;插件自身 manifest 漏了声明,
缺它 release 包会 SecurityException 导致插件注册失败、SDK 全部调用无响应 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- Android 13+ 通知栏权限(极光离线推送) -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<!-- 语音消息录音与语音通话 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
@@ -33,6 +36,10 @@
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<!-- 关闭 Flutter 自动深链接,避免厂商通道点击拉起白屏 -->
<meta-data
android:name="flutter_deeplinking_enabled"
android:value="false" />
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
@@ -2,4 +2,8 @@ package cn.solsum.jinxunda
import io.flutter.embedding.android.FlutterActivity
class MainActivity : FlutterActivity()
class MainActivity : FlutterActivity() {
// Flutter 3.29+ 默认把启动 Intent 当深链接解析。华为等厂商通道点击拉起时
// intent 带 n_extra,路由表没有对应页会白屏。本应用不用官方深链接。
override fun shouldHandleDeeplinking(): Boolean = false
}
+1
View File
@@ -4,6 +4,7 @@ allprojects {
maven("https://maven.aliyun.com/repository/google")
maven("https://maven.aliyun.com/repository/central")
maven("https://maven.aliyun.com/repository/public")
maven("https://developer.huawei.com/repo/")
google()
mavenCentral()
}
+2
View File
@@ -15,6 +15,7 @@ pluginManagement {
maven("https://maven.aliyun.com/repository/google")
maven("https://maven.aliyun.com/repository/central")
maven("https://maven.aliyun.com/repository/gradle-plugin")
maven("https://developer.huawei.com/repo/")
google()
mavenCentral()
gradlePluginPortal()
@@ -25,6 +26,7 @@ plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
id("com.android.application") version "9.0.1" apply false
id("org.jetbrains.kotlin.android") version "2.3.20" apply false
id("com.huawei.agconnect") version "1.9.1.301" apply false
}
include(":app")