存档

‘iOS’ 分类的存档

如此促销

2011年2月18日 没有评论

昨天,iapps.im发出一个推送通知,说高德导航今天将有优惠活动。今天在参加iOS Tech Talks的间隙,想起此事,特意去网站上看了一下,原来促销是这样的:

奖项设置(100%中奖):
一等奖 2 名: iPod Shuffle 一部,价值398元
二等奖 3 名: iPhone4 Bumper 一个,价值228元
三等奖 10 名: 赠送50元手机话费充值卡或返还50元现金(相当于半价优惠)
除一二三等奖得主外,活动期间购买的用户均为参与奖:直接返还20元现金。(相当于8折优惠)
微博转发另设幸运奖1名: 苹果原装线控耳机 一个,价值228元。
参与方式:
购买后,首先在iTunes的账户信息-购买记录里找到您的订单编号(订单编号是一个类似M1VX5SXNZ7这样的代码。),然后请在iTunes里用“客户评价”的形式附上订单编号后5位,例如“ SXNZ7 ”,此举仅仅为了辅助核实购买的真实性,因只有购买后才能做“客户评价”。最后写信到此邮箱 :???@autonavi.com ,邮件标题为“爱Apps活动”,附上您的姓名、电话、支付宝帐号、iTunes评论人昵称邮件内请用附件的形式提供iTunes的订单截图(见下图范例)

奖项设置(100%中奖):一等奖 2 名: iPod Shuffle 一部,价值398元二等奖 3 名: iPhone4 Bumper 一个,价值228元三等奖 10 名: 赠送50元手机话费充值卡或返还50元现金(相当于半价优惠)除一二三等奖得主外,活动期间购买的用户均为参与奖:直接返还20元现金。(相当于8折优惠)微博转发另设幸运奖1名: 苹果原装线控耳机 一个,价值228元。
参与方式:购买后,首先在iTunes的账户信息-购买记录里找到您的订单编号(订单编号是一个类似M1VX5SXNZ7这样的代码。),然后请在iTunes里用“客户评价”的形式附上订单编号后5位,例如“ SXNZ7 ”,此举仅仅为了辅助核实购买的真实性,因只有购买后才能做“客户评价”。最后写信到此邮箱 :???@autonavi.com ,邮件标题为“爱Apps活动”,附上您的姓名、电话、支付宝帐号、iTunes评论人昵称邮件内请用附件的形式提供iTunes的订单截图

看了这个活动,我首先想到苹果前几天更新的开发者政策:

If you attempt to cheat the system (for example, by trying to trick the review process, steal data from users, copy another developer’s work, or manipulate the ratings) your apps will be removed from the store and you will be expelled from the developer program.

这个活动会不会被认为是操纵评价?

先看看评价情况。打开iTunes,粗略看了一下,最近的14页上绝大部分是今天参加这个活动的评价,估计有120左右,其中1星一个,3星3个,其他都是4或5星(现在还不断有新评价,就不再统计了)。而这个活动之前,每天的评价大概是几条到十几条,就连2月9日版本更新的那天才23条。

我觉得,如果苹果认为这是操纵评价,是有理由的。可是如果惩罚的话,应用将下架,已经购买的用户将不能升级,利益将不能保证。

本来我在这个版本刚刚发布的时候,还给了一个不错的评价,写了几条建议。但这个活动为了促销而不关心用户利益,我将我的评级改为1星,并加了一段话:

对你们今天的促销方式很不满

我并不在乎那20块钱,曾经遇到过其他应用买了之后大幅降价的,也有超过20块钱的。主要是觉得这种方式不可取。就在前几天,苹果更新了开发者协议,操纵评价的应用将被下架,开发者将被除名。如果这个事情被认为是操纵评价而导致这个程序在iTunes消失,*所有*用户将得不到升级服务!你们不能用这种对用户不负责的方式促销!!

在iapps.im活动介绍页面上,也留了类似的质疑:

2011年02月18日于20:47

本来在这个版本刚出来的时候感觉不错,还写了一些建议。刚刚更新了iTunes里的评价,现在已经将星级改为1星了。

我并不在乎那20块钱,曾经遇到过其他应用买了之后大幅降价的,也有超过20块钱的。主要是觉得这种方式不可取。就在前几天,苹果更新了开发者协议,操纵评价的应用将被下架,开发者将被除名。如果这个事情被认为是操纵评价而导致这个程序在iTunes消失,*所有*用户将得不到升级服务!高德不能用这种对用户不负责的方式促销

几分钟后,我的留言被删除了

qiqiji (ID:167)2011年02月18日于20:54

首先很抱歉我移除了您的评论。

再次解释一下,关于客户评价一事,仅仅为了辅助核实购买的真实性,因只有购买后才能做“客户评价”

我们1没有要求客户给几星,2没有要求用户写评价内容,我们只要求他留5个字母

而事实是,1星,3星,4星,都有。

我的回复:

2011年02月18日于21:53

不用抱歉,你们的网站,自然有权利做任何事情。

我也在关注iOS,知道之前有人因为一些原因被苹果惩罚很严重,而申诉无效。我觉得高德做得不错,不想苹果刚刚公布新政策,它就撞在枪口上。这种事情上,苹果几乎是不听辩解的。而刚刚看了一下评价,今天已经是往常的十几倍数量了,不知道苹果怎么看

目前就是这样,如果有后续的情况,我再更新这里。

分类: iOS 标签:

图片的alpha算法

2011年1月13日 没有评论

不少程序中,都使用半透明的效果。虽然现有的api或者控件都提供这个功能,但某些情况下,还需要了解一下alpha算法。

假设2张图片为A和B,合成图片为C,以RGBA都是8bit为例。在PNG-24下,alpha 255表示不透明,0表示全透明。

C的每个像素RGB值是分别计算的。那么对于A和B的每一个像素,目标像素RGB值为

Rc = (Ra*alpha + Rb*(255-alpha))/255

Gc = (Ga*alpha + Gb*(255-alpha))/255

Bc = (Ba*alpha + Bb*(255-alpha))/255

在我的上一个iPhone应用里,要模拟iPhone界面。在iPhone锁定屏幕里,最后面是用户设置的背景,前面有若干alpha值不同的控件。如果要使用控件做到完整的模拟,因为不知道alpha值,要不断调整测试(并且不同位置的alpha值不同)。我想到一个办法就是用一张全屏图片来做出所有控件背景效果,然后在上面用背景透明的UILabel显示文字。

如何得到这张需要的图片呢?看上面的公式,如果我用全白RGB(255,255,255)和全黑RGB(0,0,0)做背景图片,就可以推导出alpha的值了。

alpha = 255 + R(black) – R(white)

下面的事情很简单了,做一个全白色图片和全黑色图片,分别设置成背景,然后截屏。

IMG_0578 IMG_0579

写个程序,用上面方法计算叠加图片的RGBA:

overlay

最后,用图片编辑工具将不需要的文字和滑块修改掉,就得到最终图片。在IB里,放两个重叠在一起的UIImage,后面的放正常背景图片,前面使用刚刚生成的图片,背景透明,最前面是UILabel的文字和UISlider滑块,就得到可以和iPhone以假乱真的界面。(下面的图片没有调整文字)

overlayoverlay1

分类: Android, iOS 标签:

定制UISlider

2011年1月13日 没有评论

刚刚向App Store提交了一个小应用,做了一个模拟来电的界面,里面用UISlider实现了slide to answer。

搜索slide to unlock,可以找到不少实现的代码,比如在这里提到的SlideToCancel。我做的就是基于这个代码。

直接运行这个代码,会发现可以看到UISlider的滑轨(track)。可以通过setMinimumTrackImage / setMaximumTrackImage来修改。但这里如果把nil作为参数,并不是表示不显示,而是使用缺省的。可以用一个透明的图片传给这两个函数,就“隐藏”track了。

随着滑块向右滑动,下面的slide to cancel会逐渐消隐,这是通过设置label的alpha实现的。当滑动到中间的某个位置时,手离开屏幕,滑块就会回到左侧,但这个代码里忘记了将label的alpha设置为1。可以在sliderUp中添加一个设置alpha为1的animation。

这个代码还有个问题,就是当滑动到中间的时候手指一动到UISlider之外再离开,滑块就不会回到最左侧。解决办法也很简单,把touch up outside同样指向sliderUp就可以了。

这个代码是用代码生成UISlider,但如果使用IB的话,是不能调整slider的高度,会造成即使thumb很大,可以拖拽的区域还是很小。要解决这个问题,需要自己继承UISlider,实现pointInside:

– (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent*)event {
CGRect bounds = self.bounds;
bounds = CGRectInset(bounds, 0, (23.0-SIZE_Y)/2);
return CGRectContainsPoint(bounds, point);
}

UISlider的缺省高度是23,通过CGRectInset调整到SIZE_Y大小。

另外,对于slide to cancel几个字符的处理,这里是按照字节拆分的,不能用在中文上。如果使用一个图片叠加在字符上,通过设置图片的alpha来实现search light效果,就不会收文字编码限制了,即使是后面是图片也没有问题。

分类: iOS 标签:

手机应用的信任关系

2010年10月25日 没有评论

前几天参加了支付和移动互联网峰会,写了一些想法。这几天还在思考一个问题:如何才能信任一个手机应用呢?

对于基于网页的应用,这个问题比较好解决。我们在浏览器里打开某网站地址,可以通过检查URL是否正确,对于https的地址,还可以查看安全证书。如果这些都没有问题,就可以确认访问到的网站是我们希望的,而不是李鬼。

对于应用程序,有数字签名来保证一个程序是某开发者发布且没有被修改过。当确认签名没有问题的时候,就可以放心使用了。

看看上面两种情况,为什么能信任一个以前没有接触过的网页或应用呢?我觉得这是信任的传递过程。对于网页应用,首先,我信任使用的浏览器,才确定浏览器展示给我的URL和安全证书是网页本身的;我信任安全证书签发机构,才信任证书的使用者。这是把对浏览器和证书签发机构的信任传递到网页上。对于应用程序,我信任操作系统,才确定展示给我的数字签名的确是应用本身的;我信任数字签名签发机构,才信签名的使用者。这是把对操作系统和数字签名签发机构的信任传递到应用上。

到了手机上,对于网页,没有什么差别,但对于应用来说,情况有所不同。

看看Android的情况。每个应用发布时都需要签名,但这个签名是应用开发者自己创建的签名,没有第三方机构签发。手机上的操作系统还是可以信任的,但操作系统并不能把应用的签名情况展示给用户。

单单对于一个应用本身,我无法确认是不是声称的开发者发布的。当我要找某银行的应用时,Google market上的应用都不一定可靠,因为任何人都可以发布一个声称是银行的应用。Google在发布环境基本没有审察,即使是钓鱼也会在Market上被用户看到。这条路无法建立信任,我通常会到银行的官方网站,通过其提供的链接来下载应用。这相当与把对网站的信任传递到应用上。

在iPhone上,情况好一些。因为app store有发布前的审察机制,肯定不能100%过滤,但会提高钓鱼者成本。对于银行、交易相关应用,还是小心一些为好,最好也通过官方网站链接访问。

应用内支付IAP (In-App Purchase),问题就更大了。信任链在应用这就已经断掉了,应用的身份无法信任,我怎么能信任这个应用展示给我的支付界面呢?看到Paypal、Alipay都在做这个工作,但就目前的情况来说,我不看好。对于钓鱼,恐怕都是事后处理,而不能在之前防范。有用户被钓鱼,自然不敢使用;有防范意识的用户,知道钓鱼程序无法识别的话,可能会拒绝所有程序。这样,这个市场随着一些用户被钓鱼和一些用户增强防范意识,会变得越来越小。

App store也有IAP,但使用的是自己的支付手段,钓鱼者最多得到用户的app store帐号或者让用户用这个帐号购买一些东西,但交易后如果用户发现,可以向app store申诉。这样,钓鱼者即使钓鱼成功也未必能有收益,买卖就不划算了。这个方式并不是建立信任链,而是通过控制支付达到的。

但第三方支付就不这么容易了。Alipay似乎可以在其界面输入银行帐号密码来直接从银行转帐。钓鱼这可以仿造支付界面,骗取银行信息。对Alipay来说,他的任何代码和服务器都没有参与这个行为,怎么能找他负责呢?银行也没有看到有这笔交易,除非用户在输入信息后立即发现问题,否则银行也无法发现。

即使Alipay使用了淘宝的收货后确认付款的机制,也是有问题的,原因仍然是在于对应用没有信任。不像网页上,操作都是在淘宝/支付宝的域名下完成,手机上的交易是在一个没有信任关系的应用里进行,我并不知道我的帐号信息发给alipay服务器的同时是否还被这个应用留了一份。不过,如果使用收货后确认付款的机制加上OTP (one time password),应该就会安全了,因为即使应用留了一份帐号信息,也是无效的。

总之,由于手机系统的原因,信任不能传递到应用,仅仅在手机应用本身的支付是不安全的,要做的话,需要在手机之外打些补丁。

分类: Android, iOS 标签: ,

iOS学习笔记——与Android比较

2010年9月8日 没有评论

用了一段时间iTouch和G1,说说比较这两个系统。

1. 用户感受上iOS比Android流畅,或许是G1是Android手机里配置比较低的原因,但查了一下,iTouch的配置也不是很高。流畅主要是体现在切换屏幕,滚动等操作上,很及时响应操作,效果也没有停滞的感觉。

2. 开发环境中,感觉Interface builder比Eclipse中的界面编辑器好用多了。用Eclipse,我基本上都是手工改xml,很少用所谓的图形化编辑器的,我有两点受不了:一是界面编辑器生成的xml代码,格式相当混乱,不换行,甚至把几个控件放在同一行;二是在里面托拽一个控件,有时会产生不可预知的结果,控件相对位置并不是所见即所得,设计与运行有差异。

3. 从app看,iOS普遍比Android的应用大。iOS上app动辄几十兆,有的甚至几百兆,而Android上app大部分还在几百K到几兆。这或许与两个系统的应用机制有关。在下载方面:iOS的app store可以在手机和电脑上下载,而较大的应用限制在只能通过电脑下载。在这样的方式下,文件大小不是个大问题。而Android的market,只能通过手机内置的程序下载,过大的程序下载起来就很不方便。在存储方面:iOS的存储内置,8G/16G/32G/64G,都可以作为存储空间。Android的应用在2.2之前,只能存在机内,目前主流机型都是几百兆,这里还要扣除系统占用的部分,之后剩余就更少了。2.2之后,虽然引入了存在SD卡上的方式,但有限制,某些应用仍然不能存在SD卡上,比如需要开机启动的程序。

应用的大小并不直接说明问题,但可以有更大的应用,会使开发者有更大发挥的空间。对于游戏和资料类的应用来说尤其如此。游戏可以增加更精美的画面,资料类应用可以有更丰富内容,甚至加入声音、视频。

4. 界面上,iOS更加漂亮,统一。Android上一水是灰色的按钮,有点像Windows 3.1。Apple有用户界面的指导,而我没有看到Android上有类似的文件,这个指导使不同应用遵循同样的标准设计,用户的学习成本大大降低了。而Android上的应用则是百花齐放,需要用户适应不同的程序。

以上是最近一段时间对iOS和Android的想法,似乎都是iOS的有点和Android的不足,或许还是因为做Android时间长些,更加了解。

不知道Android 3.0能是一个什么样子,我最期望的有三点:一是更好的界面,要让普通用户觉得漂亮,仅仅是靠内秀吸引geek是不会有大发展的;二是如何统一机内flash和SD卡,以及调整应用下载方式,使上百兆大应用成为可能,market里都是几兆的工具类应用不是健全的market;三是对开发者的后台再完善些,现在的后台做的有些简陋,完全不是Google的风格,另外国内也无法开通应用收费功能。

分类: Android, iOS 标签: ,

iOS学习笔记——准备

2010年8月29日 没有评论

最近开始看iOS相关的东西,打算一边看,一边在这里写一些东西,主要是一些学习的笔记。既然是笔记,就和教程不一样,这不是完整的学习资料。我一直觉得编程语言最好的资料就是官方的文档,其他也就是辅助。

这里的准备包括软件和硬件,要是有足够的学习能力,仅仅看文档就能理解内容的话,那就没有什么要特别准备的,能上网,到官方网站看资料就好了。这里说说像我这样需要一边看资料一边动手的人要准备些什么。

硬件

硬件在学习阶段不是必须的,但如果有的话,能更好理解iOS和开发环境。

  1. 运行Mac OS的苹果电脑。如果资金不是很紧张,建议买一台。开发环境Xcode仅能运行于Mac系统。并且iOS是基于Mac OS修改而来的,他们有很多共同的理念,用Mac OS有助于了解iOS。如果实在不想买,可以考虑在PC上装一个Mac。但Mac支持的硬件远不如Windows多,这就是说有相当一部分PC无法完美运行Mac。关于如何在PC上装Mac,感兴趣的话可以搜索关键词“黑苹果”。
  2. 一个运行iOS的设备。如果不购买苹果的开发帐号,是不能在iOS上运行自己开发的程序。但我觉得有台iPhone/iTouch/iPad,体验一下其他开发者的程序,分析一下哪里做得好,哪里不足,对自己的开发很有好处。

帐号

苹果免费的开发帐号可以用任意email直接注册,注册后可以访问大部分资源。比如,读开发文档,下载SDK,下载WWDC视频等。

收费的开发帐号价格是$99/年,在免费帐号的基础上增加了下载beta版SDK、真机调试、App store发布等权限。

如果仅仅是学习,可以先注册一个免费帐号,等到需要时再付费。

软件

iOS的开发是使用苹果的SDK,开发环境为Xcode。开发的SDK可以通过免费开发帐号在苹果网站下载: https://developer.apple.com/iphone/index.action#downloads

SDK的目前是2.45G,由于需要认证,很多下载软件不能使用。如果网速比较慢又容易断,下载将是一个很痛苦的过程。

如果你有一台网络速度还可以的服务器,可以考虑先将SDK下载到服务器,然后可以使用下载工具下载。

比如,我使用此博客的服务器,在命令行用lynx访问apple,选择下载,这个下载过程比较稳定,速度是我宽带的若干倍。下载后的内容放在服务器的http服务下,就可以使用断点续传工具下载了。

教程

首先是官方网站,上面东西很多,很全。

第三方内容,推荐斯坦福的iPhone课程CS 193P:

http://deimos3.apple.com/WebObjects/Core.woa/Feed/itunes.stanford.edu-dz.4331559337.04331559339

分类: iOS 标签: