手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2013年02月7日的文章

APNS 推送

关于apns这玩意,以前也写过不少的博客来介绍它了,国内的文章都是基于同一套代码的.
而正因为对apns了解的少,所以写的代码,以及对它的扩展都是不够完善的.

不过google code上终于有一套相对比较完善的代码了.https://code.google.com/p/apns-php/,其实在最近他已经迁移到了github了(October 26, 2012, Project source code has moved to github. )
看了一下代码,确实不错.
如果是原先的代码,其实一直有一个问题:如果某个token失效了,那么在接下来的10s左右,fwrite的推送都会失败.
虽然苹果提供了feedback的返回,但其实你翻看国内的文章,介绍,都没有告诉你怎么查询feedback,所以我到现在也没有好好的对Feedback处理过那些无效的信息.

上面介绍的这套代码就好很多了.可以进行推送,在失败的话,还能够继续推,如果成功的推送是直接可以进入下一条,不会胡乱浪费资源,真心不错...
代码也很简单:

PHP代码
  1. $push = new ApnsPush(ApnsAbstract::ENVIRONMENT_SANDBOX, '/dev.pem');  
  2.         // Set the Root Certificate Autority to verify the Apple remote peer  
  3.  
  4.         //$push->setRootCertificationAuthority('entrust_root_certification_authority.pem');  
  5.         // Increase write interval to 100ms (default value is 10ms).  
  6.         // This is an example value, the 10ms default value is OK in most cases.  
  7.         // To speed up the sending operations, use Zero as parameter but  
  8.         // some messages may be lost.  
  9.         // $push->setWriteInterval(100 * 1000);  
  10.         // Connect to the Apple Push Notification Service  
  11.         $push->connect();  
  12.         foreach ($result as $data) {  
  13.             $token = $appCache->getAppTokenByUserId($data['receive_userid']);  
  14.             if(!$token){  
  15.                 continue ;  
  16.             }  
  17.             $token = str_replace(" ","",$token);  
  18.             // Instantiate a new Message with a single recipient  
  19.             $message = new ApnsMessage($token);  
  20.             // Set a custom identifier. To get back this identifier use the getCustomIdentifier() method  
  21.             // over a ApnsMessage object retrieved with the getErrors() message.  
  22.             //$message->setCustomIdentifier(sprintf("Message-Badge-%03d", $i));  
  23.             // Set badge icon to "3"  
  24.             $message->setBadge( intval($data['cnt']));  
  25.             // Add the message to the message queue  
  26.             $push->add($message);  
  27.         }  
  28.         // Send all messages in the message queue  
  29.         $push->send();  
  30.         // Disconnect from the Apple Push Notification Service  
  31.         $push->disconnect();  
  32.         // Examine the error message container  
  33.         $aErrorQueue = $push->getErrors();  
  34.         if (!empty($aErrorQueue)) {  
  35.             var_dump($aErrorQueue);  
  36.         }  

这段代码不要纠结,为什么与官方不一样,因为我在用yii框架的时候没有autoload成功它的 代码,花了5分钟将它全部改成基于namespace的了.

关于产品的设计

一个好的产品,必然是有灵魂的.
一个好的产品,即使是没有内容,也是能够被人喜欢的.
一个好的产品,就算没有内容,它本身也是内容

上面是我的乱谈,当然第一句话,我想,绝对没有说错:好的产品,是灌注着灵魂的.

下面的内容来自于:http://www.huxiu.com/article/9778/1.html
我这里只是摘要,如果你要看详细的,还是去看原文吧:

关于人性指导产品的一些看法——从神经系统到肉体反应
 
下面我再简单介绍下我对互联网产品设计的一些看法。
 
记 得以前看过有人介绍过2012年诺贝尔生物学奖,G蛋白偶联受体啥的。大概的意思是,人体细胞的表面到内核串联着一种蛋白胶G蛋白偶联受体。G蛋白偶联受 体可以接受人体分泌的类似荷尔蒙、肾上腺素等物质,产生反应后使得细胞收缩,产生肉体反应,然后再告知神经系统。神经系统通过之前的经验和环境的认知,来 做肉体反应做出喜怒哀乐的判断。
 
这个道理告诉我们,通过五官接触的声音、味道、图片、动画等,经过肉体的反应,远快于直接进入头脑的。前者相当于条件反射,这就让我们很好的理解为什么人的感性会大于理性了。而人的体验本质上,只有三个需求:性的需求,温饱的需求和安全的需求。
 
这个思想很有利于我们对体验设计的理解。当我们确定了产品满足的目标需求后,如何做出最符合人体条件反射的体验设计。比如:
 
一个按钮:如果只有一个按钮,人的条件反射就是要按它。即使是婴儿,也会非常自然的去按一个凸起或者凹进的按钮。
 
显著的反馈:每一次被理解的反馈(可用动画和声音模拟唤起用户记忆从而更加快速的理解)都是对条件发射的认可和强化。对比小孩,按钮以后有反馈,就会开心的笑。
 
节奏感:人体对节奏感会有本能的愉悦感。柔和的女声和沉着的男声,象征着性感。闪烁的特效,会让人引起安全警觉,从而努力去消除或者感受紧张。
 
安全感需求里面,衍生出一个需求:解决问题的需求。产品必须让用户第一时间理解他要解决的问题,并且用最直白的方法,告诉用户通过他自己的努力解决了这个问题。我们日常工作中的成就感,本质上是因为自己释放了对生存恐惧的压力而产生的。
 
下面讨论一个最复杂的问题:可选择过程中满足的解决问题,即安全需求。我们有很多产品,由于功能的需要不得不让用户有很多选择的操作。在这种情况下,就必须要引入教学机制,或者在刚需及无竞争情况下的让用户自学。
 
总结下来,要做一个好的产品思路,可以分下面三个步骤:
 
1.  解决什么需求,最好能一句话说清楚;
 
2.  解决需求的路径设计,最好能单线完成,过程中有反馈设计;
 
3.  选择指导:通过特效、亮点提醒和选择操作中的反馈,来完成用户对选择的理解。
 
思路明确以后,才是做产品的运营性功能设计,比如积分,信用体系等。
------EOF------
所以,在设计产品的时候,其实还是有很多地方需要想想的...

Tags: 打车