IOS消息推送。
2015-11-27 17:06
555 查看
ios消息推送
本来ios开发工程师说要使用个推,但是我们是做金融的,可能需要给用户推送订单状态等等。这样的话用起来就会很不方便,于是在网上找了找资料自己动手写了一个。就是简易基础的,希望大家看了能够有用。原理就是将消息发给苹果服务器,然后服务器根据设备的序列号将消息推送给每个iphone手机,这也就是有些app判断是否是同一个设备登陆的。
需要引入几个jar包:
import com.notnoop.apns.APNS;
import com.notnoop.apns.ApnsService;
import com.notnoop.apns.ApnsServiceBuilder;
import com.notnoop.apns.PayloadBuilder;
import com.notnoop.exceptions.NetworkIOException;
jar包之前在github上下载的,过段时间再补上。
需要ios给你生成一份p12的文件然后你放到本地的文件夹中,地址需要传给推送的类。
我写了一个push.properties文件,方便以后进行拓展,
iosCertPath=D:/apache7/apnscert.p12
iosCertPassword=123456
badgeNum=1
pushSoundName=default
推送的消息实体类:
public abstract class Message { //推送消息的properties文件名字 public static final String PUSH_MESSAGE_PROPERTIES_NAME = "messagepusher.properties"; // 推送的证书文件地址 protected static String iosCertPath = ""; // 推送的证书密码 protected static String iosCertPassword = ""; // 推送消息的提示数字 app上面的红色小圆点 protected static int badgeNum; // 推送消息的音乐名字 protected static String pushSoundName = ""; /** * app推送消息 */ public abstract void pushMessage(MessagePusherVO messagePusherVO);
推送消息的实体类:
public class IosPushMessage extends Message { protected final Log logger = LogFactory.getLog(getClass()); static { // 推送的证书文件地址 iosCertPath = PropertiesUtil.loadProperties(PUSH_MESSAGE_PROPERTIES_NAME).getProperty("iosCertPath"); // 推送的证书密码 iosCertPassword = PropertiesUtil.loadProperties(PUSH_MESSAGE_PROPERTIES_NAME).getProperty("iosCertPassword"); // 推送消息的提示数字 app上面的红色小圆点 badgeNum = Integer.parseInt(PropertiesUtil.loadProperties(PUSH_MESSAGE_PROPERTIES_NAME).getProperty("badgeNum")); // 推送消息的音乐名字 pushSoundName = PropertiesUtil.loadProperties(PUSH_MESSAGE_PROPERTIES_NAME).getProperty("pushSoundName"); // 添加推送类型的id 例如推送新闻 根据新闻id跳转到哪个新闻 } @Override public void pushMessage(MessagePusherVO messagePusherVO) { /**APNS推送需要的证书、密码、和设备的Token**/ // 创建和苹果APNS服务器的连接connection对象 ApnsServiceBuilder serviceBuilder = APNS.newService(); // 通过类加载器加载ios证书 serviceBuilder.withCert(iosCertPath, iosCertPassword); // 设定为推送正式产品环境 // serviceBuilder.withProductionDestination(); /*沙河测试************************************/ serviceBuilder.withSandboxDestination(); /*沙河测试************************************/ // 从builder到service对象 ApnsService service = serviceBuilder.build(); PayloadBuilder payloadBuilder = APNS.newPayload(); payloadBuilder.badge(badgeNum); payloadBuilder.sound(pushSoundName); // 要推送的消息类型 payloadBuilder.customField("type", "需要推送的消息类型"); // ****添加推送类型的id 例如推送新闻 根据新闻id跳转到哪个新闻 // ****payloadBuilder.customField("typeId", "推送的消息id"); try { String payload = payloadBuilder.alertBody("消息内容").build(); // 推送消息 service.push("推送的设备号", payload); System.out.println("推送信息已发送" +"推送的设备号"); } catch (NetworkIOException e) { logger.error("推送消息到苹果APNS服务器遇到网络异常", e); System.err.println("推送消息到苹果APNS服务器遇到网络异常"); } catch (Exception ex) { logger.error("推送消息到苹果APNS服务器错误", ex); System.err.println("推送消息到苹果APNS服务器错误"); } finally { } service.stop(); }
相关文章推荐
- 利用BIOS INT 0x13读取软盘
- iOS NSNotification 通知传值
- iOS开发之详解正则表达式
- iOS学习之TableView02带Header
- IOS label导入带html标签文字,并且可以改变字体大小
- ios入门之界面跳转和数据传递
- 登陆页面跳转到带TabbarControl的首页
- IOS开发中联系人字母排序
- 各类BUG - 2
- ios学习--iphone 实现下拉菜单
- iOS 状态栏隐藏
- IOS学习——数据持久化(二):初识CoreData
- iOS判断手机号邮箱网址的正则
- iOS NSNotification的使用
- ios工程引用,静态库相关
- IOS开发系列--无限循环的图片浏览器
- Ios高级绘图之路径剪切和蒙版
- iOS轮询请求并在图表中动态显示
- ios开发学习笔记
- IOS开发笔记整理49之详解定位CLLocation