iOS中注册功能的体验探究

通常,移动App的注册功能通常采用手机号码注册或者邮箱帐号注册。

不过在国内这样隐私堪忧的环境下,需要手机号来注册会流失不少用户。即便是新浪微博这样的应用,需要绑定手机号也令我不信任。除非是像淘宝、支付宝这样需要手机号来提高安全等级的服务,才能弱化用户的心理障碍。

首先,看下手机号码注册。

   (注册湖畔

对于手机号码输入框,我们当然要默认使用UIKeyboardTypeNumberPad类型键盘。不过对于越狱用户,如果装了其它输入法,则有可能使用其它类型键盘输入非数字字符。对此,我们在客户端最好进行过滤和检查。因为客户端如果发送了包含非数字字符的电话号码给服务端进行校验,是没有意义且浪费流量的。

在用户的输入过程中,我们可以通过代理方法来判断输入是否合法,从而进一步决定是否接受输入。

下面是示例代码片段:

[cpp] view plaincopy

  1. - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
  2. {
  3. return [ValidationHelper validateNumeric:string];
  4. }
  5. ...
  6. + (BOOL)validateNumeric:(NSString *)str2validate
  7. {
  8. NSCharacterSet *charSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
  9. NSRange range = [str2validate rangeOfCharacterFromSet:charSet];
  10. return (range.location == NSNotFound) ? YES : NO;
  11. }

上面只是部分代码示例,比如还缺少判断是否为退格键、对输入框长度进行限制。

同时,为了对用户更友好,我们可以对电话号码进行格式化。比如 采用类似+86 137-5555-6666的格式,或者省略+86。这样可以让用户在输入过程中清楚地知道自己输入了多少位数字、输入了哪些数字,不至于担心输错号码或 者多一位、少一位。从这个角度看,对输入框长度进行一定限制,也是对用户稍微友好的。

对于获取验证码,这里是由客户端来做频率限制。此处有一个细节:当点击“获取验证码”按钮后,焦点应该放在验证码输入框,因为用户的下一步动作就是输入验证码。我个人比较注意这样的细节,比如浏览器新开一个tab,焦点是否放在地址栏;比如我在群里点击搜索按钮要搜索群用户,搜索框是否处于激活状态供用户输入。这些都是为用户,或者说作为用户,考虑的细节体验。我给阿里旺旺淘宝浏览器提过这方面的建议。

除了在用户输入过程中对非法字符进行过滤,提交给服务端时也要再检查一次。

用户的任何输入都是不可信的数据,同样地,服务端对于客户端提交的任何数据也要再检查一次,不管客户端是否已经检查过。

比如在提交时,至少要检查下验证码是否为空。如果为空,要不要弹窗呢?我觉得没有必要用UIAlertView来给用户提示,有点重!在这里,我采用的是抖动提示,用户一看就明了。

[cpp] view plaincopy

  1. //TextField的晃动:Begin
  2. @interface UITextField(shake)
  3. - (void)shake;
  4. @end
  5. @implementation UITextField(shake)
  6. - (void)shake
  7. {
  8. CAKeyframeAnimation *animationKey = [CAKeyframeAnimationanimationWithKeyPath:@"position"];
  9. [animationKey setDuration:0.5f];
  10. NSArray *array = [[NSArrayalloc] initWithObjects:
  11. [NSValuevalueWithCGPoint:CGPointMake(self.center.x, self.center.y)],
  12. [NSValuevalueWithCGPoint:CGPointMake(self.center.x-5, self.center.y)],
  13. [NSValuevalueWithCGPoint:CGPointMake(self.center.x+5, self.center.y)],
  14. [NSValuevalueWithCGPoint:CGPointMake(self.center.x, self.center.y)],
  15. [NSValuevalueWithCGPoint:CGPointMake(self.center.x-5, self.center.y)],
  16. [NSValuevalueWithCGPoint:CGPointMake(self.center.x+5, self.center.y)],
  17. [NSValuevalueWithCGPoint:CGPointMake(self.center.x, self.center.y)],
  18. [NSValuevalueWithCGPoint:CGPointMake(self.center.x-5, self.center.y)],
  19. [NSValuevalueWithCGPoint:CGPointMake(self.center.x+5, self.center.y)],
  20. [NSValuevalueWithCGPoint:CGPointMake(self.center.x, self.center.y)],
  21. nil];
  22. [animationKey setValues:array];
  23. [array release];
  24. NSArray *times = [[NSArrayalloc] initWithObjects:
  25. [NSNumbernumberWithFloat:0.1f],
  26. [NSNumbernumberWithFloat:0.2f],
  27. [NSNumbernumberWithFloat:0.3f],
  28. [NSNumbernumberWithFloat:0.4f],
  29. [NSNumbernumberWithFloat:0.5f],
  30. [NSNumbernumberWithFloat:0.6f],
  31. [NSNumbernumberWithFloat:0.7f],
  32. [NSNumbernumberWithFloat:0.8f],
  33. [NSNumbernumberWithFloat:0.9f],
  34. [NSNumbernumberWithFloat:1.0f],
  35. nil];
  36. [animationKey setKeyTimes:times];
  37. [times release];
  38. [self.layeraddAnimation:animationKey forKey:@"TextFieldShake"];
  39. }
  40. @end
  41. //TextField的晃动:End

上述代码来源于互联网,应该是StackOverflow吧?忘记了。

   (注册微信)

上面讨论到通过客户端来对验证码请求频率做限制,除此之外,还可以通过服务端来做限制。

微信应该就是通过服务端来做限制的,因为我杀掉进程等了好久,然后重新尝试注册,还一直提示我“发送请求太快,稍后再试”,尝试了好几次都是这样的提示,感觉体验不好。我Google了一下这个提示,发现有不少用户有相同困惑。

Server端永远不要信任Client端(包括Browser)的数据。但如微信这样的产品,在注册获取验证码环节上,对交互的把握,仍然会让用户觉得不爽。

所以,在验证码获取上,我个人倾向客户端控制或者C/S结合。因为至少客户端控制可以让用户有个心理预期,比如60秒的时间。而像微信这样,我根本不知道“休息一下”是休息多久!我尝试了1分钟、5分钟甚至10分钟后再次操作过,还是遇到这个提示。

除此之外,还有一些我个人认为的不足之处:

  • 手机号码没有做长度限制。或许各个国家号码长度不一,但如上图,未免也太长了吧?而且微信的大多数用户都来自大陆,完全可以为“+86”的用户做下体验优化。我认为服务了80%用户的功能是十分有价值的
  • 验证码长度没有限制。如果说电话号码长度不可控,那么验证码的长度应该是可控的吧?这个“休息一下,稍后再试”的提示在获取验证码时会有,再校验验证码时也会有!有点烦。如果说控制获取验证码频率可以节约短信费用,那么校验验证码的频率控制又是为何
  • 验证码连基本判空都没有。我没有输入验证码,直接点击下一步,得到如上“验证码不正确”的弹窗提示。如果说发生了服务端验证,那不应该把空串交给服务端验证;如果说客户端验证通不过,那提示有点冗余,而且不精准

 (短信注册新浪微博)

如果说控制验证码发送频率是节能环保省钱的考虑,那么新浪微博直接把这个问题交给用户了。

说实话,当我看到这个webview加载出来的内容时,一股有 关部门气息迎面扑来。什么时候,在(大陆)互联网应用上注册帐号还要花钱了?虽然只是一毛钱短信费用。但就这一毛钱,也可以感受到新浪微博并没有足够为用 户考虑。(当然,这里要强调下,应该支持正版,要有消费服务的意识。插曲。)

尤其是,这个接收号码还这么长,足足12位!

就不多吐槽了。

--------------------------------------------------

再看看邮箱帐号注册。

 (注册湖畔)

邮箱注册过程中可关注的两个基本点是:

  • 键盘应设置为UIKeyboardTypeEmailAddress类型。
  • 对邮箱格式进行检查。

下面是一段检查邮箱的示例代码:

[cpp] view plaincopy

  1. + (BOOL)validateEmail:(NSString *)str2validate
  2. {
  3. NSString *emailRegex = @"[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
  4. NSPredicate *emailPredicate = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", emailRegex];
  5. return [emailPredicate evaluateWithObject:str2validate];
  6. }

  (注册知乎)

我在之前说过知乎的登录模块在刚开始的时候也没有为邮箱输入框设置UIKeyboardTypeEmailAddress类型键盘,从注册界面我们也可以发现知乎改了登录界面,不过漏了这里。

或者,是故意地?

那么,不妨再比较一下默认中文键盘和邮箱键盘,仍然可以发现在这个注册流程中,还是邮箱键盘更方便。

 (注册新浪微博)

新浪微博的邮箱注册界面仍然是一个webview,并且从加载出来的页面仍然可以感受到:新浪微博并不怎么为用户考虑

为什么?

先不说那张验证码,就看下面两点:

  • 需要用户点击按钮来发送激活邮件。当用户注册成功了为什么不自动发激活邮件呢?这让我想起前几天我第一次在万达官网上买电影票的经历,我输入了打折卡号和密码,网页上已经显示出折扣价了,于是我就继续支付,结果没有打折!!!因为我没有点击折扣价附近的“使用”按钮。那时候折扣价是红色字体突出的,吸引了我的注意力,而且我以前在其它网站买电影票都很顺利,有点大意。不过,如果真心为用户考虑,折扣价都已经算出来了,说明打折卡有效,为什么不默认使用呢!?事后,我打了好多个电话要投诉,都没人接。幸亏那次只能省10块钱。
  • 需要查收激活邮件进行激活,才能登录。这点简直没有点移动App的意识嘛!我用手机注册,你还要我去邮箱查收激活邮件!?且不说你这是不是把手机当PC,就这注册流程,完全被一封激活邮件打断了!

简短吐槽。结束。

时间: 2024-08-02 23:02:39

iOS中注册功能的体验探究的相关文章

【转】在Mac和iOS中注册自定义的URL Scheme

在Mac和iOS中注册自定义的URL Scheme JAN 10TH, 2012 URL Scheme是类似http://,ftp://,afp://这样的东西,通常是用传输协议作为URL Scheme.不过事实上,你可以在iOS和Mac中注册任何类型的URL Scheme.当用户在浏览器中访问你的自定义URL Scheme的链接的时候,操作系统就会打开你的程序,响应这个请求. 要在程序中注册自定义URL Scheme非常简单.主要分为两个步骤:在程序的Info.plist中加入你需要注册的UR

iOS中 语音识别功能/语音转文字教程具体解释 韩俊强的博客

原文地址:http://blog.csdn.net/qq_31810357/article/details/51111702 前言:近期研究了一下语音识别,从百度语音识别到讯飞语音识别:首先说一下个人针对两者的看法,讯飞毫无疑问比較专业.识别率也非常高真对语音识别是比較精准的,可是非常多开发人员和我一样期望离线识别,而讯飞离线是收费的:请求次数来讲.两者都能够申请高配额,针对用户较多的差点儿都一样. 基于免费而且支持离线我选择了百度离线语音识别.比較简单,UI设计多一点,以下写一下教程: 1.首

iOS中 语音识别功能/语音转文字教程详解 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博 原文地址:http://blog.csdn.net/qq_31810357/article/details/51111702 前言:最近研究了一下语音识别,从百度语音识别到讯飞语音识别:首先说一下个人针对两者的看法,讯飞毫无疑问比较专业,识别率也很高真对语音识别是比较精准的,但是很多开发者和我一样期望离线识别,而讯飞离线是收费的:请求次数来讲,两者都可以申请高配额,真对用户较多的几乎都一样.基于免费并且支持离线我

iOS 注册体验探究(转)

通常,移动App的注册功能通常采用手机号码注册或者邮箱帐号注册. 不过在国内这样隐私堪忧的环境下,需要手机号来注册会流失不少用户.即便是新浪微博这样的应用,需要绑定手机号也令我不信任.除非是像淘宝.支付宝这样需要手机号来提高安全等级的服务,才能弱化用户的心理障碍. 首先,看下手机号码注册.    (注册湖畔) 对于手机号码输入框,我们当然要默认使用UIKeyboardTypeNumberPad类型键盘.不过对于越狱用户,如果装了其它输入法,则有可能使用其它类型键盘输入非数字字符.对此,我们在客户

IOS中调用系统的电话、短信、邮件、浏览功能

iOS开发系列--通讯录.蓝牙.内购.GameCenter.iCloud.Passbook系统服务开发汇总 2015-01-13 09:16 by KenshinCui, 26990 阅读, 35 评论, 收藏, 编辑 --系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: 调用系统应用 使用系统服务目 录 短信与邮件 通讯录

思科IOS中改善CLI的用户体验

改善CLI的用户体验   序号 命令行编辑按键序列 说明 1 Tab 补全命令或者关键字 2 Ctrl + A 移动光标至命令行的起始位置 3 Ctrl + E 移动光标至命令行的结束位置 4 Backspace 删除光标左侧的一个字符 5 Ctrl + U 删除一行 6 Ctrl + Shift + 6 运行用户终止IOS进程(例如ping或者traceroute) 7 Ctrl + C 放弃当前命令并推出配置模式 8 Ctrl + Z 推出配置模式并返回EXEC提示符 Switch#term

如何在ios中集成微信登录功能

在ios中集成微信的登录功能有两种方法 1 用微信原生的api来做,这样做的好处就是轻量级,程序负重小,在Build Settings 中这样设置 然后设置 友盟的设置同上,但是要注意,加入你需要的所有框架到应用程序中

Nodejs连接MySQL&&实现unity中的登陆注册功能

MySQL是一款常用的开源数据库产品,通常也是免费数据库的首选.查了一下NPM列表,发现Nodejs有13库可以访问MySQL,felixge/node-mysql似乎是最受关注项目,我也决定尝试用一下. 要注意名字,"felixge/node-mysql"非"node-mysql",安装目录 1. node-mysql介绍 felixge/node-mysql是一个纯nodejs的用javascript实现的一个MySQL客户端程序.felixge/node-my

App登录注册功能,怎样做到用户体验最佳?

用户登录系统,可以细分为三项功能模块,分别是:登录.注册和密码找回.本文作者将结合自身经历,谈谈他在做这块的时候一些想法,主要是涉及业务流程. 登录和注册功能,不论是PC端还是移动端,大多数产品都会涉及到.而不同的产品逻辑和业务流程,会带来不一样的用户体验.过去做的大多是后台产品,面向的是内部用户,因此在做登录和注册功能时,前台界面相对简单,主要是后台的权限管理较为复杂.而最近正在做一款App和一款PC端前台产品,面向外部的普通用户,因此在登录与注册的产品设计上,需要考虑更多的细节因素.下面把我