BeX5从V3.2.1版本开始,内置支持了推送功能,支持将消息推送到多端:Android App, IOS App, 微信。
推送案例源码:message
运行效果
案例说明
消息内容
消息接收者:标识消息发送给哪些用户,可以是一个组织的FID或人的ID;
消息标题:显示在手机app通知栏或微信中的内容;
消息类型:默认值是default,对于这类消息,当点击通知栏中的消息标题时,会自动启动手机app,并打开消息中url指定的功能页面;用户可以在发送消息时,指定自己的消息类型,并在接收消息时,根据自定义类型进行处理;
消息页面:消息关联的功能页面,即当点击消息标题时,被打开的功能页面。
如何发送消息
Model.prototype.sendClick = function(event){
var sendData = this.comp("sendData");
if (sendData.isValid()){
var params = new biz.Request.ActionParam();
params.setString("targets", sendData.getValue("targets") || "");
params.setString("title", sendData.getValue("title") || "");
params.setString("type", sendData.getValue("type") || "");
params.setString("url", sendData.getValue("url") || "");
var options = {};
options.context = this.getContext();
options.action = "sendMessageAction";
options.parameters = params;
options.directExecute = true;
options.contentType = biz.Request.JSON_TYPE;
options.dataType = biz.Request.JSON_TYPE;
options.process = this.getContext().getCurrentProcess();
options.activity = this.getContext().getCurrentActivity();
var self = this;
biz.Request.sendBizRequest(options);
}else{
justep.Util.hint(sendData.getInvalidInfo());
}
};
如上图上示,发送消息时,调用了业务层中的sendMessageAction(未来的3.3版本中,平台将自带sendMessageAction),sendMessageAction的代码实现如下:
public static void sendMessage(String targets, String title, String url, String type){
if (SystemUtils.isEmptyString(targets)) return;
Set<String> orgs = new HashSet<String>();
for (String target : targets.split(",")){
target = target.trim();
if (SystemUtils.isNotEmptyString(target)){
orgs.add(target);
}
}
if (orgs.isEmpty()) return;
Map<String, Object> exts = new HashMap<String, Object>();
if (SystemUtils.isNotEmptyString(url)){
url = url.trim();
if (url.startsWith("/")){
url = JustepConfig.getUIServer() + url;
}else if (url.startsWith("$UI")){
url = url.replace("$UI", "/UI2");
url = JustepConfig.getUIServer() + url;
}
}
Message msg = new Message(title, url, type, exts);
MessageDispatcherFactory.createMessageDispatcher().sendMessage(msg, orgs);
}
在业务层,用户可以在自己的逻辑代码中,依据以上的21和22行代码类似,调用相关的api向指定的组织发送消息。
如何处理消息
当消息推送到手机app后,消息会进入手机的通知栏,当用户点击通知栏中的消息时,可以通过以下代码进行接管:
var biz = require("$UI/system/lib/biz");
//只有打开这个功能后, 这个alert才会生效
biz.Push.on(biz.Push.MESSAGE_EVENT, function(event){
var title = event.message.title || event.message.aps.alert || "";
alert("接收到新消息:" + title);
});
消息推送相关api(业务层java)
消息服务架构
如上图所示,消息从app发送到目标人的过程如下:
第一步:在app中调用业务层的sendMessageAction, 将消息发送到BusinessServer;
第二步:消息发送给activemq:发送到activemq时, topic是“/PushServer”;
第三步:消息发送给PushServer:PushServer订阅topic”/PushServer”;
第四步:PushServer处理消息;
主要逻辑是:将发送到组织的消息分解到人;根据人拥有的设备不同,将消息发送给不同的服务器(对于android app,消息发送给activemq,其中topic是“人ID + 设备ID”;对于微信, 消息发送给微信服务器;对于ios app,消息发送给anps服务器);
第五步:不同的终端,接收相应的服务器消息
例如android app,通过订阅“人ID + 设备ID”来接收activemq上发送给当前人的消息;ios app,接收来自anps服务器的消息;对于微信,接收微信服务器的消息;
本文由WeX5君整理,WeX5一款开源免费的html5开发工具,H5 App开发就用WeX5!
阅读其他app 开发相关文章:http://doc.wex5.com/?p=3443






评一波