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.com 2195
产品状态服务器地址: gateway.push.apple.com               2195

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

Development和Production两个版本可以共用一个App ID,但是不能共用一个mobileprovision,所以要单独生成Distribution的证书供production版本使用。
注:Distribution的版本是无法在设备上debug调试的!

Development和Production两个版本的code sign是不同的,前者是iPhone Developer,后者是iPhone Distribution。注意不能搞错。

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


服务器端发出的json包是有大小限制的,最大256字节,包括自定义字典集。
aps中的alert字符串里是可以添加"\n"做换行的。
json包中除了alert,badge,sound之外,还是是可以自定值的。
额外的自定义值:
  $payload['aps'] = array('alert' : 'This is the alert text', 'badge' : 1, 'sound' : 'default');
  $payload['server'] = array('serverId' : $serverId, 'name' : $name);
  $output = json_encode($payload);
  当用户按下“View”后,自定义server值将被传递到设备中的程序。JSON 值如下:
  {
  "aps" :
           { "alert" :
                      {
                        "action-loc-key" : "显示" ,
                        "body" : "This is the alert text"
                       },
             "badge" : 1,
             "sound" : "default" },
  "server" : { "serverId" : 1, "name" : "Server name")
  }
  256字节的限制适用于整个payload,包括自定义字典集。

  原生接口
  在Server Density中,一旦产生了一条提示,将建立一个payload并插入队列中。因此有必要时我们可以同时发送多个payload。
  Apple推荐使用这种方法,因为如果你在发送各payload时频繁连接和断开,APNS有可能会封锁你的IP。
  如Apple 描述:
  原生接口使用原生socket,具有二进制内容,采用数据流技术,不产生回馈。

你可能感兴趣的:(javap)