24
个个个个 真真 真真真 真真 真真 真真@ 真真 真真wenbitm 2005 真真真2010 真真真真真真 真真真真真真 真真真 真真真真真真真真真真真真真真真真真真真真真真真真真真真

个人介绍

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

Page 1: 个人介绍

个人介绍

真名:王金生 花名:文壁 微博: @ 文壁 微信: wenbitm 2005 年毕业, 2010 年加入支付宝,

专注于移动应用开发。 目前主要负责支付宝客户端框架的技

术规划和相关的开发工作。

Page 2: 个人介绍

支付宝 iOS 客户端框架概要支付宝 文壁

Page 3: 个人介绍

大纲

挑战和目标1

基于框架的开发模式2

RPC3

稳定性4

Page 4: 个人介绍

1 挑战和目标

Page 5: 个人介绍

支付宝钱包产品架构

基础技术

框架

基础服务

工具

应用中心

TODO

个人应用中心

商户应用

账单

账单列表

交易详情

对账单

资产

银行卡

卡券

手机

基金

航旅

安全

安全等级

鉴权产品

账户管理

设备管理

Page 6: 个人介绍

现阶段面临的挑战

• 每月发布一个新版本• 变化频繁的业务能快速、

及时上线

团队规模

• 保证快速上线的同时需要保证产品的稳定性

快速上线

• 多团队并行开发高效

产品稳定

Page 7: 个人介绍

技术目标

• 业务并行开发• 提供必要的基础服务• Athrun (淘宝)

• 自动化测试框架

• 各个业务高度独立• 第三方业务快速接入

• 动态推送

• 客户端状态及性能监测• 客户端异常恢复• 异常上报

稳定 扩展

效率质量

Page 8: 个人介绍

2 基于框架的开发模式

Page 9: 个人介绍

Contex & App & Service

接口层

Context

实现层

AppManager ServiceManager

Native App

Lua AppWeb App

Service

Service

Service

Page 10: 个人介绍

Webapp ( HTML5)

WEB

Native

HTML CSS JavaScript

快捷支付 语音识别 通讯录 扫码

JSBridge

Page 11: 个人介绍

基于框架的开发模式

MVN 库Frameworks

客户端团队Tb

(业务 B )

基础技术组

框架/SDKframeworks

B ( 编译和开发 )B..framework( 连调 )

A( 编译开发 )A.framework

客户端团队Ta

(业务 A )获取 框架/ SDK

获取 框架/ SDK

SVNA-trunk

组内开发/测试

提交A.framework

打包平台

源代码

Frameworks+配置 钱包

动态推包平台

SVNtrunk

源代码

Page 12: 个人介绍

App 的开发步骤

创建工程• Xcode 模板插件

修改配置• App 配置• Service 配

编码 • 代码生成• 框架 /SDK

测试 • 自动化测试框架

Page 13: 个人介绍

3 RPC

Page 14: 个人介绍

RPC – 自动代码生成

Eclipse 插件

Page 15: 个人介绍

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];}

Page 16: 个人介绍

PRC

未登录? 已超时?

收到请求

前置拦截

执行请求

后置拦截

返回结果

登录

Page 17: 个人介绍

RPC – 优化

Keep-Alive

Gzip 压缩 压缩率: 50%+

ETag 缓存 ETag / If-None-Match / 304 命中率: 31.02% / 节省流量: 6096.47MB

批量请求 发送时多请求合并 接收时分次多次返回

Page 18: 个人介绍

4 稳定性

Page 19: 个人介绍

稳定性 – 运行状态监控

• PV• 闪退率• 请求追踪

Monitor

StorageServers

Page 20: 个人介绍

稳定性 – 异常恢复

NSProxy• [UIButton

addTarget:action:forControlEvents]

Replace Method• _originMethod =

class_replaceMethod([NSArray class], @selector(objectAtIndex:), (IMP)$$APArrayGetObjectAtIndex, "v@:");

Page 21: 个人介绍

自动埋点

测试环境:发送界面截图

线上环境:发送点击事件[UIApplication sendEvent:]

控制台

界面还原界面截图

Page 22: 个人介绍

自动埋点

Page 23: 个人介绍

总体架构

Page 24: 个人介绍

Thanks