有设备,有消息体那就得有服务器啊,这篇就说服务器
服务器不是一个简单的java类对象,需要有各种的方法和属性,因此javaPns将其顶级类定义为一个接口AppleServer,为所有服务器提供了相关方法
其方法有
public InputStream getKeystoreStream() throws InvalidKeystoreReferenceException,返回证书(keyStore)的InputStream
public String getKeystorePassword(),返回证书类型
public String getKeystoreType(),返回证书类型,iOS推送使用的是p12证书
public String getProxyHost(),配置服务器地址(或者说服务器代理使用的地址),分为系统配置和JVM虚拟机配置
public int getProxyPort(),配置服务器监听端口,分为系统配置和虚拟机配置
public void setProxy(String proxyHost, int proxyPort);设置代理
接下来是其抽象类,该抽象类基本实现了服务器的一些抽象方法。主要是声明一下接口中需要的属性,设置get/set方法,对keyStore进行Stream校验,这里只说下构造函数
public AppleServerBasicImpl(Object keystore, String password, String type) throws KeystoreException {
//校验keystore 只能是文件或者byte[]
KeystoreManager.validateKeystoreParameter(keystore);
this.keystore = keystore;
this.password = password;
this.type = type;
//确定keyStore是一个确定的对象,能够被反复引用,一般来说p12证书在这里传递的是证书路径,这里转化为KeyStore
this.keystore = KeystoreManager.ensureReusableKeystore(this, this.keystore);
}
iOS推送有两个服务器一个是推送服务器,一个是反馈服务器,推送服务器即我们使用的推送消息的服务器,反馈服务器是指我们可以发送请求,查询已经卸载我们应用的手机token,从而不再给他们推送数据。
这两个服务器的代码结构跟上边是一致的,分别继承AppleServer定义了一个接口,在该接口中定义了访问地址和端口号,请注意开发环境和生产环境都有相关的地址和端口,其实现类也就是仅仅设置服务器地址端口和构造函数。
需要说明的是,构造函数时候需要注意是否生产环境,与证书环境保持一致。
下面是一个构造函数示例
public AppleNotificationServerBasicImpl(Object keystore, String password, String type, String host, int port) throws KeystoreException {
super(keystore, password, type);
this.host = host;
this.port = port;
}