项目中集成Openfire ios推送插件开发--(02)
2016-08-18 16:20
429 查看
Openfire ios推送插件开发
openfire源码结构如下: 插件目录:
1.在plugins目录下构建如下目录:
2.在java文件夹上鼠标右键执行Build path --use as source folder
3.在myeclipse 中ant编译后target--openfire---plugins 目录下会出现push.jar.
4.在mysql的ofproperty里加入三个参数值
add plugin.push.apnsPathPath , p12文件路径
plugin.push.apnsPathKey, 密码
plugin.push.isProduct to ofProperty 是否正式发布
5.在后台管理页面中添加push插件后完成。
附代码:
plugin.xml
openfire源码结构如下: 插件目录:
1.在plugins目录下构建如下目录:
2.在java文件夹上鼠标右键执行Build path --use as source folder
3.在myeclipse 中ant编译后target--openfire---plugins 目录下会出现push.jar.
4.在mysql的ofproperty里加入三个参数值
add plugin.push.apnsPathPath , p12文件路径
plugin.push.apnsPathKey, 密码
plugin.push.isProduct to ofProperty 是否正式发布
5.在后台管理页面中添加push插件后完成。
附代码:
<strong>PushInterceptor 类</strong>
package com.d3.push; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javapns.devices.Device; import javapns.devices.implementations.basic.BasicDevice; import javapns.notification.AppleNotificationServerBasicImpl; import javapns.notification.PushNotificationManager; import javapns.notification.PushNotificationPayload; import javapns.notification.PushedNotification; import org.apache.commons.lang.StringUtils; import org.jivesoftware.database.DbConnectionManager; import org.jivesoftware.openfire.PresenceManager; import org.jivesoftware.openfire.XMPPServer; import org.jivesoftware.openfire.interceptor.InterceptorManager; import org.jivesoftware.openfire.interceptor.PacketInterceptor; import org.jivesoftware.openfire.interceptor.PacketRejectedException; import org.jivesoftware.openfire.session.Session; import org.jivesoftware.openfire.user.UserManager; import org.jivesoftware.openfire.user.UserNotFoundException; import org.jivesoftware.util.JiveGlobals; import org.xmpp.packet.JID; import org.xmpp.packet.Message; import org.xmpp.packet.Packet; import org.xmpp.packet.Presence; /** * <b>function:</b> send offline msg plugin * */ public class PushInterceptor implements PacketInterceptor { // Hook for intercpetorn private InterceptorManager interceptorManager; private UserManager userManager; private PresenceManager presenceManager; public PushInterceptor() { interceptorManager = InterceptorManager.getInstance(); interceptorManager.addInterceptor(this); XMPPServer server = XMPPServer.getInstance(); userManager = server.getUserManager(); presenceManager = server.getPresenceManager(); } /** * intercept message */ @Override public void interceptPacket(Packet packet, Session session, boolean incoming, boolean processed) throws PacketRejectedException { if (processed || !(packet instanceof Message) || !incoming || Message.Type.chat != ((Message) packet).getType()) return; this.doAction(packet, incoming, processed, session); } /** * <b>send offline msg from this function </b> */ private void doAction(Packet packet, boolean incoming, boolean processed, Session session) { Message message = (Message) packet; JID recipient = message.getTo(); // get message try { // if (recipient.getNode() == null // || // !UserManager.getInstance().isRegisteredUser(recipient.getNode())) // { // // Sender is requesting presence information of an anonymous // //throw new UserNotFoundException("Username is null"); // } Presence status = presenceManager.getPresence(userManager .getUser(recipient.getNode())); if (status == null) { // offline String deviceToken = getDeviceToken(recipient.getNode()); if (isApple(deviceToken)) pns(deviceToken, message.getBody()); }// end if } catch (UserNotFoundException e) { System.out.println("user not found"); // e.printStackTrace(); } } /** * 判断是否苹果 * * @param deviceToken * @return */ private boolean isApple(String deviceToken) { if (deviceToken != null && deviceToken.length() > 0) { return true; } return false; } public String getDeviceToken(String userId) { String deviceToken = ""; Connection con = null; PreparedStatement pstmt = null; ResultSet rs = null; try { con = DbConnectionManager.getConnection(); pstmt = con .prepareStatement("SELECT code_ios FROM ofUser where username = ?"); pstmt.setString(1, userId); rs = pstmt.executeQuery(); if (rs.next()) { deviceToken = rs.getString(1); } } catch (SQLException e) { e.printStackTrace(); } finally { DbConnectionManager.closeConnection(rs, pstmt, con); } return deviceToken; } public void pns(String token, String msg) { String sound = "default";// 铃音 String certificatePath = JiveGlobals.getProperty( "plugin.push.apnsPath", ""); String certificatePassword = JiveGlobals.getProperty( "plugin.push.apnsKey", ""); // 此处注意导出的证书密码不能为空因为空密码会报错 boolean isProduct = JiveGlobals.getBooleanProperty( "plugin.push.isProduct", false); try { PushNotificationPayload payLoad = new PushNotificationPayload(); payLoad.addAlert(msg); // 消息内容 payLoad.addBadge(1); // iphone应用图标上小红圈上的数值 if (!StringUtils.isBlank(sound)) { payLoad.addSound(sound);// 铃音 } PushNotificationManager pushManager = new PushNotificationManager(); // true:表示的是产品发布推送服务 false:表示的是产品测试推送服务 pushManager .initializeConnection(new AppleNotificationServerBasicImpl( certificatePath, certificatePassword, isProduct)); // 发送push消息 Device device = new BasicDevice(); device.setToken(token); PushedNotification notification = pushManager.sendNotification( device, payLoad, true); pushManager.stopConnection(); } catch (Exception e) { e.printStackTrace(); } } }
<strong>PushPlugin 类</strong>
package com.d3.push; import java.io.File; import org.jivesoftware.openfire.container.Plugin; import org.jivesoftware.openfire.container.PluginManager; import org.jivesoftware.openfire.interceptor.InterceptorManager; import com.d3.push.PushInterceptor; public class PushPlugin implements Plugin { private PushInterceptor pushInterceptor = null; @Override public void destroyPlugin() { if (pushInterceptor != null) { InterceptorManager.getInstance().removeInterceptor(pushInterceptor); } } @Override public void initializePlugin(PluginManager manager, File pluginDirectory) { pushInterceptor = new PushInterceptor(); InterceptorManager.getInstance().addInterceptor(pushInterceptor); } }
plugin.xml
<?xml version="1.0" encoding="UTF-8"?> <plugin> <class>com.d3.push.PushPlugin</class> <name>IOSPush</name> <description>IOS Push</description> <author>ccs</author> <version>1.0.0</version> <date>13/04/2015</date> <minServerVersion>1.0.0</minServerVersion> </plugin>
相关文章推荐
- 一步一步开发自己的Openfire插件(IOS推送插件APNS)
- iOS开发资源:推送通知相关开源项目
- eclipse 安装php插件及配置xampp集成环境开发php项目
- Together项目IOS平台开发02
- iOS开发常用三方库、插件、知名博客、开发资料、完整项目等
- iOS开发资源:推送通知相关开源项目--PushSharp、APNS-PHP以及Pyapns等
- iOS 开发 XMPP即时通讯项目开发(仿微信)-详解之openfire服务器失败问题
- iOS项目开发实战——实现苹果本地消息通知推送服务
- iOS开发 - 第05篇 - 项目 - 02 - 导航栏
- iOS开发资源:推送通知相关开源项目--PushSharp、APNS-PHP以及Pyapns等
- iOS开发资源:推送通知相关开源项目--PushSharp、APNS-PHP以及Pyapns等
- iOS开发资源:推送通知相关开源项目--PushSharp、APNS-PHP以及Pyapns等
- 李洪强iOS开发本人集成环信的经验总结_02_基本配置
- 项目实战:iOS极光推送集成(30分钟搞定)
- openfire插件最佳实践(四)离线消息推送ios服务器
- iOS开发辅助工具-插件集成管理工具-Alcatraz的安装和使用
- 项目开发之插件的安装 分类: ios开发 2015-07-16 13:56 183人阅读 评论(0) 收藏
- 使用Cordova进行iOS开发 (已存的项目中添加Cordova及自定义插件)
- IONIC项目JPUSH消息推送IOS集成
- iOS开发集成友盟推送