之前一个页面上用到UITextView用于输入留言,发现功能不够完善,今天加强了一下,主要有:
1.往IB里加的时候默认是没有边框的,感觉不怎么好,google了一下,发现这位仁兄的文章(http://blog.devedup.com/index.php/2010/06/06/iphone-uitextview-with-rounded-edges-to-look-like-a-uitextfield/),感谢之,主要思路就是加个TextField当背景,再用改文本的方法修改其高度,效果如下:
2.TextView默认是不会自动出现光标的,把它变成第一响应者就OK了
[myTextView becomeFirstResponder];
3.行数的限制,暂时未找到方法,只能先不限制行数,让它自动垂直滚动...
第一篇iPhone的文章,先写这么多,来日方长,慢慢磨
在xml中定义布局时可能定义的很多组件的属性是相同的,此时可以使用style来减少代码量,以下是一个简单的例子:
(1)在res\values下创建style.xml文件来存放样式:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="myStyle_Text1">
<item name="android:textSize">25sp</item>
<item name="android:textColor">#80FF00</item>
</style>
<style name="myStyle_Text2">
<item name="android:textSize">18sp</item>"
<item name="android:textColor">#0C688E</item>
</style>
</resources>
(2)在布局文件main.xml中使用style:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/TextView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical|center_horizontal"
android:text="应用myStyle_Text1"
/>
<TextView
android:id="@+id/TextView02"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical|center_horizontal"
android:text="应用myStyle_Text2"
/>
</LinearLayout>
具体代码见附件
今天,听了支付宝支付和移动互联网峰会,会上介绍了支付宝的手机支付。会上提到的支付方式,是与Apple的IAP (In-App Purchase) 类似,在应用中通过调用支付宝的接口来实现支付,购买游戏中道具或关卡、以及应用中的某些功能。
演示这个支付方式的程序,是运行在Android平台的,但这是Google Android market明文禁止的。前些天我还听说有Android开发者因为在程序中使用了Paypal支付方式而被Google suspend了。这样说来,使用这种支付方式就不能在Google Android market上发布了。不过,要是在其他market发布,现在没听说哪个非Google的market能占绝对的市场份额,开发者就要忙于在各个 market发布了。
在介绍过程中,我还想到另一个问题:如何防钓鱼。开始时我只是觉得或许会有人钓鱼,窃取用户资料。在会议结束后,恰好碰到一个阿里巴巴的人,和他讨 论了这个问题,他也没说出什么好的解决办法,更多的是事后补救。在回来的路上,我又仔细想了想,这个问题影响将很大,不仅仅是被钓鱼者,也会使有防范意识 的人不敢使用这种支付方式。
先来看看正常的支付过程:某个应用中,有需要付费的项目,用户点击后,进入到支付宝界面,用户在支付宝界面中输入用户帐号密码,成功后返回应用。
那么,钓鱼的应用也可以在界面上模仿这个过程,只不过不使用支付宝界面,而是用自己的界面模拟支付宝。在获取用户资料后,发给钓鱼服务器。
电脑上,可以通过安全控件防止监听键盘,通过检查url来防止把账户信息输入到不信任的服务器上。但对于手机用户来说,并不知道这个支付界面的到底是谁的,支付宝还是钓鱼程序,因为支付界面都是由一个未必通过认证的程序展示出来的。
某个界面,并没有url可以让用户检查。虽然有package的名字,但对用户不可见,并且这也是可以模仿的。
在支付界面显示预留信息,或者短信认证,也不是安全的办法。首先,要显示预留信息,就要求用户先登录,之后才能判断。这时即使发现问题,用户帐号也 已经泄露了。另外,钓鱼程序可以通过夹在用户和支付宝之间,做一个代理来获取帐号信息,骗过用户。这里不存在电脑上MITM会遇到的证书错误问题。
其他防钓鱼的方法,我能想到的就是在程序之外验证,比如OTP (one time password),这肯定能保护帐号,但需要额外设备,有成本。
这个认证是一个双向认证,用户要认证服务器是正确的服务器,而服务器也要认证用户身份。在电脑上,这个过程有CA机构签发证书保证,但手机上缺少了这个角色,就无法认证服务提供者。OTP可以说是另一个认证服务器的方式,来保证服务器的身份。
或者,如果确认程序本身是没有恶意的,也可以。但目前的Google market没有审核机制,这个无法保证。Apple的app store也有IAP方式,但因为程序是要经过审核的,钓鱼程序会被审核过滤,也很难有鱼上钩。
Android程序虽然有签名,但这是开发者自己建立的签名,并不能说明身份。不像ssl证书,是由可信机构签发。
总之,问题的根本在于要求我输入帐号信息的界面不能证明自己是支付界面,只能通过程序之外来证明,增加了认证成本。但目前没有看到这方面的支持,在解决这个疑问之前,没有防范意识的用户有安全风险,有防范意识的用户也无法识别真伪。
不知道Google禁止第三方支付是不是也基于这个原因,或许是为了保证用户安全。