手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:mssql

供应商与苹果推送信息服务器通信 翻译苹果文档

原文地址:http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html#//apple_ref/doc/uid/TP40008194-CH101-SW1

                        供应商与苹果推送通知服务器的沟通

                                                                                    翻译:tangly

供应商与苹果推送信息服务器通信

 

http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html#//apple_ref/doc/uid/TP40008194-CH101-SW1

普通供应商的需求

作为一个供应商与苹果推送通知服务的通信。这个接口对于程序供应商是高速的、大容量的接口;它使用一个流TCP插座设计结合二进制的内容。二进制接口是异步的。

生产环境的二进制接口可以通过gateway.push.apple.com端口2195来连接;沙箱(发展)环境的二进制接口可以通过gateway.sandbox.push.apple.com端口2195来连接。您可能会建立多个并行连接到相同的网关或多个网关的实例。

对于每一个接口可以你应该使用TLS(或SSL),以建立一个安全通信通道。这些连接所需的SSL证书通过IOS服务器分配。 细节“配置和发展”。)要建立一个值得信赖可以供应商的身份,在连接的时候,你应该使用此证书点对点的验证连接APNS

 

注:建立一个TLSAPNS的会话,委托安全的CA根证书必须安装提供商的服务器上。如果服务器是运行Mac OS X,这根证书已经在钥匙串中了。在其他系统中,证书可能无法使用。你可以下载来自委托SSL证书的网站的证书。

 

你也应该保留与APNs连接的多个通知。APNs可能会考虑,迅速,并多次作为一个拒绝服务攻击可以建立和撕裂可以连接。错误时,APNS会关闭发生错误连接。

你作为一个供应商,应该以下几个方面的推送通知负责:

您必须构建有效的通知(见“有效通知”)。

必须负责提供标志(badge号在应用程序图标上显示(右上角)

您应该定期与反馈Web服务器连接,并获取目前那些已经多次报道过失败的传输的设备列表(清单)。然后,你应该停止向这些应用程序相关联的设备发送通知。更多信息可以见“反馈”服务。

 

如果您打算支持多种语言的通知消息,但不使用客户端获取的本地化提醒字符串APS有效载荷字典LOC键和LOC - ARGS属性,你需要本地化警报消息可以文本服务器端。要做到这一点,你需要找出目前的客户端应用程序的语言偏好。 调度,登记,处理通知”可以说明为获得这一信息的方法。 LOC键和LOC- args的属性信息可以请可以“通知有效载荷”。

二进制接口和通知格式

二进制接口采用的二进制内容的信息流在本质上是一个普通的TCP套接字。为了获得最佳性能,你应该在单一的传输接口通过分批传输多个通知,明示或使用一个TCP / IP Nagle算法

该接口支持两种格式的通知数据包,简单的格式和增强的格式,以解决一些简单的格式的问题:

通知的有效期:APNS有一个存储并转发的功能,它可以保证最近的通知发送到装有应用程序的设备上。如果该设备是在接收通知时掉线当该设备下次联网时,APNS会再次提供通知。简单的格式,不管通知是否是已经发送过针对性的通知。换句话说,该通知可以随着时间的推移变得“过时”。增强的格式包含着一个有限期值来表示通知有效期。当通知期限值到时,APNS丢弃存储和转发器里的通知。

错误的反馈回应:简单的格式,如果你发送一个通知数据包,在某种方面是畸形的,例如,发送的内容超过规定的限制, APNS会响应切断连接,而且不会拒绝通知的原因。增强的格式,让一个供应商用一个任意的标识符来标记通知。如果有一个错误,APNS会返回一个与该错误代码相关联的标示符。这种应答使供应商能够查找和纠正畸形的通知。

 

大多数供应商推荐使用增强的格式。

 

让我们研究简单的通知格式,首先是因为这种格式增强格式共享。图5-1说明了这种格式。

Figure 5-1  Simple notification format

 

5-1 简单通知格式

大小: 15.14 K
尺寸: 500 x 111
浏览: 1858 次
点击打开新窗口浏览全图

简单的格式中的第一个字节是0(零)的命令值。设备令牌和发送消息的长度必须在网络字节序(即大端法)。此外,您应该使用二进制格式设备令牌进行编码。发送的消息内容不得超过256字节,不得是null结尾的

清单5-1给出了一个函数使用简单的通知格式发送一个推送通知 到APNS上的二进制接口的例子。该示例假定SSL优先连接gateway.push.apple.com(或gateway.sandbox..push.apple.com)和对等交换认证。  请看官网代码

 

清单5-1使用简单格式发送通知到二进制接口

 

 

 

5-2描述了通知数据包的增强格式。这种格式,如果APNS上的遇到无法理解的命令,它会在断开连接之前返回一个错误应答。

5-2 增强通知格式

大小: 17.84 K
尺寸: 500 x 71
浏览: 1786 次
点击打开新窗口浏览全图

增强通知格式的第一个字节是为1的命令值。这种格式中的两个新字段是标识符和通知的有效期。(其它的都和简单的通知格式相同。)

标识符----一个任意值用来标识此通知。如果是APNS无法理解的通知,则返回一个错误应答包,包含此标示符。

有效期----一个固定的UNIX纪元日期(UTC)以秒为单位标识通知不再有效,并且可以被丢弃的时候。有效期值应该是网络顺序(大端法)。如果有效期值为正数,APNS至少试图提供一次通知。您可以指定零或一个小于零的值请求APNS不存储通知。

 

如果你发送的通知在APNS上发现通知格式不完整或其他无法解析的,它会在断开之前返回一个错误应答数据包。如果没有错误,APNS不返回任何内容。)

5-3给出了错误应答数据包的格式。

大小: 4.55 K
尺寸: 187 x 68
浏览: 1699 次
点击打开新窗口浏览全图

5-3 错误应答数据包格式

 

 

该数据包包含一个值为8的命令值,紧跟一个字节的状态代码,和一个供应商指定的通知相同的标示符。表5-1列出了可能的状态代码及其含义。

Invalid :无效的

 

5-1 错误应答的编码

状态代码

表示

0

No errors encountered

1

Processing error

2

Missing device token

3

Missing topic

4

Missing payload

5

Invalid token size

6

Invalid topic size

7

Invalid payload size

8

Invalid token

255

None (unknown)

 

清单5-2修改清单5-1的代码然后构成增强格式的推送通知将其发送到APNS。依然假定SSL优先连接gateway.push.apple.com(或gateway.sandbox..push.apple.com)和对等交换认证。

 

清单5-2使用增强格式发送通知到二进制接口

注意,生产环境的设备令牌和发展环境(沙箱)的设备令牌是不一样的值。

------

最后一句很重要啊。否则会出问题。

不过,我在苹果服务器反馈服务提到的只是普通的令牌而不是加强型的

上述原文:http://hi.baidu.com/tangly888/blog/item/183a0e88432eb7c8fc1f106b.html

Tags: 推送

Zend Studio 7.0 EA 已经发布

从这个数字来看,确实是个颇具吸引力的东西啊。其他操作系统和更多版本下载请前往zend studio专门下载页面
增加的新功能也是同样的引人瞩目。具体如下:

  1. Zend Studio 7.0 is built on top of the latest version of Eclipse (Galileo).[Zend Studio 7.0 基于Eclipse 的最新版本构建(Galileo).]
  2. PHP 5.3 Support[支持php5.3版本]
  3. Enhanced Source Code Editing[更强的源码编辑]
  4. Quick Root Cause Analysis through Zend Server Integration[集成zend server调试服务器]
  5. Rapid Application Development with Zend Framework[zf快速应用开发]
  6. Better Performance[更好的性能提升]

但是,由于这个是Early Access版本【早期使用版本?】,估计只适合体验尝新下,等最终的正式版本出炉了,我看才更有使用价值,喜欢的朋友可以下载的。
 
直接下载地址:http://downloads.zend.com/studio-eclipse/7.0.0/ZendStudio-7.0.0-EA.exe

原文来自gently的博客:http://www.zendstudio.net/archives/zend-studio-7-early-access/

Tags: zend

惊心动魄的SQL BUG

刚才打开google reader的时候,突然看到一篇文章,让俺大吃一惊呀。详细内容如下:

原文网址:http://www.cnblogs.com/xinerzhui/archive/2008/07/30/1256648.html
  1.  请谨慎注意这一微软SQLBug  
  2. 刚来博客园,有什么不对,需要改进的地方,欢迎各位同道指出来,谢谢。  
  3. 今天在使用数据库时出现意外操作,将一张表的数据删除了。仔细查看SQL语句,发现问题。将问题类推到Northwind中。我们使用两个表,Employees和Products  
  4. SQL语句如下:  
  5. select * from Products where CategoryID in (select CategoryID from Employees)  
  6. 不看表结构是看不出什么问题的,不清楚的看一下表结构。执行上面的SQL语句,你将能看到所有的产品记录。  
  7. 当你执行上面语句的"select CategoryID from Employees",将会提示一个错误提示:  
  8. 消息 207,级别 16,状态 3,第 1 行  
  9. 列名 'CategoryID' 无效。  
  10. 表Employees中根本就没有CategoryID列,而微软忽略了括号中的错误,执行前面的语句。如果是应用在删除,更新,那后果将是不可现象的。我曾为此付出了代价。  
  11. 这个应该就是微软SQL的BUG吧,我们需要特别注意。  
  12. 在SQL2000企业管理器,SQL2000的查询分析器,SQL2005的Management Studio Express中均有此Bug。   

 

然后有人回复为:

#2楼 2008-07-30 17:21 | 熊呜呜
我在Sql2000上测试,确实有这个问题。  

#3楼 2008-07-30 17:27 | ocean  
  1. 有意思的问题,在我的management studio里面查询,也会有这个问题,要好好地研究一下。  

#7楼 117.22.68.*2008-07-30 17:45 | johnnyshieh [未注册用户]
  1. Microsoft SQL Server Management Studio 9.00.1399.00  
  2. 有楼主说的问题!  
  3. 确实应该注意一下。  
#9楼 2008-07-30 17:55 | 金色海洋(jyk)
  1. 看了表结构才知道,Employees 表里面没有 CategoryID字段。为什么不报错呢。错误被吃掉了。  
  2.   
  3. select * from Products where CategoryID in (select CategoryID from Employees)  
  4.   
  5. select * from Products where CategoryID in (select EmployeeID from Employees)  
  6.   
  7. 我比较了一下这两个语句的执行计划,不完全一样。建议lz分析一下执行计划。  
  8. 因为我还不能完全看懂执行计划。只能看出来两个执行计划是不一样的。呵呵。  
在MYSQL里没有试会不会遇到这种情况,我用navicat试是没有这种情况的。不知道其他的会不会有。

联想起以前写CRUD之类的东西时候,在过滤条件时,自动将空值直接unset掉,然后再拼成SQL,后来被BOBBY严厉批评了一下,确实,查询的时候感觉不出有什么问题,可如果是在UPDATE或者是DELETE的时候呢?本来是有条件的,可突然被unset掉成为没有条件了,那岂不是很恐怖?

借这个机会再次提醒自己,细心、周全、小心

 

Tags: mssql, sqlserver, microsoft, sql, bug