{"id":51598819,"url":"https://github.com/wxpusher/wxpusher-app","last_synced_at":"2026-07-11T20:01:43.509Z","repository":{"id":344616808,"uuid":"1157938616","full_name":"wxpusher/wxpusher-app","owner":"wxpusher","description":"WxPusher消息推送平台的客户端源码，包括Android和iOS APP的代码，完整可编译，可以运行，欢迎来PR完善。","archived":false,"fork":false,"pushed_at":"2026-06-15T16:47:58.000Z","size":2760,"stargazers_count":66,"open_issues_count":0,"forks_count":22,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-15T18:18:53.918Z","etag":null,"topics":["push","push-notifications","pushapp","pusher","wxpusher"],"latest_commit_sha":null,"homepage":"https://wxpusher.zjiecode.com","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wxpusher.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-14T14:43:24.000Z","updated_at":"2026-06-15T16:32:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/wxpusher/wxpusher-app","commit_stats":null,"previous_names":["wxpusher/wxpusher-app"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/wxpusher/wxpusher-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wxpusher%2Fwxpusher-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wxpusher%2Fwxpusher-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wxpusher%2Fwxpusher-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wxpusher%2Fwxpusher-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wxpusher","download_url":"https://codeload.github.com/wxpusher/wxpusher-app/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wxpusher%2Fwxpusher-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35374165,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-11T02:00:05.354Z","response_time":104,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["push","push-notifications","pushapp","pusher","wxpusher"],"created_at":"2026-07-11T20:01:39.476Z","updated_at":"2026-07-11T20:01:43.503Z","avatar_url":"https://github.com/wxpusher.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WxPusher 客户端\n\nWxPusher 是一个使用微信公众号作为通道的，实时信息推送平台。本仓库为 WxPusher 的移动客户端项目，使用 **Kotlin Multiplatform (KMP)** 共享业务逻辑，搭配 **Android (Kotlin)** 和 **iOS (Swift)** 原生 UI 实现。\n\n📖 完整的平台文档请参阅：[WxPusher 官方文档](https://wxpusher.zjiecode.com/docs/) | 📥 [下载最新版本 APP](https://wxpusher.zjiecode.com/download/)\n\n---\n\n## 功能特性\n\n- **消息推送**：接收来自 WxPusher 平台的实时消息推送\n- **多通道推送**（Android）：支持华为、荣耀、小米、vivo、OPPO、魅族厂商推送通道及自建 WebSocket 长连接通道\n- **微信登录**：通过微信 SDK 实现快捷登录\n- **二维码扫描**：扫码关注 Topic、绑定账号等\n- **账号管理**：登录、注册、绑定手机、换绑手机\n- **消息列表**：浏览和管理推送消息，支持下拉刷新\n- **订阅管理**：查看和管理已订阅的 Topic（发送方）列表\n- **WebView**：内嵌网页查看消息详情\n\n---\n\n## 技术架构\n\n本项目采用 **KMP + 原生 UI** 的混合架构：\n\n```mermaid\nflowchart TD\n    A[\"Android App\u003cbr/\u003e(Kotlin)\u003cbr/\u003e原生 UI\"]\n    B[\"iOS App\u003cbr/\u003e(Swift)\u003cbr/\u003e原生 UI\"]\n    C[\"Shared (KMP)\u003cbr/\u003e业务逻辑 / 网络请求\u003cbr/\u003eMVP Contracts\"]\n    \n    A ---\u003e C\n    B ---\u003e C\n    \n    %% 简化样式（仅基础配色，避免复杂属性）\n    classDef android fill:#e1f5fe,stroke:#000\n    classDef ios fill:#f3e5f5,stroke:#000\n    classDef shared fill:#e8f5e8,stroke:#000\n    \n    class A android\n    class B ios\n    class C shared\n```\n\n- **Shared 层**：使用 KMP 编写跨平台业务逻辑，采用 **MVP 架构模式**（Contract + Presenter），通过 Ktor 进行网络请求\n- **Android 层**：使用 Kotlin 开发原生 Android UI（Activity / Fragment），集成多厂商推送 SDK\n- **iOS 层**：使用 Swift 开发原生 iOS UI（UIKit），通过 CocoaPods 集成 KMP Shared Framework\n\n---\n\n## 项目管理\n| 分支名                    | 用途说明                                                                                                       |\n|--------------------------|----------------------------------------------------------------------------------------------------------------|\n| **master**               | 保存最新 WxPusher 官方线上发布版本                                                                              |\n| **release**              | 保存即将发布的下一个版本。新开发的 Feature 可 PR 到 release 分支，release 分支发布后会合并到 master 分支         |\n| **unofficial_custom/xxx**| 非官方定制版本。社区用户如需开发不合并至官方主线的功能，可拉出非官方定制分支并合并到该分支进行打包           |\n\n\u003e **贡献代码请提交 PR 到 `release` 分支**，而非 `master` 分支。`release` 分支经过测试验证后，会合并到 `master` 并发布新版本。\n\n\n因为WxPusher对接了很多Android系统推送通道，但是部分厂商对应用的包名、签名会有要求，因此**开发者想要使用系统推送功能，必须要使用WxPusher官方的包名和签名构建安装包**。\n\n一般的开发流程如下：\n1. 确定开发的feature是否需要合并到WxPusher主线release分支，开发前可以联系WxPusher客服沟通（微信：lanyunt）；\n1. 确定开发需求可以合并到主线，fork仓库，从release拉出分支，开发完成后提PR合并到release分支；\n1. 如果开发的需求不合并到主线，联系WxPusher客服（微信：lanyunt）帮你拉出unofficial_custom/xxx的非官方定制版本，fork仓库开发后，PR到unofficial_custom/xxx分支;\n\n代码合并到master/release/unofficial_custom 分支，**Github Action会自动使用正式签名构建APK，iOS会上传到TestFlight**，你可以直接下载apk或者从TestFlight下载正式包进行测试使用了。\n\n你可以使用如下链接，加入到[WxPusher非官方版本](https://testflight.apple.com/join/zav17bJR)TF测试组(https://testflight.apple.com/join/zav17bJR)，Github Action构建的iOS包会自动加入到TF里面，你可以通过TF下载安装和使用\n\u003e 需要注意，有一定延迟，PR完成后，构建需要10分钟左右，上传到TF上，一般半个小时左右会显示出来，如有问题，可以联系官方客服（微信：lanyunt）\n\n## 项目结构\n\n```\nWxPusher-App/\n├── shared/                          # KMP 跨平台共享模块\n│   └── src/\n│       ├── commonMain/              # 通用业务逻辑（Kotlin）\n│       │   └── kotlin/.../kmp/\n│       │       ├── api/             # API 网络请求层\n│       │       ├── base/            # 基础类和工具\n│       │       │   ├── biz/         # 业务基础逻辑\n│       │       │   └── common/      # 通用工具类\n│       │       └── page/            # 页面 MVP Contract \u0026 Presenter\n│       │           ├── login/           # 登录\n│       │           ├── messagelist/     # 消息列表\n│       │           ├── providerlist/    # 订阅列表\n│       │           ├── accountdetail/   # 账号详情\n│       │           ├── bind/            # 绑定手机\n│       │           ├── changephone/     # 换绑手机\n│       │           ├── registerorbind/  # 注册或绑定\n│       │           ├── scan/            # 扫码\n│       │           └── unbind/          # 解绑\n│       ├── androidMain/             # Android 平台特定实现\n│       └── iosMain/                 # iOS 平台特定实现 + cinterop 桥接\n│\n├── androidApp/                      # Android 原生应用（Kotlin）\n│   └── src/\n│       ├── androidMain/             # 主代码\n│       │   └── kotlin/.../wxpusher/\n│       │       ├── app/             # Application 入口\n│       │       ├── page/            # 页面（Activity / Fragment）\n│       │       │   ├── main/            # 主页（Tab 导航）\n│       │       │   ├── login/           # 登录页\n│       │       │   ├── scan/            # 扫码页\n│       │       │   ├── accountdetail/   # 账号详情页\n│       │       │   ├── bind/            # 绑定手机页\n│       │       │   ├── changephone/     # 换绑手机页\n│       │       │   ├── registerorbind/  # 注册或绑定页\n│       │       │   ├── web/             # WebView 页\n│       │       │   └── useragreement/   # 用户协议页\n│       │       ├── push/            # 推送通道实现\n│       │       │   ├── huawei/          # 华为推送\n│       │       │   ├── honor/           # 荣耀推送\n│       │       │   ├── xiaomi/          # 小米推送\n│       │       │   ├── vivo/            # vivo 推送\n│       │       │   ├── oppo/            # OPPO 推送\n│       │       │   ├── meizu/           # 魅族推送\n│       │       │   └── ws/              # WebSocket 自建通道\n│       │       ├── wxapi/           # 微信 SDK 集成\n│       │       ├── utils/           # 工具类\n│       │       ├── config/          # 配置\n│       │       ├── dialog/          # 弹窗\n│       │       ├── bean/            # 数据模型\n│       │       ├── base/            # 基础类\n│       │       └── common/          # 通用组件\n│       ├── androidOffline/          # 测试环境 Flavor\n│       └── androidProd/             # 生产环境 Flavor\n│\n├── iosApp/                          # iOS 原生应用（Swift）\n│   ├── wxpusher/                    # Xcode 工程\n│   │   ├── WxPusher-iOS/           # iOS App Target\n│   │   ├── WxPusher-Mac/           # macOS App Target\n│   │   ├── Page/                   # 页面（ViewController）\n│   │   │   ├── Main/                   # 主页（TabBar）\n│   │   │   ├── Login/                  # 登录页\n│   │   │   ├── MessageList/            # 消息列表页\n│   │   │   ├── ProviderList/           # 订阅列表页\n│   │   │   ├── AccountDetail/          # 账号详情页\n│   │   │   ├── QRCodeScan/             # 扫码页\n│   │   │   ├── RegisterOrBind/         # 注册或绑定页\n│   │   │   ├── BindPhone/              # 绑定手机页\n│   │   │   ├── ChangePhone/            # 换绑手机页\n│   │   │   ├── Profile/                # 个人信息页\n│   │   │   ├── WebView/                # WebView 页\n│   │   │   ├── Weixin/                 # 微信相关\n│   │   │   ├── UserAgreement/          # 用户协议页\n│   │   │   └── Base/                   # 基础 ViewController\n│   │   ├── Common/                 # 通用工具和服务\n│   │   └── KtSwiftBridge/          # Kotlin-Swift 互操作桥接\n│   ├── Podfile                     # CocoaPods 依赖管理\n│   └── wxpusher.xcworkspace        # Xcode Workspace\n│\n├── gradle/                          # Gradle Wrapper \u0026 版本目录\n│   └── libs.versions.toml          # 依赖版本统一管理\n├── build.gradle.kts                 # 根构建脚本\n├── settings.gradle.kts              # 项目配置\n├── LICENSE                          # 开源协议（中文）\n└── LICENSE_EN                       # 开源协议（英文）\n```\n\n---\n\n## 技术栈\n\n### 跨平台共享（Shared）\n\n| 技术 | 版本 | 用途 |\n|------|------|------|\n| Kotlin Multiplatform | 2.x | 跨平台业务逻辑共享 |\n| Ktor Client | 3.2.1 | 网络请求（HTTP 客户端） |\n| Kotlinx Coroutines | 1.10.2 | 协程异步编程 |\n| Kotlinx Serialization | - | JSON 序列化/反序列化 |\n| Kotlinx DateTime | 0.6.1 | 跨平台日期时间处理 |\n\n### Android\n\n| 技术 | 版本 | 用途 |\n|------|------|------|\n| Kotlin | - | 开发语言 |\n| AndroidX Core KTX | 1.15.0 | Android 核心扩展 |\n| AndroidX AppCompat | 1.7.0 | 向后兼容 |\n| Material Design | 1.12.0 | UI 组件库 |\n| AndroidX Lifecycle | 2.8.3 | 生命周期管理 |\n| WorkManager | 2.10.0 | 后台任务 |\n| OkHttp | 4.12.0 | HTTP 客户端 |\n| Gson | 2.10.1 | JSON 解析 |\n| ZXing | 3.3.3 | 二维码扫描 |\n| SmartRefreshLayout | 2.1.0 | 下拉刷新 |\n| WeChat SDK | 6.8.34 | 微信登录 |\n| 华为 Push SDK | 6.13.0.300 | 华为推送通道 |\n| 荣耀 Push SDK | 8.0.12.307 | 荣耀推送通道 |\n\n### iOS\n\n| 技术 | 版本 | 用途 |\n|------|------|------|\n| Swift | 5.0+ | 开发语言 |\n| UIKit | - | 原生 UI 框架 |\n| CocoaPods | - | 依赖管理 |\n| MJRefresh | 3.7.9 | 下拉刷新 |\n| Toaster | 2.3.0 | Toast 提示 |\n| WechatOpenSDK | 2.0.5 | 微信登录 |\n\n---\n\n## 环境要求\n\n### 通用\n\n- **JDK** 11+\n- **Gradle** 8.5+（项目自带 Gradle Wrapper）\n\n### Android 开发\n\n- **Android Studio** Ladybug (2024.2) 或更高版本\n- **Android SDK**：compileSdk 35，minSdk 26，targetSdk 34\n- **Kotlin** 插件已安装\n\n### iOS 开发\n\n- **macOS** 系统\n- **Xcode** 15.0+\n- **CocoaPods** 1.14+（`sudo gem install cocoapods`）\n- iOS Deployment Target：14.0+\n\n---\n\n## 快速开始\n\n### 克隆项目\n\n```bash\ngit clone https://github.com/wxpusher/WxPusher-App.git\ncd WxPusher-App\n```\n\n### 构建 Android\n\n1. 使用 **Android Studio** 打开项目根目录\n2. 等待 Gradle Sync 完成\n3. 选择 Build Variant：\n   - `androidOffline`：测试环境\n   - `androidProd`：生产环境\n4. 运行 `androidApp` 模块\n\n```bash\n# 或使用命令行构建\n./gradlew :androidApp:assembleAndroidProdDebug\n```\n\n### 构建 iOS\n\n1. 安装 CocoaPods 依赖：\n\n```bash\ncd iosApp\npod install\n```\n\n2. 使用 **Xcode** 打开 `iosApp/wxpusher.xcworkspace`（注意是 `.xcworkspace` 而非 `.xcodeproj`）\n3. 选择目标设备，运行 `WxPusher-iOS` Target\n\n\u003e **注意**：首次构建前需先执行 `pod install`，确保 shared framework 和第三方依赖正确集成。\n\n---\n\n## 架构说明\n\n### MVP 模式（Shared 层）\n\n项目在 Shared 层采用 **MVP（Model-View-Presenter）** 架构：\n\n- **Contract**：定义 View 接口和 Presenter 接口，规范页面交互契约\n- **Presenter**：实现业务逻辑，通过 Ktor 调用后端 API，处理数据并回调 View\n- **View**：由各平台原生代码实现（Android Activity/Fragment、iOS ViewController）\n\n```\nContract (commonMain)\n├── IXxxView        # View 接口\n└── IXxxPresenter   # Presenter 接口\n\nPresenter (commonMain)\n└── XxxPresenter    # 业务逻辑实现\n\nView (平台原生)\n├── Android: XxxActivity / XxxFragment\n└── iOS: XxxViewController\n```\n\n### 推送架构（Android）\n\nAndroid 端集成了多家厂商系统推送通道，通过统一的推送管理层实现分发，可以让APP不保持后台运行，接收消息推送。\n\n*需要注意，部分厂商会绑定签名和包名，修改包名和签名后，可能无法接收推送通知*\n\n| 通道 | 适用设备 | 说明 |\n|------|----------|------|\n| 华为 Push | 华为/荣耀设备 | HMS Core 推送 |\n| 荣耀 Push | 荣耀设备 | 荣耀独立推送 |\n| 小米 Push | 小米/Redmi 设备 | MiPush |\n| vivo Push | vivo/iQOO 设备 | vivo 推送 |\n| OPPO Push | OPPO/Realme/一加 设备 | OPPO 推送 |\n| 魅族 Push | 魅族设备 | Flyme 推送 |\n| WebSocket | 所有设备 | 自建长连接通道（兜底方案） |\n\n### Kotlin-Swift 互操作\n\niOS 端通过 **cinterop** 机制桥接 Kotlin 与 Swift 代码，桥接头文件位于 `iosApp/wxpusher/KtSwiftBridge/` 目录。\n\n---\n\n## 贡献指南\n\n欢迎对 WxPusher 客户端项目进行贡献！请遵循以下流程：\n\n### 1. Fork \u0026 Clone\n\n```bash\n# Fork 本仓库后克隆到本地\ngit clone https://github.com/\u003cyour-username\u003e/WxPusher-App.git\ncd WxPusher-App\n```\n\n### 2. 基于 release 分支创建开发分支\n\n```bash\ngit checkout release\ngit pull origin release\ngit checkout -b feature/your-feature-name\n```\n\n### 3. 开发和提交\n\n- 遵循现有的代码风格和项目结构\n- Shared 层的改动需同时在 Android 和 iOS 上验证\n- 提交信息请使用清晰的描述，说明改动内容和原因\n\n```bash\ngit add .\ngit commit -m \"feat: 添加xxx功能\"\ngit push origin feature/your-feature-name\n```\n\n### 4. 提交 Pull Request\n\n- 在 GitHub 上创建 Pull Request，**目标分支选择 `release`**\n- 描述你的改动内容和测试情况\n- 等待代码审查和合并\n\n### 注意事项\n\n- 提交的贡献代码需遵守本项目的[开源协议](#开源协议)\n- 请勿提交包含敏感信息的文件（API Key、签名文件等）\n- 涉及厂商推送通道的改动，请确保在对应设备上测试通过\n\n---\n\n## 开源协议\n\n本项目采用 **四川思明今创科技有限公司客户端开源协议**，主要条款如下：\n\n- ✅ 可自由查看和审计全部源代码\n- ✅ 可修改和编译用于个人/内部非商业用途\n- ✅ 可向本项目提交代码贡献\n- ✅ 可正常传播分发官方未修改版本\n- ❌ 不得用于商业盈利活动\n- ❌ 不得分发修改后的非官方版本\n- ❌ 不得基于本项目开发竞品进行商业化\n\n完整协议请参阅 [LICENSE](./LICENSE)（中文）/ [LICENSE_EN](./LICENSE_EN)（英文）。\n\n---\n\n## 下载安装\n\n前往 [WxPusher APP 下载页](https://wxpusher.zjiecode.com/download/) 获取最新版本：\n\n- **Android**：直接下载 APK 安装\n- **iOS**：扫码下载或在 App Store 搜索「WxPusher消息推送平台」\n\n---\n\n## 相关链接\n\n- [WxPusher 官方文档](https://wxpusher.zjiecode.com/docs/)\n- [WxPusher 官网](https://wxpusher.zjiecode.com)\n- [APP 下载](https://wxpusher.zjiecode.com/download/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwxpusher%2Fwxpusher-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwxpusher%2Fwxpusher-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwxpusher%2Fwxpusher-app/lists"}