应用出海核心知识点(原生 + Flutter)
面向 iOS / Android 原生与 Flutter 跨端应用,从合规、本地化、支付、网络、性能、安全、归因、推送、监控到跨端架构的全链路梳理。要求:准确、细致、全面、精简。
目录
- 一、合规与隐私(Compliance & Privacy)
- 二、本地化与多语言(Localization / i18n)
- 三、支付与订阅(Payments & Billing)
- 四、网络与全球加速(Network & CDN)
- 五、性能与体验(Performance)
- 六、安全与反作弊(Security)
- 七、数据埋点与归因(Analytics & Attribution)
- 八、推送(Push Notifications)
- 九、监控与崩溃收集(Crash & Monitoring)
- 十、跨端架构(Flutter Hybrid)
- 十一、法务与税务(Legal & Tax)
- 十二、地区专项(Region Specific)
一、合规与隐私(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(
NSFileCoordinator、NSUserDefaults、FileManager等)、数据采集类型、跟踪域名。 - 账号删除(5.1.1):必须有 Hard Delete,连同 UGC 一起删除。
- ATT (App Tracking Transparency):跨 App 跟踪需弹窗授权,
- Android
- Privacy Manifest (
AndroidManifest.xml中<privacy-sandbox>):声明广告 ID、SDK 数据共享。 - Photo Picker(Android 13+)替代
READ_EXTERNAL_STORAGE。 - 前台服务类型(Android 14+)必须显式声明。
- 通知权限(Android 13+)运行时申请
POST_NOTIFICATIONS。
- Privacy Manifest (
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。 - Android:
strings.xml+localesConfig+resConfigs;伪本地化(Pseudolocale)测试。 - Flutter:
intl包 +.arb文件 +gen-l10n;根节点Directionality控制方向。
2.2 布局反转(RTL)
- iOS:
leading/trailing约束而非left/right;UIView的semanticContentAttribute;图标翻转flipsForRightToLeftLayoutDirection。 - Android:
android: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、ISOYYYY-MM-DD。 - 时区切换:用户跨时区时由后端统一协调,前端不要本地时间序列化。
2.4 UI 弹性
- 绝对禁止硬编码宽高(
width: 100、frame.size.width)。 - 拥抱 Flex / Auto Layout / 约束布局。
- 滚动容器包裹可能溢出的内容。
- 截图预审:德语、俄语普遍比英语长 30%–50%。
三、支付与订阅(Payments & Billing)
3.1 Apple IAP(StoreKit 2)
- 产品类型:消耗型(Coins)、非消耗型(永久会员)、自动续期订阅(Auto-Renewable)、非续期订阅(Non-Renewing)。
- API 风格:
async/await,Product.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_TRIAL、INTRODUCTORY_PRICE、CODE。 - BillingFlow:
queryProductDetailsAsync→launchBillingFlow→PurchasesUpdatedListener→acknowledgePurchase/consumeAsync。 - 服务端校验:用 Google Play Developer API 的
purchases.subscriptions.get或 RTDN 推送。 - Play Billing Library 强制:数字商品必须用 Google 支付,不可走第三方(除欧盟 User Choice Billing 试点国家、韩国)。
3.3 服务端联动
- Apple Server Notifications V2:
https://<your-server>/apple/notify,类型DID_RENEW、REFUND、GRACE_PERIOD_EXPIRED、PRICE_INCREASE。 - Google RTDN (Real-Time Developer Notifications):Pub/Sub 推送,
SUBSCRIPTION_RENEWED、SUBSCRIPTION_CANCELED、SUBSCRIPTION_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-icons;deferred-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复用。 - Android:
StrictMode检测主线程 I/O;Startup库(Jetpack)统一初始化;避免ContentProvider链式启动。
5.3 内存
- iOS OOM:监听
DISPATCH_SOURCE_TYPE_MEMORYPRESSURE;task_vm_info.phys_footprint才是真正水位线;mmap 大文件零拷贝。 - Flutter GC:分代复制(新生代)+ 标记清扫(老年代);图片缓存设上限
PaintingBinding.instance.imageCache.maximumSizeBytes。 - 跨端联动:原生页面
dealloc时主动通知 Flutter 清理ImageCache、Texture。
5.4 渲染防卡顿
- iOS:避免离屏渲染(圆角 +
masksToBounds、阴影无 path、光栅化频繁失效);异步绘制(drawsAsynchronously)。 - Flutter:
RepaintBoundary隔离重绘;精准局部刷新(避免父 WidgetsetState触发整树重建);规避saveLayer。 - 监控:
CADisplayLink丢帧 / Runloop 状态切换耗时 /FlutterDevToolsRaster 线程。
六、安全与反作弊(Security)
6.1 通信
- SSL Pinning:固定证书 SPKI 或公钥,防中间人;iOS
URLSessionDelegate、AndroidOkHttp CertificatePinner、FlutterSecurityContext。 - 证书轮换:Pinning 用 SPKI 哈希多备几个备用 key,避免换证书 App 全挂。
6.2 静态防护
- iOS:类名/方法名宏定义混淆;
swift-demangle反查能力提升需要@_silgen_name重映射;移除无用符号(strip -x)。 - Android:ProGuard / R8(
minifyEnabled true、shrinkResources true);-keep仅保留必要反射入口;native 库__attribute__((visibility("hidden")))隐藏符号。 - Flutter:Dart AOT 已编译为机器码,但
strings仍可读出字符串;敏感串加密存储,运行时解密。
6.3 动态防护
- 越狱/Root 检测:iOS 检查
/Applications/Cydia.app、/usr/sbin/sshd、/private/var/lib/apt、dyld中MobileSubstrate;Android 检查su、Magisk、Superuser.apk、/system/xbin。 - 调试器检测:
sysctl查P_TRACED、dlsym(getppid)、定时检查ptrace(PT_DENY_ATTACH)。 - Frida/Hook 检测:扫描
frida-server端口、gum-js-loop线程、文件系统re.frida.server。 - 完整性校验:iOS
MobileGestalt、签名哈希;AndroidPackageInfo.signatures+ 服务端比对。
6.4 设备标识与归因
- iOS:IDFV(同开发者 ID 内唯一)、IDFA(需 ATT)、DeviceCheck(防作弊令牌)、App Attest(生成硬件密钥验证)。
- Android:Android ID、IMEI(已弃用)、OAID(中国)、Play Integrity API(设备完整性 + 应用完整性)。
- Flutter:
device_info_plus、flutter_secure_storage。
6.5 数据加密
- 传输:TLS 1.3 + Pinning。
- 存储:iOS Keychain(
kSecAttrAccessible)、CryptoKit/AES.GCM;Android Keystore +AES/GCM。 - Flutter:
encrypt、pointycastle、flutter_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。
- 第三方归因平台:AppsFlyer、Adjust、Branch、Kochava;都集成 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;Androiddata-onlyFCM;用于数据预取、定时唤醒。 - 富媒体推送:iOS
Notification Service Extension解码图片/GIF;AndroidNotification.BigPictureStyle。 - iOS Live Activities / ActivityKit(iOS 16.1+):实时动态(外卖进度、比赛比分)。
- Android Foreground Service:常驻通知栏服务(导航、音乐);Android 14+ 必须声明类型。
- 推送时机:避免冷启动直接申请,先用 Pre-ATT 自定义页解释价值。
九、监控与崩溃收集(Crash & Monitoring)
9.1 工具
| 平台 | 推荐 |
|---|---|
| 崩溃 | Firebase Crashlytics(出海标配)、Sentry、Bugly(国内) |
| 性能 APM | Crashlytics Performance、Datadog RUM、Sentry Performance |
| iOS 系统级 | MetricKit(MXMetricManager)— 能耗、I/O、内存、卡顿 |
| Android 系统级 | Android Vitals(Play Console 自动采集) |
| Flutter | Sentry Dart SDK / Firebase Flutter SDK / flutter_runner |
9.2 关键指标
- 崩溃率:行业基线 < 0.1% sessions。
- ANR(Android)/ Jetsam OOM(iOS):单独跟踪。
- 卡顿:主线程 Runloop
BeforeSources → AfterWaiting耗时 > 700ms 抓堆栈上报。 - 能耗:MetricKit 的
cpuTimeDefining、foregroundExit(被系统杀)。
9.3 符号化
- iOS:dSYM 上传到 Crashlytics / Sentry;App Store Connect 也接收。
- Android:mapping.txt 上传 Play Console + Crashlytics;R8 minify 后必须保留。
- Flutter:
flutter symbolize+app.ios.symbols/ Androidlibapp.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 依赖:flutterAAR。
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% 一致但首屏白屏)。
十一、法务与税务(Legal & Tax)
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 类)
- [ ] 灰度发布 + 监控回滚机制