接口作用
扩展平台内置的消息推送,可以推送自定义的消息。
接口内容
FS.MessageHelper中可以放入如下格式的对象
{
executable : function(msg){},
action : function(msg){}
}
executable函数用于确定消息链接是否可以点击打开,返回true表示可以打开,返回false则表示无效的消息,而action函数则用户点击该消息后的操作。
关键引用类
/**
* 消息帮助类,可以自己注册发送器用于发送
*/
public class MessageHelper {
private static Map<String, MessageDataAccessObject> map = new ConcurrentHashMap<String, MessageDataAccessObject>();
public static int getMessageDataAccessObjectCount() {
return map.size();
}
/**
* 注册消息发送器
* @param mark 标记
* @param dao 消息和数据库关联接口
*/
public static void registerMessageDataAccessObject(String mark, MessageDataAccessObject dao) {
map.put(mark, dao);
}
public static MessageDataAccessObject getMessageDataAccessObject(String mark) {
return map.get(mark);
}
/**
* 入库
* @param mark 标记
* @param message 消息
* @return 入库成功的话返回记录的id
* @throws Exception 异常
*/
public static long save(String mark, Message message) throws Exception {
return getMessageDataAccessObject(mark).save(message);
}
/**
* 将制定的消息标记会已弹出过的状态
* @param mark 标记
* @param id 记录id
* @throws Exception 异常
*/
public static void updateToasted(String mark, long id) throws Exception {
getMessageDataAccessObject(mark).updateToasted(id);
}
/**
* 通过消息id获取消息
* @param mark 标记
* @param id 消息id
* @return 消息
* @throws Exception 异常
*/
public static Message findByID(String mark, long id) throws Exception {
return getMessageDataAccessObject(mark).findByID(id);
}
/**
* 通过id删除一条消息
* @param mark 标记
* @param id 消息id
* @return 删除成功还是失败
* @throws Exception 异常
*/
public static boolean deleteByID(String mark, long id) throws Exception {
return getMessageDataAccessObject(mark).deleteByID(id);
}
/**
* 删除指定用户的所有通知信息
* @param userID 用户ID
* @throws Exception 删除过程中出现异常则抛出此异常
*/
public static void deleteAll(long userID) throws Exception {
for (String category : map.keySet()) {
MessageDataAccessObject messageDataAccessObject = getMessageDataAccessObject(category);
if (messageDataAccessObject != null) {
messageDataAccessObject.deleteByID(userID);
}
}
}
/**
* 获取当前用户的所有信息
*
* @param username 用户名
* @return 用户信息数组
* @throws Exception 信息获取失败则抛出此异常
*/
public static List<Message> getMessages(String username) throws Exception {
List<Message> messages = new ArrayList<Message>();
for (String category : map.keySet()) {
MessageDataAccessObject messageDataAccessObject = getMessageDataAccessObject(category);
if (messageDataAccessObject != null) {
messages.addAll(messageDataAccessObject.getMessages(username));
}
}
return messages;
}
/**
* 获取当前用户的新鲜信息
*
* @param username 用户名
* @return 用户信息数组
* @throws Exception 信息获取失败则抛出此异常
*/
public static List<Message> getFreshMessages(String username) throws Exception {
List<Message> messages = new ArrayList<Message>();
for (String category : map.keySet()) {
MessageDataAccessObject messageDataAccessObject = getMessageDataAccessObject(category);
if (messageDataAccessObject != null) {
messages.addAll(messageDataAccessObject.getFreshMessages(username));
}
}
return messages;
}
/**
* 获取指定用户的通知消息所组成的JSON对象
* @param username 用户名
* @return 通知消息
* @throws Exception 获取JSON对象过程中出现异常则抛出此异常
*/
public static JSONObject getMessageJSONObject(String username) throws Exception {
List<Message> messages = MessageHelper.getMessages(username);
List<Message> freshMessages = MessageHelper.getFreshMessages(username);
JSONObject jo = new JSONObject();
JSONArray toasted = new JSONArray();
for (Message message : messages) {
toasted.put(message.createJSONObject());
}
jo.put("toasted", toasted);
JSONArray fresh = new JSONArray();
for (Message message : freshMessages) {
fresh.put(message.createJSONObject());
}
jo.put("fresh", fresh);
return jo;
}
}
可以在FSPlate的实现类中调用MessageHelper注册自定义的消息获取组件。
示例实现
(function(){
var openMessage = function(msg) {
FS.tabPane.addItem({
title : "我的消息" + msg.id,
src : msg.url
});
};
var executable = function(msg) {
return msg.username != null;
};
FS.MessageHelper.push({
executable : executable,
action : openMessage
});
})(jQuery);
源码
自定义消息的示例可参照这里:https://git.oschina.net/fanruan/plugins-free/tree/master/plugin-message