Skip to content

应用出海核心知识点(原生 + Flutter)

面向 iOS / Android 原生与 Flutter 跨端应用,从合规、本地化、支付、网络、性能、安全、归因、推送、监控到跨端架构的全链路梳理。要求:准确、细致、全面、精简


目录


一、合规与隐私(Compliance & Privacy)

1.1 法规清单

法规地区重点
GDPR欧盟/EEA数据主体权利(访问/删除/可携带)、合法依据(同意/合同)、跨境传输 SCC
CCPA / CPRA美国加州"Do Not Sell My Personal Information" 链接、用户查询权
COPPA美国13 岁以下儿童应用需家长可验证同意
LGPD巴西类 GDPR
PIPL中国数据出境安全评估(跨境传输)
DMA欧盟数字市场法苹果须开放第三方支付/商店;Google 须允许其他引擎
DSA欧盟数字服务法平台内容透明、广告披露
HIPAA美国医疗健康数据
韩国 PIPA韩国14 岁以下家长同意

1.2 平台强制项

  • iOS
    • ATT (App Tracking Transparency):跨 App 跟踪需弹窗授权,ATTrackingManager.requestTrackingAuthorization;无授权时 IDFA 返回 00000000-0000-0000-0000-000000000000
    • PrivacyInfo.xcprivacy 隐私清单(iOS 17+):声明 Required Reason API(NSFileCoordinatorNSUserDefaultsFileManager 等)、数据采集类型、跟踪域名。
    • 账号删除(5.1.1):必须有 Hard Delete,连同 UGC 一起删除。
  • Android
    • Privacy Manifest (AndroidManifest.xml<privacy-sandbox>):声明广告 ID、SDK 数据共享。
    • Photo Picker(Android 13+)替代 READ_EXTERNAL_STORAGE
    • 前台服务类型(Android 14+)必须显式声明。
    • 通知权限(Android 13+)运行时申请 POST_NOTIFICATIONS

1.3 通用 SDK

  • Google UMP (User Messaging Platform):一键满足 GDPR/CCPA 弹窗,用户同意后才初始化广告与埋点 SDK。
  • CMP(Consent Management Platform):欧洲自 2024 起强制(DSA)。
  • Apple SKAdNetwork / Google Privacy Sandbox:归因迁移到设备侧。

1.4 数据存储与传输

  • 本地敏感数据:iOS Keychain(kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly);Android Keystore + EncryptedSharedPreferences。
  • 跨境传输:欧盟 → 美国 须走 SCC(标准合同条款)或 DPF(Data Privacy Framework)。
  • 数据本地化:俄罗斯、印度、越南要求数据存储在境内服务器。

二、本地化与多语言(Localization / i18n)

2.1 文案

  • 复数与性别:使用 ICU MessageFormat({count, plural, one{# item} other{# items}}),不要硬写 if (count == 1)。俄语/阿拉伯语/波兰语有 1、少 2-4、多 5+ 三套规则。
  • iOS.strings / .xcstrings(String Catalog,Xcode 15+)/ Localizable.xcstrings。
  • Androidstrings.xml + localesConfig + resConfigs;伪本地化(Pseudolocale)测试。
  • Flutterintl 包 + .arb 文件 + gen-l10n;根节点 Directionality 控制方向。

2.2 布局反转(RTL)

  • iOSleading / trailing 约束而非 left / rightUIViewsemanticContentAttribute;图标翻转 flipsForRightToLeftLayoutDirection
  • Androidandroid:autoMirrored="true"layoutDirection 由系统根据 locale 切换。
  • Flutter:根节点 Directionality(textDirection: TextDirection.rtl);返回箭头需要 Matrix4.rotationY(math.pi) 翻转;Directionality.of(context) 判断当前方向。
  • 测试:阿拉伯语(ar)、希伯来语(he)、波斯语(fa)开启 RTL 极端测试。

2.3 数字、货币、日期

  • 统一规则:客户端不传时区,只传 UTC0 时间戳,显示时再算。
  • 货币格式NumberFormat.currency(locale: 'en_US', symbol: 'USD');分位符欧洲用 ., 相反。
  • 日期:美国 MM/DD/YYYY、欧洲 DD/MM/YYYY、ISO YYYY-MM-DD
  • 时区切换:用户跨时区时由后端统一协调,前端不要本地时间序列化。

2.4 UI 弹性

  • 绝对禁止硬编码宽高(width: 100frame.size.width)。
  • 拥抱 Flex / Auto Layout / 约束布局
  • 滚动容器包裹可能溢出的内容。
  • 截图预审:德语、俄语普遍比英语长 30%–50%。

三、支付与订阅(Payments & Billing)

3.1 Apple IAP(StoreKit 2)

  • 产品类型:消耗型(Coins)、非消耗型(永久会员)、自动续期订阅(Auto-Renewable)、非续期订阅(Non-Renewing)。
  • API 风格async/awaitProduct.products(for:)product.purchase()Transaction.updates 监听 → transaction.finish()
  • 签名验证:每笔交易是 JWS(Header.Payload.Signature),用 Apple 根证书本地验签;不再依赖 Receipt。
  • 订阅状态Transaction.currentEntitlements 直接拿当前订阅。
  • 防掉单三件套:①本地持久化订单 → ②服务端 S2S 验签 → ③Transaction.updates / Transaction.unfinished 启动恢复。

3.2 Google Play Billing(PBL 6/7)

  • 产品类型:One-time Product、Subscription(Base Plan + Offer)。
  • Offer 类型FREE_TRIALINTRODUCTORY_PRICECODE
  • BillingFlowqueryProductDetailsAsynclaunchBillingFlowPurchasesUpdatedListeneracknowledgePurchase / consumeAsync
  • 服务端校验:用 Google Play Developer API 的 purchases.subscriptions.get 或 RTDN 推送。
  • Play Billing Library 强制:数字商品必须用 Google 支付,不可走第三方(除欧盟 User Choice Billing 试点国家、韩国)。

3.3 服务端联动

  • Apple Server Notifications V2https://<your-server>/apple/notify,类型 DID_RENEWREFUNDGRACE_PERIOD_EXPIREDPRICE_INCREASE
  • Google RTDN (Real-Time Developer Notifications):Pub/Sub 推送,SUBSCRIPTION_RENEWEDSUBSCRIPTION_CANCELEDSUBSCRIPTION_REVOKED
  • S2S 强同步:用户跨端 VIP 状态以服务端为准,杜绝白嫖。

3.4 区域定价与税务

  • Apple:App Store Connect 配置价格层级(800+ 国家层级);自动按汇率/税率调整;小型开发者计划 15% 抽成(年收入 <$100 万)。
  • Google:Play Console 自定义各国价格;可设置"购买力平价"。
  • 税率:日 10%、韩 10%、欧盟各国 VAT 19%–27%、印度 GST 18%。

3.5 替代支付(2024+ 新规)

  • 欧盟:DMA 强制开放第三方支付与外部链接(Apple External Link Entitlement)。
  • 美国:Reader App(阅读类、流媒体)可放外部链接(2022 反垄断和解)。
  • 韩国:法律强制允许第三方支付。
  • 荷兰:约会类 App 可申请外部链接。

四、网络与全球加速(Network & CDN)

4.1 DNS

  • HTTPDNS:绕过运营商 LocalDNS 劫持与污染,客户端直接 HTTP 请求拿 IP。iOS 用 HappyDNS / Cronet,Android 用 OkHttp DNS SPI,Flutter 用 cupertino_http / cronet_http
  • 备用域名:主域被封时切换;IP 直连兜底。

4.2 加速

  • CDN:Cloudflare(含 R2 存储、Workers 边缘计算)、AWS CloudFront、Akamai、Fastly。
  • 边缘缓存:静态资源(图片、视频、APK/AAB)放 CDN,动态 API 走源站。
  • WAF 规则:CF 防火墙拦截高频请求;为 App 设"暗号 Header"避免被识别为爬虫返回 503/Captcha。

4.3 协议与握手

  • HTTP/2:多路复用、头部压缩(HPACK),iOS URLSession / OkHttp 默认开启。
  • HTTP/3 (QUIC):基于 UDP,弱网显著优于 HTTP/2;iOS 15+ URLSessionConfiguration.assumesHTTP3Capable;Cronet 支持。
  • TLS 1.3:1-RTT 握手,支持 0-RTT 重放(运维须保证幂等 POST/PUT 返回 425)。
  • TLS 1.2 → 1.3 升级:iOS 15、Android 10+ 默认支持。

4.4 弱网

  • 超时分层:连接 5s、读取 10s、总时长 30s,分接口配置。
  • 退避重试:指数退避 + 抖动(delay = base * 2^n + random),上限 5 次。
  • 请求合并:批量接口、URLSessionTaskGroup、GraphQL。
  • 断点续传Range 头 + 本地 offset 持久化。

4.5 时区

  • 统一 UTC0:客户端不传任何时区字段,序列化使用 Date()(绝对时间)或 ISO 8601 + Z
  • 显示:客户端按 TimeZone.current 本地化渲染。

五、性能与体验(Performance)

5.1 包体积

  • iOS App Thinning:Bitcode 已废弃(Xcode 14 起);Slicing 自动按架构/资源切片;__TEXT 段优化(exported_symbols_list)。
  • Android:上传 AAB 而非 APK;Dynamic Delivery 按语言/架构/屏幕密度分发;R8 全模式混淆。
  • Flutter--split-per-abi 拆 ABI;--tree-shake-iconsdeferred-components 延迟加载;dart-define 剔除无用分支。
  • 图片优化:WebP、AVIF(iOS 16+/Android 12+ 原生支持)、HEIC(iOS 友好);VectorDrawable(Android 图标);SVG → flutter_svg

5.2 启动

  • iOS Pre-main:dyld 加载 → Mach-O 依赖 → ObjC 类注册 → Category 合并 → +load
  • 优化:减少动态库(合并 Pod)、移除无用 +load(改 +initialize)、二进制重排(Order File)提升 Page In 命中率。
  • Flutter Engine 预热FlutterEngine 在 App 启动时预热,首页 FlutterViewController 复用。
  • AndroidStrictMode 检测主线程 I/O;Startup 库(Jetpack)统一初始化;避免 ContentProvider 链式启动。

5.3 内存

  • iOS OOM:监听 DISPATCH_SOURCE_TYPE_MEMORYPRESSUREtask_vm_info.phys_footprint 才是真正水位线;mmap 大文件零拷贝。
  • Flutter GC:分代复制(新生代)+ 标记清扫(老年代);图片缓存设上限 PaintingBinding.instance.imageCache.maximumSizeBytes
  • 跨端联动:原生页面 dealloc 时主动通知 Flutter 清理 ImageCacheTexture

5.4 渲染防卡顿

  • iOS:避免离屏渲染(圆角 + masksToBounds、阴影无 path、光栅化频繁失效);异步绘制(drawsAsynchronously)。
  • FlutterRepaintBoundary 隔离重绘;精准局部刷新(避免父 Widget setState 触发整树重建);规避 saveLayer
  • 监控CADisplayLink 丢帧 / Runloop 状态切换耗时 / FlutterDevTools Raster 线程。

六、安全与反作弊(Security)

6.1 通信

  • SSL Pinning:固定证书 SPKI 或公钥,防中间人;iOS URLSessionDelegate、Android OkHttp CertificatePinner、Flutter SecurityContext
  • 证书轮换:Pinning 用 SPKI 哈希多备几个备用 key,避免换证书 App 全挂。

6.2 静态防护

  • iOS:类名/方法名宏定义混淆;swift-demangle 反查能力提升需要 @_silgen_name 重映射;移除无用符号(strip -x)。
  • AndroidProGuard / R8minifyEnabled trueshrinkResources true);-keep 仅保留必要反射入口;native 库 __attribute__((visibility("hidden"))) 隐藏符号。
  • Flutter:Dart AOT 已编译为机器码,但 strings 仍可读出字符串;敏感串加密存储,运行时解密。

6.3 动态防护

  • 越狱/Root 检测:iOS 检查 /Applications/Cydia.app/usr/sbin/sshd/private/var/lib/aptdyldMobileSubstrate;Android 检查 suMagiskSuperuser.apk/system/xbin
  • 调试器检测sysctlP_TRACEDdlsym(getppid)、定时检查 ptrace(PT_DENY_ATTACH)
  • Frida/Hook 检测:扫描 frida-server 端口、gum-js-loop 线程、文件系统 re.frida.server
  • 完整性校验:iOS MobileGestalt、签名哈希;Android PackageInfo.signatures + 服务端比对。

6.4 设备标识与归因

  • iOS:IDFV(同开发者 ID 内唯一)、IDFA(需 ATT)、DeviceCheck(防作弊令牌)、App Attest(生成硬件密钥验证)。
  • Android:Android ID、IMEI(已弃用)、OAID(中国)、Play Integrity API(设备完整性 + 应用完整性)。
  • Flutterdevice_info_plusflutter_secure_storage

6.5 数据加密

  • 传输:TLS 1.3 + Pinning。
  • 存储:iOS Keychain(kSecAttrAccessible)、CryptoKit / AES.GCM;Android Keystore + AES/GCM
  • Flutterencryptpointycastleflutter_secure_storage(iOS 走 Keychain,Android 走 EncryptedSharedPreferences)。

七、数据埋点与归因(Analytics & Attribution)

7.1 归因方案

  • iOS 14+:IDFA 受限,使用 SKAdNetwork (SKAN 4.0+),激活后由 Apple 推回 Postback;通过 Conversion Value 编码用户行为。
  • Android:Google 推 Privacy Sandbox(Topics、Protected Attribution);过渡期 Referrer + 谷歌安装referrer API。
  • 第三方归因平台AppsFlyerAdjustBranchKochava;都集成 SKAN+Privacy Sandbox 双通道。
  • 服务端归因:iOS 14.5+ 也可走 AdServices.framework 拿 Apple Search Ads 归因 Token。

7.2 埋点体系

  • 事件模型:用户(user)、事件(event)、属性(properties);幂等 ID。
  • 离线缓存:本地 SQLite/Realm 缓存埋点,弱网批量上报。
  • 合规:用户未同意跟踪前不初始化广告/归因 SDK,但自有埋点可继续(注意不传输 IDFA)。
  • 工具:Firebase Analytics(GA4)、Amplitude、Mixpanel、神策、自研。

7.3 转化上报

  • CAPI(Conversion API):Meta/TikTok 服务端事件,弥补客户端 ATT 受限带来的归因缺失。
  • Postback URL:SKAN 4.0 支持自定义 URL 接收回调。

八、推送(Push Notifications)

8.1 平台

  • iOS:APNs(HTTP/2,开发/生产证书)。Token Authentication(.p8)优于证书(.p12)。
  • Android:海外标配 Firebase Cloud Messaging (FCM)(国内用厂商通道:华为/小米/OPPO/VIVO)。
  • 统一推送层:服务端封装 APNs+FCM+厂商通道;Flutter 用 firebase_messaging + flutter_apns 桥接。

8.2 进阶

  • 静默推送(Background Notifications):iOS content-available: 1;Android data-only FCM;用于数据预取、定时唤醒。
  • 富媒体推送:iOS Notification Service Extension 解码图片/GIF;Android Notification.BigPictureStyle
  • iOS Live Activities / ActivityKit(iOS 16.1+):实时动态(外卖进度、比赛比分)。
  • Android Foreground Service:常驻通知栏服务(导航、音乐);Android 14+ 必须声明类型。
  • 推送时机:避免冷启动直接申请,先用 Pre-ATT 自定义页解释价值。

九、监控与崩溃收集(Crash & Monitoring)

9.1 工具

平台推荐
崩溃Firebase Crashlytics(出海标配)、Sentry、Bugly(国内)
性能 APMCrashlytics Performance、Datadog RUM、Sentry Performance
iOS 系统级MetricKit(MXMetricManager)— 能耗、I/O、内存、卡顿
Android 系统级Android Vitals(Play Console 自动采集)
FlutterSentry Dart SDK / Firebase Flutter SDK / flutter_runner

9.2 关键指标

  • 崩溃率:行业基线 < 0.1% sessions。
  • ANR(Android)/ Jetsam OOM(iOS):单独跟踪。
  • 卡顿:主线程 Runloop BeforeSources → AfterWaiting 耗时 > 700ms 抓堆栈上报。
  • 能耗:MetricKit 的 cpuTimeDefiningforegroundExit(被系统杀)。

9.3 符号化

  • iOS:dSYM 上传到 Crashlytics / Sentry;App Store Connect 也接收。
  • Android:mapping.txt 上传 Play Console + Crashlytics;R8 minify 后必须保留。
  • Flutterflutter symbolize + app.ios.symbols / Android libapp.so.debug

十、跨端架构(Flutter Hybrid)

10.1 混合栈方案

  • Flutter Boost / flutter_thrio:原生层维护真实 VC/Activity 栈,通过 MethodChannel 通知 Flutter Navigator,复用同一个 Flutter Engine,按需创建/销毁 FlutterViewController,控制内存。
  • Add-to-App:官方推荐,原生工程嵌入 Flutter Module;iOS CocoaPods 集成 flutter_module,Android 依赖 :flutter AAR。

10.2 通信

通道用途
MethodChannel异步方法调用(最常用),类似 RPC
EventChannel原生 → Flutter 持续数据流(传感器、下载进度)
BasicMessageChannel频繁简单数据,可同步
Pigeon类型安全的 MethodChannel,代码生成;中大型项目首选
FFI (dart:ffi)Dart 直调 C/C++,零序列化开销;高性能图像/音视频

10.3 生命周期打通

  • 原生页面 dealloc / onDestroy → MethodChannel 通知 Flutter → 释放 ImageCache、Texture、StreamSubscription。
  • iOS 内存警告 → Flutter 端 WidgetsBindingObserver.didHaveMemoryPressure 同步释放图片缓存。

10.4 热更新限制

  • iOS 严禁动态下发可执行代码(除 Apple WebKit 与 React Native 0.71+ Hermes 字节码灰区)。
  • 替代方案:动态化 UI(自研 DSL、Kraken、Sonic、Hippy)、WebView + JS、动态配置(JSON 驱动 UI)。
  • Android 可动态加载 dex,但 Play 政策禁止分发第三方代码(除 Interpreter 模式)。

10.5 引擎选择

  • Impeller:iOS 全面启用;Android 14+ 默认,老机型回退 Skia。底层 Metal(iOS)/ Vulkan(Android)。
  • Web:HTML 模式(轻 DOM)或 CanvasKit(Skia 编 Wasm,UI 100% 一致但首屏白屏)。

11.1 主体

  • 个人:上传到个人 Apple Developer 账号($99/年),名称显示个人姓名。
  • 公司主体选择:新加坡 / 香港(低税率 + 易收款)/ BVI(境外无税)/ 美国 LLC(收 Apple Search Ads)。
  • D-U-N-S Number:Apple 公司账号必填(邓白氏编码),免费申请需 1–2 周。

11.2 税务

  • W-8BEN:非美国开发者收美国收入必填,避免被预扣 30%。
  • Apple/Google:自动代扣部分国家销售税;开发者收净分成。
  • 欧盟 VAT / MOSS:数字服务注册 OSS 一站式申报。
  • 小型开发者计划:Apple 15%(年收入 < $100 万);Google 15%(年收入 < $100 万,门槛规则不同)。

11.3 商标与版权

  • 提前注册商标(USPTO、EUIPO、马德里体系);App 名称、Logo 抢注风险高。
  • UGC 类需配 DMCA Takedown 流程。
  • 第三方素材必须有授权或商用 License。

十二、地区专项(Region Specific)

12.1 中国大陆

  • ICP 备案、软著、应用商店分发资质。
  • iOS 国内归因走 CAID / 移动安全联盟;Android 走 OAID
  • 个人信息保护法 PIPL:跨境传输须安全评估。

12.2 欧盟

  • GDPR + DMA + DSA + 欧盟 Cookie Law。
  • 强制 CMP 弹窗;强制允许第三方支付与外部链接。
  • "Do Not Track" 浏览器信号识别。

12.3 中东(沙特、阿联酋、卡塔尔)

  • 阿拉伯语 RTL 必须完美;图标镜像(返回箭头、播放图标)。
  • 宗教内容审查:猪肉、酒精、赌博、LGBTQ+ 内容直接下架。
  • 祈祷时间推送优化(不在 Salat 期间推送打扰)。

12.4 韩国

  • 法律强制允许第三方支付,但仍需走 IAP(Google/Apple 上架要求)+ 申报例外。
  • 游戏类必须 GRAC 分级(实质审查)。
  • 14 岁以下家长同意(PIPA)。

12.5 日本

  • 资金决済法:虚拟货币、积分系统需登记。
  • 出会系规制:相亲、社交类需备案。
  • 年龄确认(カードなど)。

12.6 印度尼西亚 / 越南

  • 游戏类需注册为出版商才能上架付费应用。
  • 越南数据本地化要求(政府数据须存境内)。

12.7 印度

  • 数据本地化(支付数据 100% 印度境内)。
  • Google Play 独占分发(华为被禁)。
  • GST 18% 数字服务税。

12.8 俄罗斯

  • 数据本地化(用户数据须存俄罗斯服务器)。
  • Yandex 应用商店分发(Google Play 在俄罗斯受限)。
  • 法律要求预装俄罗斯软件("互联网主权法")。

附:上线 Checklist(出海版)

  • [ ] 隐私政策 + 用户协议(多语言、合规地区版本)
  • [ ] iOS PrivacyInfo.xcprivacy 配置完整
  • [ ] Android Data Safety Form 填写完整
  • [ ] UMP SDK 弹窗 + ATT Pre-Prompt
  • [ ] 账号删除入口(Hard Delete 联动服务端)
  • [ ] IAP / PBL 防掉单 + S2S 验签
  • [ ] 多语言文案(含 RTL)
  • [ ] 截图本地化(每地区独立)
  • [ ] HTTPDNS + CDN + WAF 规则
  • [ ] Crashlytics / Sentry 全量上线
  • [ ] 归因接入(SKAN + AppsFlyer/Adjust)
  • [ ] 推送统一层(APNs + FCM + 厂商通道)
  • [ ] 时区统一 UTC0
  • [ ] 货币 / 日期 / 数字格式化(ICU)
  • [ ] 法务:W-8BEN、商标、DMCA(UGC 类)
  • [ ] 灰度发布 + 监控回滚机制

基于 VitePress 构建 · 部署于 Cloudflare Pages