你说要一个App的时候你需要哪些……
朋友:帮我做个App吧,想卖点东西
我:呃,你知道这坑有多大么
开始制作App前的准备工作
一个光鲜漂亮的App背后是一整套逻辑和业务,你看到的每样东西都是需要有支撑和相应的代价。
以下内容适用于那些有内容的App,包括而不限于文字、图片、商品等等。如果只是一个手电筒或者简单的计算器等工具类App,那么就能简化很多,但是下文的第四条还是需要的。
1. 域名
网址,是一个资源,比如文字、网页、图片、音频、视频在互联网上的唯一坐标。而网址的基础就是域名。比如简书的域名是jianshu.com
,他的首页是http://www.jianshu.com
,他的首页左边的图片的网址是http://upload.jianshu.io/daily_images/images/k3MvkAixRp4dqmmPexG2.jpg
。这里jianshu.io
是简书申请的另一个域名。使用不同的域名有特定的优缺点,这个以后再聊。
域名的基本组成是一串英文数字+一个顶级域后缀(其实支持中文,但不主流,略过)。顶级域包括.com
,.net
,.org
等等。另外是各个国家自己的顶级域,比如.cn
,.jp
,.uk
等,除了这些大家都知道的国家之外,一些缩写很好玩的国家域也渐渐流行。比如饿了么的域名.me
,其实是黑山共和国的。因为和英文的我拼写一样,被很多人作为个人域名注册。
域名是全球唯一的,由各个域名代理商负责对外注册。比如国内的万网(已被阿里云收购),国外的GoDaddy等。在这些网站上可以查询一个域名是否已被注册,如果没有,可以购买。各个注册商、各个顶级域名、域名的长短都关系着一个域名的价格。从几元钱到几百元不等。按一年计算,需要到期续费。域名注册的时候需要填写各种资料,其中电话和管理员邮箱最好不要乱填,因为关系到域名的所属。这些资料默认是公开的,可以使用whois工具查看域名注册资料。所以如果怕泄露的话可以专门注册一个邮箱。也可以付钱申请资料保密。
2. DNS(域名解析)
域名注册商一般会有个管理员后台,可以在上面设置域名对应的IP地址。IP地址是服务器在互联网上的唯一标识。DNS就是让申请的域名与服务器IP对应起来的协议。比如www.jianshu.com
对应的IP是120.132.92.21
。虽然域名注册商一般都有DNS提供,但一般不会很好。可以根据说明,在后台把域名解析权设置到外部的DNS服务器。推荐国内的DNSPod(已被腾讯收购)服务商,好用而免费。也可以收费享受更好的服务。
3. 备案
如果你的网站放在国内,那么备案是必需的。国内网站底部都写着备案信息。比如简书的沪ICP备11018329号-5
,其中折线以前的部分属于实体备案,即简书所属自然人或法人的信息,后面的5表示该实体下的第5个备案域名。
备案可以去工信部网站上自行申请,或者让网站提供商代备案。备案需要提供身份资料和网站信息资料,包括管理员本人去备案处拍照。
4. 苹果/微软/Google开发者账号
目前智能手机主流平台为Android、iOS和Windows Mobile。其中iOS和Windows Mobile是不允许用户自行安装App的,必须从手机应用市场下载。而Android默认情况下也需要从市场下载,只是可以关闭这个选项而已。也就是说,如果你的App需要交给用户,那么就需要注册对应的市场账号。
苹果开发者账号分为三种:个人账号、企业账号、企业InHouse账号。其中个人账号和企业账号均可以发布App到App Store,区别在企业账号允许多个人协作加入开发组,拥有发布权限。这两个账号每年费用99美元,在苹果开发者网站上注册购买续费。企业InHouse账号不允许发布App Store应用,只允许发布ipa格式的应用,可直接下载安装在iPhone/iPad中,用于企业内部使用。费用是299美元一年。这个账号的本意是给企业内部分发App使用,但是这个特征给了中国某些企业一个漏洞。比如可直接安装App的xx助手等等,这些App一般是手机助手使用企业证书重新打包的结果,不稳定也不保证安全。当企业证书过期后,App就无法启动,闪退。
Windows Mobile账号在微软开发者网站上购买,流程与苹果类似。允许发布Windows Mobile应用。
最特别的是Android。默认Google内置的是Google Play市场,发布应用也需要去Google开发者账号注册。但是因为国内行货手机是删除Play市场的,而且Android可以自由下载安装应用,所以这个账号非必需。不过如果你需要国际化的话,还是需要发布一个版本去Play的。国内大公司的应用,比如微信等都是有Play版本。
5. 其他许可证
有了ICP备案之后,网站有了准生证。但是其他业务许可也需要申请,比如你要开论坛需要特别申请,需要提供视频需要视听服务许可证等等。甚至如果你在网站上卖食物的话,还需要食品对应的许可。
6. 服务器
一个网站需要运行在服务器中。所以这个问题是考虑了域名之后第二个要考虑的问题。你的服务器放哪里?
在几年前,这个问题只有2个答案:服务器托管和虚拟主机。现在有了第三个答案:云计算平台。
虚拟主机在若干年前很流行,即在服务器中划出一部分硬盘给你,然后给你一个FTP账号,你可以上传内容。功能最少、性能最差,但是最便宜。是个人站点的选择。在购买前,需要详细了解虚拟主机提供商支持什么功能,是否满足你的应用。
服务器托管是以前中大型网站的不二选择。即自行购买机架式服务器,然后付费托管到专属的IDC机房中。由机房服务电源、网络等基础设施,然后自行管理服务器。
机房图云计算是近几年兴起的一种服务器模式。即由大型网络提供商提供一个完整的计算环境,而不需要开发者考虑机房运维。国内主流的包括阿里云、新浪SAE、ucloud等。
下图是阿里云中购买虚拟机的页面。自行选择各种配置,然后系统会给你一个隔离的服务器环境。而你不需要关心你的数据在哪个物理服务器上。
开始正式的App之旅
1. 注册和登录
一般来说有内容的App都有注册和登录的流程。近几年的趋势是注册流程极简化。但是出于某些原因,一般需要验证手机号,或者直接就是以手机号登录。那么你需要填一个坑:手机验证码。
手机验证码即服务器随机生成4-8位的数字,然后发给用户手机上,以验证用户的身份。通过程序自动发手机短信需要通过一个叫短信网关的设备。这个设备或接口由运营商。需要注意的点有这么几个:
- 网关很难申请,一般小应用也没有必要单独申请。一般由专门的短信提供商申请网关,然后再二次卖出来。这里推荐容联云通讯。价格6分钱一条。
- 短信发送一般只能发送验证码,不能发送商业信息和广告。否则网关会被封掉。(不要和我说银行为什么可以发)
- 验证码不能频繁的发送,否则会被认为是垃圾短信
- 不能保证100%到达,所以需要语音验证码作为备用。即打个电话到手机上,语音播报验证码,然后自动挂断。容联云通讯也支持语音验证码。
2. 信息的保存
App的内容不可能保存在手机上,所有信息都是在服务器上的。包括用户名、密码、图片、文章、多媒体文件。图片和文件一般是直接存在磁盘中,而其他信息都需要数据库。因为数据库会占用服务器所有资源,为保证性能,需要专门的服务器来运行。数据库可以使用服务器托管也可以使用云数据库。下图为阿里云的购买界面:
云数据库价格与数据库类型、内存、容量、是否使用固态硬盘有关,配置越高越贵。如果使用微软SQL Server,还需要软件授权费用。MySQL和PostgreSQL为免费软件。
3. 消息通知
如果用过新闻软件或者微信,那么对消息通知应该不会陌生。当你没在使用手机,但是App有新消息时,App会弹出提示框提示,同时图标右上角出现红色的数字提示。这个功能看上去很简单,但是其实是一个很大的话题。
【Android部分】:
Android程序一般来说在手机上会启动一个叫Service的程序,和服务器保持网络连接。定时咨询服务器:我有新消息么?如果有,那么则弹窗或者启动App。问题是手机上如果每个App都开Service的话,手机耗电量和网络流量将大幅增加。这个问题无解,Google提供的类似iOS的统一消息机制国内行货手机基本都不支持。所以只能这样了。如果有Android手机的话,可以在设置中查看运行中的应用,你会看到基本上每个App都有对应的服务在运行。
了解完常识之后,来看Service怎么搞。考虑到Android众多的品牌和系统版本,其实如何在手机后台折腾一个稳定运行,而又能及时接收消息的程序并不简单。因此各大厂商都提供了现成的开发包。比如百度推送、腾讯信鸽推送、极光推送等。原理是由开发包负责后台程序,以及和服务器的网络通讯。需要推送时,通知对应的百度、腾讯等服务器,然后开发包通知App。以上提到的几个开发包都有很多人使用,请自行选择。
【iOS部分】:
iOS系统不允许App在后台运行。如果按了Home键,那么App会进入后台,最多3分钟后,就进入冰冻状态,和退出没什么两样。后期iOS开了几个口子,允许特殊用途的App能够被后台唤醒。包括音乐播放和地理位置追踪。
那么问题来了,如何在有新消息时启动App。答案是APNS,Apple Push Notification Service。苹果为了iPhone的性能,在手机后台启动了一个类似于聊天软件的程序,和苹果服务器始终保持网络连接。当需要通知的时候,通知苹果服务器,由苹果统一下发消息到iPhone上。
【总结】
好了,注意到两个系统的推送流程中都提到通知服务器了么,也就是说,你需要在服务器上有个程序发送消息到推送服务器中。包括Apple,Google,百度,腾讯等第三方推送源。
为了你的App更有前途,你需要有的东西
以下内容并不是每个App都需要,但是成功的App或者网站基本上都配备了。
1. SSL证书
SSL证书用于网络通讯加密和域名/服务器身份验证。使用SSL证书之后,你的应用域名将从http改成https。例如百度目前同时支持http://www.baidu.com
和https://www.baidu.com
。第二个网址打开时,浏览器会提醒本次浏览行为是收到加密保护的。使用SSL证书的优点:
- 保护重要数据不被中间通信拦截、窃听。例如公共场所的WIFI。需要保护的内容包括用户隐私数据、密码、交易数据等。目前淘宝和支付宝都已经全站https化,百度也在进行中。
- 防止数据篡改。只要SSL证书是有效而真实的,数据在通信中间是无法被篡改的。而在国内,运营商,包括移动、电信、联通,均会在网页浏览过程中插入私活(很多人都有在手机看网页弹出奇怪广告的经历)。因此https化能够很大程度上防止这个现象。
当然,反过来,SSL证书也有缺点:
- 每条数据都需要加解密,加重了服务器的CPU负担
- 加密数据加大了中间过程,例如CDN的部署难度。淘宝的全站https化也是近期才完成。但是起码API应该https化
SSL证书需要向证书签发机构购买。不推荐国内半官方的CNNIC机构,因为Chrome和Firefox已经拉黑该机构证书。推荐向GeoTrust,VeriSign等机构购买,几百美元一年。国内的WoSign有免费SSL证书签发,可临时测试使用。
2. 专门的图片服务器(图床)
读图时代,漂亮的图片是App和网站重要的组成部分,有时候是唯一的部分(Instagram)。而图片的文件大小远大于文字。一张普通大小的风景图就有几百KB,因此图片的流量会占用大量的服务器带宽。而带宽是服务器使用中最大的一笔开销,远大于电费。因此有了专门的图片服务器来处理大量的图片。专业的人做专业的事情,云时代有专门的图片服务提供商。比如七牛。按照流量和容量计费。
3. 支付商家账号
想要卖东西的真正核心来了。卖东西一般有这么几个选项:
- 自建物流,货到付款
- 委托快递收款,货到付款
- 在线支付,快递
一般来说在线支付最方便。而市场占有率最大的就是支付宝、微信支付和银联支付。这三个支付都需要以企业名义申请商家账号,然后根据技术文档接入支付接口到App或网站中。用户付款成功后通知商家发货。几个商家的接入都有详细的文档和客服,这里说一下几个商家的区别。
【支付宝】
网页支付、客户端支付、手机网页支付、直接到款、担保付款等等,支付宝拥有最多的产品类型。需要一个个审核通过,根据自己需要选择吧。但是有个问题是支付宝网页在微信中是被屏蔽的,所以用共享商品页面到微信中时,用户在微信中支付流程是无法完成的。
【微信】
在微信中使用最顺畅,但是申请商家账号略纠结。申请时需要预先选择营业范围,这个范围是不能更改的。也就是说你既要卖手机,又要卖水果,就需要申请2个商家号。因为这两个营业范围不同。
【银联支付】
银联支付的手机版网页没有被微信屏蔽,所以通用性最高。但是问题在于银联账号普及型极低,支付时只能临时输入银行卡号等信息支付,略麻烦。另外银联稳定性不如前2家,有支付成功,但是没有通知商家的丢单现象。需要及时做好对账和补单操作。
4. 微信开放平台
微信开放平台提供以下功能,所以看自己需要接入。
- 分享到微信,包括朋友圈、好友
- 使用微信账号登录
- 微信支付
5. 微博开放平台
- 分享到微博
- 使用微博账号登录
6. QQ开放平台
- 分享到QQ空间
- 使用QQ账号登录
最后冰山坐镇
冰山镇楼当你看到冰山的时候,你的底下是10倍以上的坑需要填