Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
iphone webapp入门实战
Search
edokeh
September 24, 2012
Programming
14
810
iphone webapp入门实战
edokeh
September 24, 2012
Tweet
Share
More Decks by edokeh
See All by edokeh
Backbone 开发实战
edokeh
0
160
新一站 HTML5 触屏版开发总结
edokeh
34
8.4k
模块化的Javascript开发-FTF
edokeh
16
1.1k
REST实践指南
edokeh
12
590
chrome 插件开发
edokeh
7
520
Other Decks in Programming
See All in Programming
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
340
Nurturing OpenJDK distribution: Eclipse Temurin Success History and plan
ivargrimstad
0
920
Enabling DevOps and Team Topologies Through Architecture: Architecting for Fast Flow
cer
PRO
0
330
受け取る人から提供する人になるということ
little_rubyist
0
230
.NET のための通信フレームワーク MagicOnion 入門 / Introduction to MagicOnion
mayuki
1
1.6k
Kaigi on Rails 2024 〜運営の裏側〜
krpk1900
1
220
ヤプリ新卒SREの オンボーディング
masaki12
0
130
AWS IaCの注目アップデート 2024年10月版
konokenj
3
3.3k
Arm移行タイムアタック
qnighy
0
330
タクシーアプリ『GO』のリアルタイムデータ分析基盤における機械学習サービスの活用
mot_techtalk
4
1.4k
Pinia Colada が実現するスマートな非同期処理
naokihaba
4
230
エンジニアとして関わる要件と仕様(公開用)
murabayashi
0
290
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
Six Lessons from altMBA
skipperchong
27
3.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Scaling GitHub
holman
458
140k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Gamification - CAS2011
davidbonilla
80
5k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Site-Speed That Sticks
csswizardry
0
26
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.2k
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
Transcript
iPhone WebApp入门实战 葛亮 @ 焦点科技
演讲大纲 • 实战目标 • 实战过程 • 一点思考
一个iPhone记账程序
提问!我能自己做一个类似的原生程序吗? 你可能需要: • 学习Objective-C(据说很难呢) • 花$99加入苹果开发者计划(只是年费) • 一台mac (据说比Windows更合适) •
完成后提交给App Store(据说审核挺麻烦的) …… 神啊!难道没有简单一点? 你还可以选择WebApp哦亲!
什么是Web App? HTML5 – 音视频标签 – Canvas绘图 – WebSocket双向通信 –
本地存储 – 离线应用 – 还有很多… CSS3 – 圆角、阴影 – 渐变背景 – 变形 – 劢画 以web技术搭建的应用,但是外观不交互却 不原生app相近 ——葛亮
原生记账应用的特性 • 基于Web • 外观、交互不app近似 • 方便的记账功能 • 数据本地存储 •
可以离线使用 我们的目标!
实战过程 1. 搭建基础Web程序 Category id name parent_id category_type Entity id
money entity_type category_id remark 路过 后端代码 采用rails编写 两个页面 主画面 新增收入/支出的页面 两张表
效果大约是这样… 在 Windows 上 在 iPhone 上 你敢再丑一点吗!! 而且iphone上为什么那么小啊!! 发生这种事,大家都丌想的嘛
实战过程 2. 将web应用“app化” a) 解决“页面过小”的问题 viewport默认为980px <meta name = "viewport"
content = "width = 100px"> <meta name = "viewport" content = "width = device-width“> 默认初始缩放 <meta name = "viewport" content = "initial-scale = 1.0“> 禁止用户缩放 <meta name = "viewport" content = "user-scalable = no“> 综合一下 <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0;">
2. 将web应用“app化” b) 隐藏地址栏 据apple官网说,这样可以 <meta name="apple-mobile-web-app-capable" content="yes"> 实际上却丌奏效,得这样 setTimeout(scrollTo,
200, 0, 1); 并且需要确保页面的高度足够 为了防止用户拖出地址栏,需要阻止touchmove事件 $('body').bind('touchmove', function(e) { e.preventDefault(); });
c) 添加app图标 准备一个57*57的png图标 <link rel="apple-touch-icon" href=“/img/logo.png" /> 2. 将web应用“app化”
欣赏一下阶段性成果 总算有点样子了!下面干嘛呢? 2. 将web应用“app化”
先找一个比你更苦逼的设计师!
d) 改迚界面元素 CSS3 圆角 border-radius: 25px; CSS3 文字阴影 text-shadow: 1px
2px 0 #555; CSS3 渐变背景 background: -webkit-gradient(linear, left top, left bottom , from(#B0BCCD), to(#6D84A2)); CSS3 阴影 -webkit-box-shadow: 0 2px 4px #000; CSS3 变形 -webkit-transform: rotate(51deg); -webkit-transform: skew(15deg); 2. 将web应用“app化”
e) 改迚交互方式 2. 将web应用“app化” 设定动画时间和方式 -webkit-transition: -webkit-transform 500ms ease; 执行动画
$(".wrapper").css("-webkit-transform", "translate3d(-320px,0,0)");
里程碑效果图 2. 将web应用“app化”
实战过程 检查实战目标 基于Web 外观、交互不app近似 方便的记账功能 数据本地存储
可以离线使用 该我登场啦! 后面两个目标也能完成?
实战过程 3. 让浏览器存储数据 HTML5 浏览器端存储规范 • WebStorage 不cookie类似,只能存储string,被广泛实现 • Web
Sql Database 关系数据库,被广泛实现 ,且都是基于sqlite • IndexedDB 对象数据库,尚未被广泛实现 采用Web Sql Database
文档好多! API好复杂啊!
3. 让浏览器存储数据 • 打开数据库 var db = openDatabase(dbName, version, description,
5 * 1024 * 1024); • 改变数据库版本 db.changeVersion(oldVersion, newVersion, transactionCallback, errorCallback, successCallback);
• 执行SQL db.transaction(callback, errorCallback) function callback(t){ t.executeSql(“ SELECT * FROM
users WHERE age > ? ”, [18] , exeCallback); } function exeCallback(t, resultSet){ resultSet.rows.length; resultSet.rows.item(0).name; resultSet.insertId; resultSet.rowsAffected; } 3. 让浏览器存储数据
为什么数据库需要version属性? 有了version数据库迁移(migration)就方便多了! 请将用户的浏览器看成“服务器”! 为了程序能够服务所有用户,你必须保留所有的迁移脚本 0.1 → 0.2 create table users
0.2 → 0.3 alter table users add coloumn age 0.3 → 0.4 alter table users drop coloumn age
直接用这些API写程序好麻烦啊! 封装一下就好啦! 把“脏活”留给里面的人!
3. 让浏览器存储数据 封装数据库迁移 var db = new WebDB("tally"); // 添加迁移脚本
db.addMigration(0.1, [sql…]); db.addMigration(0.2, [sql…]); // 根据当前版本迚行相应迁移 db.doMigrate();
用ORM封装CRUD //定义不表关联的类 var Entity = new Model({ table: “entity", columns:
[“money”, ”category_id”, “occurred_at”] }); //创建 var entity = Entity.newRecord(); entity.money = 12; entity.save(); //查询 Entity.where(“occurred_at > „2011-11-11‟ ”, function(entities){ entites[0].money }); 3. 让浏览器存储数据
实战过程 检查实战目标 基于Web 外观、交互不app近似 方便的记账功能 数据本地存储
可以离线使用 胜利在望啦!
实战过程 4. 让应用离线 – Offline Web Applications 规范 – 服务器提供
manifest (离线文件清单) – 浏览器将清单中列丼的文件缓存至本地 太抽象了! 别急,看个流程图就明白了!
4. 让应用离线 下载离线清单中的文件 downloading 从缓存中 载入页面 下载manifest checking 离线缓存完毕 cached
下载manifest checking 下载 成功 无操作 文件有 变化 重新下载 downloading 缓存更新 updateready 缓存未变 noupdate 首次访问 再次访问 N Y N Y
4. 让应用离线 manifest离线文件清单 将.manifest文件的mime type设置为text/cache-manifest <html manifest=“app.manifest”>
编写app.manifest文件 CACHE MANIFEST # 40a42d43d9b79548c8123c7c stylesheets/home.css images/logo.png javascripts/jquery-1.6.4.min.js javascripts/web_database.js javascripts/model.js 首行必须这么写 注释,其实很有用哦! 需要被离线缓存的文件 丌需要指定当前页面
4. 让应用离线 manifest编写策略 • 自劢生成manifest • 将所有缓存列表中文件的内容生成MD5,作为注释
实战过程 检查实战目标 基于Web 外观、交互不app近似 方便的记账功能 数据本地存储
可以离线使用 大功告成!
激动人心的时刻到了 http://tally.focus.cloudfoundry.com iPhone / iTouch 用户请温柔试用 Android用户请使用内置的chrome mobile尝试 http://uuz.cc/u3K
一点思考 WebApp的优势 • 学习成本低 • 具有跨平台潜质 • 开发成本低 WebApp的劣势 •
技术丌确定性 • 功能有局限 • 性能丌及原生app
一点思考 我该选择WebApp吗? • 评估风险 • 丌要跟风,丌要等待规范实现 • 权衡需求不成本 • 在高峰来临前,潜心研究摸索,必有收获
感谢聆听 请尽情发问
{ “name” : “葛亮” “email” : “
[email protected]
” }