iOS vs Android 主屏幕快捷方式差异:expo-quick-actions 双平台 7 大关键点对比
【免费下载链接】expo-quick-actionsAdd home screen quick actions / shortcuts and custom icons to your Expo app项目地址: https://gitcode.com/gh_mirrors/ex/expo-quick-actions
📱expo-quick-actions是一个为 Expo 应用添加主屏幕快捷方式(Home Screen Quick Actions)和动态应用图标的 React Native 库。一次安装,即可在 iOS 和 Android 上让用户长按 App 图标快速直达核心功能。但两个平台在数量、图标、能力上差异不小,本文带你用7 个关键点快速吃透 iOS 与 Android 主屏幕快捷方式的异同。
🧭 先看懂:什么叫"主屏幕快捷方式"
- iOS:长按 App 图标弹出的快捷菜单(Quick Actions)
- Android:长按图标弹出的动态快捷方式(Dynamic Shortcuts)
expo-quick-actions 用统一的 JS API 抹平了底层差异:QuickActions.setItems([...])一行代码,双平台生效。示例代码见 App.tsx。
关键点 1:快捷方式数量上限不同
| 平台 | 上限 | 机制 |
|---|---|---|
| iOS | 固定 4 个 | 系统写死,见 ExpoQuickActionsModule.swift 中"maxCount": 4 |
| Android | 动态获取(如 Pixel 6 为 15) | 启动时从系统ShortcutManager读取 |
👉 开发者建议:两个平台官方都推荐最多 4 个快捷方式。想拿到真实上限,读QuickActions.maxCount即可。
关键点 2:iOS 支持"静态快捷方式",Android 不支持
- iOS:通过 withIosStaticActions.ts 配置插件,可直接把快捷方式写入 Info.plist,App冷启动前就可见
- Android:目前仅支持运行时动态设置(
setItems),因为原生静态快捷方式无法携带复杂 Intent 参数
这是双平台最"不对等"的一点:iOS 用户装完 App 立刻能看到快捷方式,Android 用户需等 App 运行一次后才出现。
关键点 3:副标题(subtitle)只有 iOS 生效
Action对象里的subtitle字段:
- iOS:会显示在快捷方式标题下方(
localizedSubtitle) - Android:数据可以传递,但快捷方式气泡上不显示
所以跨平台配置时,别指望 Android 端能展示副标题。
关键点 4:图标体系完全两套逻辑
iOS 图标(单色模板风格):
- 28 个内置系统图标(compose、search、home…),映射表见 ExpoQuickActionsModule.swift
symbol:前缀 → SF Symbols(如symbol:heart.fill,仅限 iOS)asset:前缀 → 自定义图,会被系统压成单色并裁剪成圆形
Android 图标(全彩自适应风格):
- 图标解析为
drawable/mipmap资源,支持asset:前缀 - 配置插件 withAndroidAppIcon.ts 可自动生成自适应图标(前景图 + 背景色),覆盖 5 种分辨率
- 效果示例:
⚠️ 注意:iOS 快捷方式避免使用品牌彩色图标,和系统注入的"编辑主屏幕""分享"等单色图标放在一起会很突兀,官方建议优先用 SF Symbols。
关键点 5:Android 快捷方式可"钉"到桌面,iOS 不行
这是 Android 的独特能力:用户可以把长按菜单里的快捷方式固定到主屏幕,变成独立的入口图标。
- Android 端
QuickActions.isSupported()会检测系统是否支持"钉住"(isRequestPinShortcutSupported,见 ExpoQuickActionsModule.kt) - iOS 端该值恒为
true(iOS 没有钉住场景)
👉 设计启示:Android 快捷方式应视为 App 的"备选入口",图标和命名要足够独立完整;iOS 则更像菜单项。
关键点 6:系统支持门槛不一样
| 维度 | iOS | Android |
|---|---|---|
| 最低系统 | 全版本支持 | Android 7.0(API 24)+ |
| 厂商依赖 | 无 | 部分国产 ROM 表现不一,需真机验证 |
| 启动识别 | AppDelegate.swift 捕获.shortcutItem | QuickActionsReactActivityLifecycleListener.kt 解析 Intent |
双平台都会把"用户点了哪个快捷方式"回填到QuickActions.initial,逻辑统一。
关键点 7:应用图标切换(彩蛋功能)
expo-quick-actions/icon还附带动态更换 App 图标能力,双平台实现也不同:
- iOS:走系统"替代表图标"(Alternate Icons),支持浅色/深色双图标
- Android:走多图标(Activity Alias)机制;⚠️切换时 App 会被关闭
示例工程 AppIconTest.tsx 提供了三套主题切换演示,配置见 app.json:
📊 7 大关键点对比总表
| # | 对比项 | iOS | Android |
|---|---|---|---|
| 1 | 数量上限 | 固定 4 | 动态获取(最多 15) |
| 2 | 静态快捷方式 | ✅ 写入 Info.plist | ❌ 仅动态 |
| 3 | 副标题显示 | ✅ | ❌ |
| 4 | 图标风格 | 单色模板 / SF Symbols | 全彩自适应图标 |
| 5 | 钉到桌面 | ❌ | ✅ |
| 6 | 系统门槛 | 全支持 | 7.0+,视 ROM |
| 7 | 换 App 图标 | 替代表图标 | Activity Alias(切换即关 App) |
🗺️ 源码地图:想深入时看哪里
| 模块 | 路径 |
|---|---|
| iOS 快捷方式核心 | ExpoQuickActionsModule.swift |
| Android 快捷方式核心 | ExpoQuickActionsModule.kt |
| iOS 静态动作插件 | withIosStaticActions.ts |
| Android 图标生成插件 | withAndroidAppIcon.ts |
| iOS 图标切换 | ExpoAppIconModule.swift |
| 完整示例 | App.tsx |
💡版本提醒:expo-quick-actions与 Expo SDK 需配套使用(如 Expo 56 ↔ 6.0.2),完整对照表见 README.md。
一句话总结:写一份配置,setItems一次调用,expo-quick-actions 帮你搞定 90% 的双平台主屏幕快捷方式;剩下 10% 的差异——数量、副标题、图标风格、钉住能力——正是本文的 7 个关键点,照着调参即可。
【免费下载链接】expo-quick-actionsAdd home screen quick actions / shortcuts and custom icons to your Expo app项目地址: https://gitcode.com/gh_mirrors/ex/expo-quick-actions
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考