移动端开发工程师

1997.12 · 本科 · 湖南工学院 · 材料成型及控制工程 · 2016–2020 · CET-4

邮箱:asdplk3@live.com · GitHub:github.com/Notsfsssf

工作经历

北京众图互动科技有限公司 · Android 开发工程师

2020-09 — 2024-07

负责 Android 与 iOS 出海应用的研发与长期迭代。在公司支持下,系统性落地 Compose、Jetpack、Kotlin 协程、SwiftUI、Flutter 等推荐技术栈,完成多款产品的构建与维护。应用基于 Firebase、Google Cloud、AdMob 完成账号、推送、存储、远程配置、深度链接与广告变现;熟悉 Firebase Auth、Cloud Messaging、Storage、Remote Config、Dynamic Links 等产品能力。2024-06 ~ 2024-07 为离职后项目收尾,继续支持 Neku iOS 与 Android 单包项目的功能迭代与发布。

WINNERS CHOICE LIMITED

2024-08 — 2026-08

以服务协议形式远程负责交易类 App 与即时通讯产品的双端开发:Android 端使用 Flutter,iOS 端使用 SwiftUI。

个人项目

Pixez(Flutter)

https://github.com/Notsfsssf/pixez-flutter

使用 Flutter 独立完成并持续维护的 Pixiv 第三方客户端,覆盖 Android、iOS、Windows,上架 Google Play 与 App Store。

  • 网络层以 Dio 对接业务,底层接入自维护的 Rust rhttp(FFI / flutter_rust_bridge):支持自定义 DNS、关闭 SNI 的兼容直连,以及 ECH 直连;图片下载放到 Isolate 中执行,避免阻塞 UI
  • 全局状态以 MobX Store 为主,新模块逐步迁移至 Riverpod + Freezed + Hooks;配置使用 SharedPreferences,浏览历史、屏蔽列表、下载任务等使用 Sqflite,桌面端通过 sqflite_common_ffi 复用同一套数据层
  • 通过 MethodChannel 对接原生能力:Android 侧实现 SAF 存图、App Widget、Deep Link;iOS Widget Extension 与主 App 通过 App Group 共享 Sqflite 数据库,由 Widget 侧用 FMDB 读取
  • Windows 使用 Fluent UI,配合 window_manager / flutter_acrylic 做窗口与材质效果;移动端使用 Material 3 与 Dynamic Color;Ugoira 动图用 CustomPainter 逐帧绘制
  • 熟悉 App Store / Google Play 上架流程与常见审核问题:例如 permission_handler 未修改 Podfile 会一次性申请全部权限;新版 SPM 下若 permission_handler_apple 缺少宏定义,需通过本地 override 剔除相关代码

众图互动

NeKu OC Character Creator(iOS)

https://apps.apple.com/us/app/neku-make-avatar-sticker/id1630343674

面向海外用户的头像创作应用:用户可通过模板组件自由组合,生成个性化头像。

  • IAP 采用非消耗型商品与订阅;星星商店使用消耗型内购
  • 全项目使用 SwiftUI 构建,UIKit + SwiftUI-Introspect 补齐不完善 API,最低支持 iOS 15,并可响应 iPad 窗口尺寸变化
  • 以 Firebase 作为推送后端,实现 Notification Extension 以支持图片推送
  • 接入 MAX 与 AdMob 两家广告中介,按地区适配 CMP;支持插屏、激励视频、激励插屏、Banner、原生广告,并通过 Remote Config 配置与切换中介
  • 使用 SwiftUI Canvas 实现编辑器,通过对 UIImage 的处理完成组件染色
  • 支持 iMessage Sticker:App Group 之间通过读写 FMDB 数据库传递贴纸列表;在 MSMessagesAppViewController 中嵌入 UIHostingController 混用 SwiftUI,向用户呈现并发送 MSSticker
  • 使用 Flutter 的 CustomPaint 与 GestureDetector 实现文字编辑器,支持平移、旋转、缩放、拖动与艺术字渐变,并可导出为 ui.Image
  • 头像组件染色基于 RGBA 数组的渐变色处理:将 CGImage 转为 RGBA 数组后做灰度取色,修改像素值再转回 CGImage,客户端与后端采用同一套方案
  • PK 模块以 Flutter Module 进行双端开发,以便快速上线
  • WhatsApp Sticker 模块使用 Objective-C 调用 libwebp 处理 EXIF,以满足 WhatsApp 对 WebP 格式的要求
  • 完成 2024 年 5 月 1 日前的 Privacy Info Manifest 适配,并顺利通过审核

TextSticker for WAStickerApps

https://play.google.com/store/apps/details?id=com.memeandsticker.textsticker

面向海外用户的 WhatsApp Sticker 表情包应用。

  • 负责功能迭代:UGC 内容展示,以及支持字体切换、渐变色与动态 WebP 合成的贴纸编辑器
  • 适配 targetSdk 30 之后的存储权限变化,编写并落地针对 WhatsApp 目录的 SAF 授权流程
  • 完成 Firebase 项目配置,并将数据层从 Firebase 无服务器数据库迁移至 RESTful API
  • 实现底部导航栏伸缩悬浮、点赞反馈、表情选择等交互动画
  • 单仓库支撑多产品。长期分支分裂、冲突与回滚导致 master 难以作为主干,改用 rebase、cherry-pick 进行协作与合入
  • i18n module适配多国语言

Personal Stickers StickerMaker

https://play.google.com/store/apps/details?id=com.memeandsticker.personal

TextSticker 的分支应用。

  • 使用 FCM 实现 IM:通过 API 拉取历史消息,借助 FCM 接收实时消息;后期改用 Socket.IO 降低消息延迟
  • 先后实现群聊与单聊;客户端维护自生成消息 ID,并结合 SQLite 展示与更新消息列表

HD Sticker & Pack WAStickersApps

https://play.google.com/store/apps/details?id=com.style.sticker

展示经后台审核筛选的成套 Sticker。

  • 扩展 Firebase Cloud Messaging,实现自定义通知布局
  • 结合运营推送的信息载荷渲染通知内容
  • 支持动图通知,并适配高版本 Android 对 Notification Style 的能力、限制与展示差异

StickTok - Animation Sticker

https://play.google.com/store/apps/details?id=com.stickerstudio.sticktok

基于视频编辑 SDK 的视频转动态 WebP Sticker 应用。

  • 使用视频编辑 SDK 生成视频,再通过 FFmpeg 转换为 WebP
  • 视频处理基于华为视频 SDK 的编辑能力改造;通过代码插桩解决该 SDK 调用 READ_PHONE_STATE 相关 API 在 Android 30 上崩溃的问题

Remote Config Superman

内部调试工具,用于解决 Android 上 Remote Config 每次调试都需硬编码、编译、验证的问题,并避免线上测试反复设计后门开关。

  • 通过 Superman App 覆写 Remote Config 键值对;业务 App 只需集成 Superman core 即可接入
  • Superman 启动后在前台服务中运行 Web 服务,使用 Ktor 作为 HTTP Server,提供键值对的增删改查
  • 主 App 通过 Content Provider 与 Superman 通信:取值时优先读取 Superman 覆盖值,不存在则回退到 Firebase Remote Config
  • 支持公司多个 App 使用不同配置,通过 query URL 区分

Samoyed 单包项目

https://play.google.com/store/apps/details?id=com.memesticker.singleapp.samoyed

一套表情包对应一个 App 的多 Flavor 工程。

  • 画师产出表情包后,运营在后台完成商业化配置,Google Cloud配置生成Client Id;再通过 Node.js 脚本拉取图标、通知图标、应用名、广告配置、包名等素材,生成 Android Flavor 资源,并以 buildConfigField 控制产品差异,最终打包产出新应用

WINNERS CHOICE LIMITED

LoopAI

https://apps.apple.com/hk/app/loopai-ai-agent-collaboration/id6465571995

集直播、音视频聊天、礼物内购、千人 IM 群聊于一体的应用,后期接入 OpenClaw 订阅能力。

  • 负责原生 iOS 端开发
  • IAP 包含云电脑自动续期订阅与金币消耗型商品,并完成 StoreKit 购买校验打通
  • 原项目以 UIKit 纯代码搭建(无 xib / Storyboard,使用 SnapKit 约束),数据请求与 UI 逻辑均写在 UIViewController 中、缺少分层。接手后以 SwiftUI 开发新页面并重构旧页面,用 ObservableObject 承担 ViewModel 职责,逐步替换;后期仅剩少量页面尚未迁移
  • 聊天与直播原使用环信与声网,后期自行部署 OpenIM 替换环信
  • 支持 App Universal Link,用于系统相机验证跳转