Upload
aline-rodriquez
View
48
Download
0
Embed Size (px)
DESCRIPTION
个人介绍. 真名:王金生 花名:文壁 微博: @ 文壁 微信: wenbitm 2 005 年毕业, 2010 年加入支付宝,专注于移动应用开发。 目前主要负责支付宝客户端框架的技术规划和相关的开发工作。. 支付 宝 iOS 客户端框架概要. 支付宝 文壁. 大纲. 1. 挑战和目标. 2. 基于框架的开发模式. 3. RPC. 4. 稳定性. 1. 挑战和目标. 支付宝钱包产品架构. 现阶段面临的挑战. 技术目标. 2. 基于框架的开发模式. Contex & App & Service. 接口层. Context. 实现层. - PowerPoint PPT Presentation
Citation preview
个人介绍
真名:王金生 花名:文壁 微博: @ 文壁 微信: wenbitm 2005 年毕业, 2010 年加入支付宝,
专注于移动应用开发。 目前主要负责支付宝客户端框架的技
术规划和相关的开发工作。
支付宝 iOS 客户端框架概要支付宝 文壁
大纲
挑战和目标1
基于框架的开发模式2
RPC3
稳定性4
1 挑战和目标
支付宝钱包产品架构
基础技术
框架
基础服务
工具
应用中心
TODO
个人应用中心
商户应用
账单
账单列表
交易详情
对账单
资产
银行卡
卡券
手机
基金
航旅
安全
安全等级
鉴权产品
账户管理
设备管理
现阶段面临的挑战
• 每月发布一个新版本• 变化频繁的业务能快速、
及时上线
团队规模
• 保证快速上线的同时需要保证产品的稳定性
快速上线
• 多团队并行开发高效
产品稳定
技术目标
• 业务并行开发• 提供必要的基础服务• Athrun (淘宝)
• 自动化测试框架
• 各个业务高度独立• 第三方业务快速接入
• 动态推送
• 客户端状态及性能监测• 客户端异常恢复• 异常上报
稳定 扩展
效率质量
2 基于框架的开发模式
Contex & App & Service
接口层
Context
实现层
AppManager ServiceManager
Native App
Lua AppWeb App
Service
Service
Service
Webapp ( HTML5)
WEB
Native
HTML CSS JavaScript
快捷支付 语音识别 通讯录 扫码
JSBridge
基于框架的开发模式
MVN 库Frameworks
客户端团队Tb
(业务 B )
基础技术组
框架/SDKframeworks
B ( 编译和开发 )B..framework( 连调 )
A( 编译开发 )A.framework
客户端团队Ta
(业务 A )获取 框架/ SDK
获取 框架/ SDK
SVNA-trunk
组内开发/测试
提交A.framework
打包平台
源代码
Frameworks+配置 钱包
动态推包平台
SVNtrunk
源代码
App 的开发步骤
创建工程• Xcode 模板插件
修改配置• App 配置• Service 配
置
编码 • 代码生成• 框架 /SDK
测试 • 自动化测试框架
3 RPC
RPC – 自动代码生成
Eclipse 插件
RPC – 示例代码
Account *account = [self currentAccount];AccountService *service = [context findServiceById:@”account”];[service queryBalance:account];
[AsyncCaller callBlock: ^{Account *account = [self currentAccount]; AccountService *service = [context findServiceById:@”account”]; [service queryBalance:account];
}completion: ^{ [self updateUI];}
PRC
未登录? 已超时?
收到请求
前置拦截
执行请求
后置拦截
返回结果
登录
RPC – 优化
Keep-Alive
Gzip 压缩 压缩率: 50%+
ETag 缓存 ETag / If-None-Match / 304 命中率: 31.02% / 节省流量: 6096.47MB
批量请求 发送时多请求合并 接收时分次多次返回
4 稳定性
稳定性 – 运行状态监控
• PV• 闪退率• 请求追踪
Monitor
StorageServers
稳定性 – 异常恢复
NSProxy• [UIButton
addTarget:action:forControlEvents]
Replace Method• _originMethod =
class_replaceMethod([NSArray class], @selector(objectAtIndex:), (IMP)$$APArrayGetObjectAtIndex, "v@:");
自动埋点
测试环境:发送界面截图
线上环境:发送点击事件[UIApplication sendEvent:]
控制台
界面还原界面截图
自动埋点
总体架构
Thanks