iOS 用javapns插件实现push通知 小解

java端用到的push插件:http://code.google.com/p/javapns/downloads/list

应用过程中遇到的几个小问题,记录一下。

1.因为debug用的push证书,与distribution用的证书是不一样的,所以

keystore参数指向的证书的地址要正确

2.debug发送push,和distribution发送push时,APNS的地址是不一样的,所以

isProduct参数的取值为[false:debug版;true:distribution版]

==============================================

网上一篇挺好的文章(http://blog.csdn.net/zhenzhenzhao12/article/details/8204483)==============================================

内容如下:

开发状态服务器地址:gateway.sandbox.push.apple.com2195

产品状态服务器地址:gateway.push.apple.com2195

Development和Production两个版本对应的apnsdevicetoken是不同的,前者是develop的mobileprovision下获取的。后者是production的mobileprovision获取的。

Development和Production两个版本可以共用一个AppID,但是不能共用一个mobileprovision,所以要单独生成Distribution的证书供production版本使用。

注:Distribution的版本是无法在设备上debug调试的!

Development和Production两个版本的codesign是不同的,前者是iPhoneDeveloper,后者是iPhoneDistribution。注意不能搞错。

无论是DevelopmentPushSSLCertificate还是ProductionPushSSLCertificate都有过期时间的。DevelopmentPushSSLCertificate有效期三个月,而ProductionPushSSLCertificate的有效期是一年。需要注意在过期之前生成新的证书,以免影响使用。

服务器端发出的json包是有大小限制的,最大256字节,包括自定义字典集。

aps中的alert字符串里是可以添加"\n"做换行的。

json包中除了alert,badge,sound之外,还是是可以自定值的。

额外的自定义值:

$payload['aps']=array('alert':'Thisisthealerttext','badge':1,'sound':'default');

$payload['server']=array('serverId':$serverId,'name':$name);

$output=json_encode($payload);

当用户按下“View”后,自定义server值将被传递到设备中的程序。JSON值如下:

{

"aps":

{"alert":

{

"action-loc-key":"显示",

"body":"Thisisthealerttext"

},

"badge":1,

"sound":"default"},

"server":{"serverId":1,"name":"Servername")

}

256字节的限制适用于整个payload,包括自定义字典集。

原生接口

在ServerDensity中,一旦产生了一条提示,将建立一个payload并插入队列中。因此有必要时我们可以同时发送多个payload。

Apple推荐使用这种方法,因为如果你在发送各payload时频繁连接和断开,APNS有可能会封锁你的IP。

如Apple描述:

原生接口使用原生socket,具有二进制内容,采用数据流技术,不产生回馈。

相关推荐