»ìºÏÒÆ¶¯Ó¦ÓÃÏûÏ¢ÍÆËÍ
»ìºÏÓ¦ÓÃÒ»°ãʹÓà Cordova Ö®ÀàµÄÖмä¼þ£¬ÒÔ WebView ×÷ΪÓû§½çÃæ²ã£¬ÒÔ Javascript
×÷Ϊ»ù±¾Âß¼£¬ÒÔ¼°ºÍÖмä¼þͨѶ£¬ÔÙÓÉÖмä¼þ·ÃÎʵײã API µÄ·½Ê½£¬½øÐÐÓ¦Óÿª·¢¡£¿ª·¢Ê±¿ÉÄܲ»²ÉÓûòÕߴ󲿷ֲ»²ÉÓÃÔÉúÓïÑÔ£¬µ«ÊÇÈ´ÓÐËùÓÐÔÉúÓ¦ÓõÄÌØÐÔ¡£¶ø¿ª·¢ÏûÏ¢ÍÆË͹¦ÄÜʱ£¬ÎÒÃǾͼȿÉÒÔʹÓÃ
Native App µÄϵͳ×Ô´øÍÆËÍÈç GCM ºÍ APNS£¬ÓÖ¿ÉÒÔʹÓûùÓÚ html5 µÄ websocket
ÍÆËÍ¡£
¶ÔÓÚ»ìºÏÓ¦ÓÃµÄ websocket ÏûÏ¢ÍÆËÍ£¬Æä»ù±¾ÔÀíÈçÏ£º
ͼ 1. Hybrid app websocket
¹¤×÷Á÷³Ì

¶øÔÉúÓ¦ÓõÄÏûÏ¢ÍÆËÍ£¬Æä»ù±¾ÔÀíÈçÏÂͼ£º
ͼ 2. ÔÉú app ÏûÏ¢ÍÆË͹¤×÷Á÷³Ì

ĿǰºóÕßÖ÷ÒªÓ¦ÓÃÓÚÔÉú app, ¶øÇ°ÕßÓÉÓÚ¿ª·¢ÖÜÆÚ¶Ì£¬¿çƽ̨ÐԺã¬Î¬»¤³É±¾µÍ£¬Ò»°ã¿ÉÒÔÓÃÓÚ»ìºÏÓ¦ÓõÄÏûÏ¢ÍÆËÍ¡£»ùÓÚ
websocket µÄÏûÏ¢ÍÆËÍ£¬ÎÒÃǾͿÉÒÔ×Ô¼ºÈ¥ÊµÏÖÏûÏ¢ÍÆË͵ķþÎñ¶Ë£¬ÕâÑùÎÒÃǾÍÕÆÎÕÁËÍÆËÍ·þÎñµÄÖ÷¶¯È¨£¬¶ÔÓÚ°²È«ÐÔ¼«¸ßµÄÆóÒµ£¬websocket
ÍÆËÍÎÞÒÉÊÇ×îºÃµÄÑ¡Ôñ£¬ÒòΪÈç¹ûʹÓà GCM »òÕß APNS ÍÆËÍ£¬ÎÒÃDz»µÃ²»½«ÐÅÏ¢·¢Ë͵½ GCM server
»òÕß APNS server£¬ ÔÙÓÉ GCM »òÕß APNS ·þÎñ¶Ëת·¢µ½¿Í»§¶Ë£¬ÐÅÏ¢°²È«ÐÔ²»µÃ¶øÖª¡£Ò»µ©ÍÆËÍ·þÎñÆ÷³öÏÖÒì³££¬ÎÒÃǵÄÏûÏ¢ÍÆËͽ«±äµÃ·Ç³£±»¶¯¡£
µ«ÊÇ GCM ºÍ APNS Ò²ÊÇʹÓó¤Á¬½Ó½øÐÐÏûÏ¢ÍÆËÍ£¬¶øÇÒÒ»¸öÊÖ»úÉϵÄËùÓÐ app ¹²ÓÃÒ»¸ö³¤Á¬½Ó£¬¶ÔÓÚÊÖ»úÐÔÄܽ«»áÓм«´óµÄ°ïÖú¡£Á½ÖÖÍÆË͸÷ÓÐÀû±×£¬¶ÁÕß¿É×ÔѡѡÔñ¡£±¾ÎĽ«Õë¶Ô
websocket µÄÏûÏ¢ÍÆËͽøÐÐһϵÁнéÉÜ¡£
Websocket ½Ó¿Ú¼ò½é
WebSocket µÄʵÏÖ·ÖΪ¿Í»§¶ËºÍ·þÎñ¶ËÁ½²¿·Ö£¬¿Í»§¶Ë£¨Í¨³£Îªä¯ÀÀÆ÷£©·¢³ö WebSocket Á¬½ÓÇëÇ󣬷þÎñ¶ËÏìÓ¦£¬ÊµÏÖÀàËÆ
TCP ÎÕÊֵ͝×÷£¬´Ó¶øÔÚä¯ÀÀÆ÷¿Í»§¶ËºÍ WebSocket ·þÎñ¶ËÖ®¼äÐγÉÒ»Ìõ HTTP ³¤Á¬½Ó¿ìËÙͨµÀ¡£Á½ÕßÖ®¼äºóÐø½øÐÐÖ±½ÓµÄÊý¾Ý»¥Ïà´«ËÍ£¬²»ÔÙÐèÒª·¢ÆðÁ¬½ÓºÍÏìÓ¦¡£Í¬Ê±Á½Õß¶¼¿ÉÒԹرÕÕâ¸ö³¤Á¬½Ó¡£ÎÒÃÇÕýÊÇÀûÓÃÁË»ìºÏÒÆ¶¯Ó¦ÓõÄ
webview ¿ÉÒÔÖ§³Ö websocket µÄÕâ¸öÌØÐÔÀ´ÊµÏÖ·þÎñÆ÷¶Ë¶Ô¿Í»§¶ËµÄÒ»¸öÏûÏ¢ÍÆËÍ¡£Websocket
Õë¶Ô¿Í»§¶Ë¶øÑÔ£¬ÐÔÄÜ£¬×ÊԴʹÓÃÒÔ¼°¼°Ê±ÐÔÒª±È´«Í³µÄÂÖѯ¸üºÃ¡£
Websocket ¿Í»§¶Ë API
¶ÔÓÚ websocket ¿Í»§¶Ë£¬Ä¿Ç°Ö÷Á÷µÄÒÆ¶¯²Ù×÷ϵͳµÄ webview ²ã¶¼ÒѾ֧³Ö websocket
·þÎñ¡£ÒÔÏÂÁоÙÁ˳£¼ûµÄÒÆ¶¯ÏµÍ³Ö§³ÖÇé¿ö£º
±í 1. Ö÷Á÷ÒÆ¶¯ÏµÍ³µÄ webview ¶Ô websocket µÄÖ§³ÖÇé¿ö

³£¼ûä¯ÀÀÆ÷ºÍÒÆ¶¯ÏµÍ³µÄ webview ¶¼ÒѾʵÏÖÁË w3 ¹æ·¶µÄ websocket ½Ó¿Ú£¬¾ßÌå½Ó¿Ú²Î¿¼Çåµ¥
1
Çåµ¥ 1. Websocket ¿Í»§¶Ë½Ó¿Ú
[Constructor(in DOMString url, in optional DOMString protocol)] interface WebSocket { readonly attribute DOMString URL; // ready state const unsigned short CONNECTING = 0; const unsigned short OPEN = 1; const unsigned short CLOSED = 2; readonly attribute unsigned short readyState; readonly attribute unsigned long bufferedAmount; //networking attribute Function onopen; attribute Function onmessage; attribute Function onclose; boolean send(in DOMString data); void close(); }; WebSocket implements EventTarget; |
ÆäÖÐ URL ÊôÐÔ´ú±í WebSocket ·þÎñÆ÷µÄÍøÂçµØÖ·£¬ÐÒéͨ³£¡±ws¡±»òÕß¡±wss¡°,send
·½·¨¾ÍÊÇ·¢ËÍÊý¾Ýµ½·þÎñÆ÷¶Ë£¬close ·½·¨¾ÍÊǹرÕÁ¬½Ó¡£³ýÁËÕâЩ·½·¨£¬»¹ÓÐһЩºÜÖØÒªµÄʼþ£ºonopen£¬onmessage£¬onerror
ÒÔ¼° onclose¡£Ïêϸ½âÊÍÇë²Î¿¼±í 2
±í 2. Websocket µÄ¶ÔÏó·½·¨ÊôÐÔ

ÏÂÃæÒ»¶Î´úÂëչʾÁ˽¨Á¢ websocket ʵÀý£º
Çåµ¥ 2. Websocket ´´½¨Á¬½ÓʵÀý
var ws= new WebSocket("ws://localhost:8080/PushNotification"); ws.onopen = function (event) { console.log("connected to server"); }; ws.onmessage = function (event) { //when a new message coming, we will call Cordova plugin here }; |
µ±ÓÐÐÂÏûÏ¢µ½´ïʱ£¬onmessage »á×Ô¶¯´¥·¢£¬ÎÒÃÇ¿ÉÒÔÔÚÕâ¸ö·½·¨ÀïÀûÓà Cordova plugin
ȥʵÏÖµ÷Óà android »òÕß ios µÄ notification¡£
Websocket ·þÎñÆ÷¶Ë API
¶ÔÓÚ websocket ·þÎñÆ÷¶Ë£¬Ä¿Ç°Ö÷Á÷µÄ web ·þÎñÆ÷¶¼ÒѾ֧³Ö¡£ÒÔÏÂÁоÙÁ˳£¼ûµÄ·þÎñÆ÷Ö§³ÖÇé¿ö£º
±í 3. Ö÷Á÷ web ·þÎñÆ÷¶Ô websocket µÄÖ§³ÖÇé¿ö

ÒÔÏÂÎÒÃÇʹÓà websphere liberty 8.5.5.5 ×÷Ϊ web ·þÎñÆ÷£¬websocket
¹¦ÄÜÐèÒªÁíÍâ°²×°£¬²½ÖèÈçÏ£º
1.°²×° websocket£¬Ö´ÐÐÒÔÏÂÃüÁî
bin/featureManager install websocket-1.0 --when-file-exists=ignore |
2.ÔÚ server.xml ÖÐÒýÈëÈçÏÂÅäÖÃ
<featureManager> <feature>websocket-1.0</feature> </featureManager> |
3.ÖØÆô websphere liberty ¼´¿ÉÉúЧ
WebSocket ·þÎñ¶ËµÄ´úÂëʾÀýÈçÏ£º
Çåµ¥ 3. Websocket ·þÎñÆ÷¶Ë½Ó¿Ú
@ServerEndpoint(value = "/PushNotification") public class PushNotifyWithWebSocket { private static Set<Session> sessions = Collections.newSetFromMap(new ConcurrentHashMap<Session,Boolean>()); @OnMessage public void receiveMessage(String message) { //todo } @OnOpen public void onOpen(Session session, EndpointConfig ec) { sessions.add(currentSession); } @OnClose public void onClose(Session session, CloseReason reason) { //todo } @OnError public void onError(Throwable t) { //todo } /** * Send a message to a all client * @param message */ public void sendMessage(JSONArray message) throws Exception { ObjectMapper mapper = new ObjectMapper(); //send message to all online user for (Session session: sessions){ session.getBasicRemote().sendText(message. toString()); } } } |
ʹÓà ServerEndpoint ×¢Ê͵ÄÀà±ØÐëÓÐÒ»¸ö¹«¹²µÄÎÞ²ÎÊý¹¹Ô캯Êý£¬@onMessage ×¢½âµÄ
Java ·½·¨ÓÃÓÚ½ÓÊÕ´«ÈëµÄ WebSocket ÐÅÏ¢£¬Õâ¸öÐÅÏ¢¿ÉÒÔÊÇÎı¾¸ñʽ£¬Ò²¿ÉÒÔÊǶþ½øÖƸñʽ¡£
OnOpen ÔÚÕâ¸ö¶ËµãÒ»¸öеÄÁ¬½Ó½¨Á¢Ê±±»µ÷ÓᣲÎÊýÌṩÁËÁ¬½ÓµÄÁíÒ»¶ËµÄ¸ü¶àϸ½Ú¡£Session ±íÃ÷Á½¸ö
WebSocket ¶Ëµã¶Ô»°Á¬½ÓµÄÁíÒ»¶Ë£¬¿ÉÒÔÀí½âΪÀàËÆ HTTPSession µÄ¸ÅÄÎÒÃÇ¿ÉÒÔ½«¶à¸ö
Session ±£´æµ½ server ¶Ë£¬ÒÔ±ãÎÒÃÇÓë¿Í»§¶ËͨÐÅ¡£OnClose ÔÚÁ¬½Ó±»ÖÕֹʱµ÷ÓᣲÎÊý
closeReason ¿É·â×°¸ü¶àϸ½Ú£¬ÈçΪʲôһ¸ö WebSocket Á¬½Ó¹Ø±Õ¡£OnError ÔÚ
websocket ͨÐųöÏÖÒì³£²Å»áµ÷Óá£
ÔÚÇåµ¥ 3 ÖÐÎÒÃÇ¿ÉÒÔ¿´³ö£¬Èç¹ûÎÒÃÇÓÐÐÂÏûÏ¢ÐèÒªÍÆË͵½¿Í»§¶Ë£¬ÎÒÃǾͿÉÒÔµ÷ sendMessage ·½·¨£¬Ò»µ©¿Í»§¶ËÊÕµ½
message ¾Í¿ÉÒÔͨ¹ý Cordova plugin µ÷ÓÃϵͳ API À´ÊµÏÖÏûÏ¢Ìáʾ¡£ÏÂÎĽ«×ÅÖØ½²½âÈçºÎ´´½¨Ò»¸ö
Cordova plugin¡£
ÀûÓà Cordova plugin µ÷Óñ¾µØ notification
ÒÔÉÏÎÒÃÇÁ˽âÁËÈçºÎÔÚ Hybrid App Öд´½¨ websocket Á¬½Ó£¬µ±ÎÒÃÇÊÕµ½ÐÅϢʱ£¬Õâ¸öʱºòÖ»ÐèÒªµ÷ÓÃ
IOS »òÕß Android µÄ±¾µØÏûÏ¢ÍÆËͼ´¿ÉÈÃÓû§ÖªµÀÓÐеÄÐÅÏ¢µ½´ï¡£Õâ¸öʱºòÎÒÃǾÍÒª´´½¨Ò»¸öеÄ
Cordova plugin È¥´¥·¢ notification¡£
´´½¨Ò»¸ö Cordova plugin
Cordova plugin ÊÇÎÒÃÇͨ¹ý JavaScript µ÷ÓÃϵͳ API µÄÖмä¼þ£¬Ò»°ãÇé¿öÏÂÎÒÃÇͨ¹ý
JavaScript ²»Äܹ»Íê³É¶øÏµÍ³ API ¿ÉÒÔÍê³ÉµÄÈÎÎñʱ£¬ÎÒÃǾÍÒª´´½¨Ò»¸ö plugin¡£²»Í¬µÄƽ̨ÔÚµ÷Óõײã
API ʱ»áÓв»Í¬£¬µ«ÊÇǰ¶Î´úÂë²»»á¸Ä±ä¡£ ÒÔÏÂÎÒÃǽ«´´½¨Ò»¸ö Cordova plugin ÓÃÀ´µ÷Óñ¾µØÏûÏ¢ÍÆËÍ¡£ÏÂÎÄÒÔ
android ƽ̨ΪÀý£¬ÆäËûƽ̨˼·ÀàËÆ¡£
1.ÔÚ cordova_plugins.js ÖÐÒýÈëÐ嵀 plugin
{ "file": "plugins/com.test.notification/www/notification.js", "id": "com.test.notification.localNotification", "clobbers": [ "cordova.plugins.localNotification" ] } |
2.È»ºóÔÚ plugins/com.test.notification/www
Ŀ¼Ï±ߴ´½¨ notification.js£¬´úÂëʾÀýÈçÏ£º
cordova.define("com.test.notification.localNotification", function(require, exports, module) { var argscheck = require('cordova/argscheck'), utils = require('cordova/utils'), exec = require('cordova/exec'); var localNotification = function() { }; localNotification.sendNotify = function(message,success, error) { cordova.exec(success, error, 'localNotification', 'sendNotify', message); }; module.exports = localNotification; }); |
3. ´´½¨Ò»¸ö java ÀàÀ´¼Ì³Ð Cordova ½Ó¿Ú£¬´úÂëʾÀýÈçÏÂ
package com.test.notification; import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaInterface; import org.apache.cordova.CordovaPlugin; import org.apache.cordova.CordovaWebView; import org.apache.cordova.PluginResult; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;
//ellipsis code
// ¡¡ .
public class localNotification extends CordovaPlugin
{
//ellipsis code
// ¡ ..
@Override
public boolean execute(String action, final JSONArray
args,
final CallbackContext callbackContext) throws
JSONException {
if ("sendNotify".equals(action)) {
NotificationManager manager = (NotificationManager)
this.cordova
.getActivity().getSystemService(
Context.NOTIFICATION_SERVICE);
String title = args.getString(0);
String text = args.getString(1);
Notification notification
= new Notification.Builder(this.cordova.getActivity())
.setTicker("New notification").setDefaults(1)
.setSmallIcon(R.drawable.icon)
.setAutoCancel(true)
.setContentTitle(title).setContentText(text)
.setContentIntent(PendingIntent.getActivity(this.cordova.getActivity(),
0, this.cordova.getActivity().getIntent(), 0)).build();
manager.notify(1, notification);
return true;
}
}
} |
ÔÚ res/xml/config.xml ÅäÖÃ plugin feature
<feature name=" localNotification "> <param name="android-package" value="com.test.notification. localNotification" /> </feature> |
ÖÁ´ËÒ»¸öÍêÕûµÄ plugin ÒѾ½¨Á¢Íê³É¡£È»ºóÎÒÃÇÖ»ÐèÒªÔÚ JavaScript ¶Ëµ÷ÓÃÕâ¸ö plugin
¾Í¿ÉÒÔ´¥·¢Ò»¸ö notification£¬¾ßÌåµ÷Ó÷½Ê½²Î¿¼Çåµ¥ 4£º
Çåµ¥ 4. ¿Í»§¶Ëµ÷ÓÃϵͳ notification
var ws= new WebSocket("ws://localhost:8080/PushNotification"); ws.onopen = function (event) { console.log("connected to server"); }; ws.onmessage = function (event) { var notifys = jQuery.parseJSON(evnt.data); var message = ["New Job Notification",notifys[0].message]; cordova.plugins.localNotification.sendNotify(message); }; |
µ±Ö´ÐÐ cordova.plugins.localNotification.sendNotify ·½·¨Ê±£¬cordova
»áÏò webview ·¢ËÍÒ»¸ö XMLHttpRequest ÇëÇó²¢ÇÒ°üº¬µÄ²ÎÊýÖÐÓÐ sendNotify
¹Ø¼ü×Ö£¬Õâ¸öÇëÇó»á±»ÎÒÃÇÒѾʵÏÖµÄ Cordova plugin À¹½Ø×¡£¬²¢ÇÒÖ´ÐÐÒ»¸ö android
Notification£¬Õâ¸öʱºòÒ»¸öÏûÏ¢¾Í³É¹¦ÍÆË͵½¿Í»§¶Ë¡£ÈçÏÂͼ
ͼ 3. ͨ¹ý websocket server ³É¹¦½«ÐÅÏ¢ÍÆË͵½¿Í»§¶Ë

Websocket ÏûÏ¢ÍÆË͵ÄÀû±×
Websocket ÏûÏ¢ÍÆËÍÓŵã :
¿ª·¢ÖÜÆÚ¶Ì£¬Î¬»¤³É±¾µÍ¡£
ÏûÏ¢²»¾×ªµÚÈý·½·þÎñÆ÷£¬Ö±½ÓÓÉ·þÎñÆ÷·¢Ë͵½¿Í»§¶Ë£¬°²È«ÐԺ᣻ùÓÚ GCM »òÕß APNS µÄÏûÏ¢ÍÆËÍ»á°ÑÏûÏ¢·¢ËÍ
GCM ·þÎñÆ÷»ò APNS ·þÎñÆ÷£¬ÔÙÓÉËûÃÇת·¢µ½¿Í»§¶Ë¡£
×Ô¼º¿ª·¢·þÎñ¶Ë£¬¿ÉÀ©Õ¹ÐԺá£
¶ÔÓÚ¿Í»§¶Ë¶øÑÔ£¬³¤Á¬½Ó±ÈÂÖѯµÄ·½Ê½ÐÔÄܺͼ°Ê±ÐÔ¸üºÃ¡£
Websocket ÏûÏ¢ÍÆËÍȱµã :
³¤Á¬½ÓÀË·Ñ·þÎñ¶Ë×ÊÔ´¡£
²»Äܺǫ́ÔËÐУ¬Ò»µ© app Í˳ö¾Í²»ÄÜÊÕµ½ notification¡£
ÓÉÓÚ·þÎñÆ÷±£³Ö¶à¸ö³¤Á¬½Ó£¬ÐÔÄܽ«»áϽµ£¬×î´óÁ¬½ÓÊýÒ²»áÓÐÏÞÖÆ¡£
×ܽá
Ëæ×ÅÊÖ»úÐÔÄܵIJ»¶Ï¸ÄÉÆ£¬hybrid app µÄÐÔÄܼ¸ºõ½Ó½üÔÉú app µÄÌåÑ飬×îÖØÒªµÄÊÇ»¹¿ÉÒÔ¿çÆ½Ì¨£¬ËùÒÔ
hybrid app Ô½À´Ô½Êܵ½¿ª·¢ÕßµÄÇàíù£¬ÓÈÆäÊÇǰ¶Ë¿ª·¢Õß¡£ËûÃǼÈÄÜÀûÓÃÊìϤµÄ html5, css3,angular
js ×÷ΪÖ÷Ì忪·¢ÓïÑÔ£¬ÓÖÄÜÊÊʱÀûÓà Cordova plugin µ÷ÓõײãµÄ API£¬ÕâÑù¼È½ÚÔ¼ÁË¿ª·¢³É±¾£¬ÓÖÄÜÌåÑéÔÉú¿ª·¢µÄÀÖȤ¡£±¾ÎľÍÀûÓÃ
Cordova ¿çÒÆ¶¯Æ½Ì¨¿ò¼Ü£¬¿ª·¢ÁËÒ»×éµ÷Óà local notification µÄ android
plugin£¬ ǰ¶Ë´úÂë²»ÐèÒª¸Ä±ä£¬ÎÒÃÇÖ»ÐèÒª±àд iOS ¶ËµÄ local notification
¾Í¿ÉÒÔÊÊÅäһϠios ƽ̨¡£ÀûÓÃÕâÖÖ·½·¨£¬ÎÒÃÇͬÑù¿ÉÒÔÀ©Õ¹¸ü¶à plugin¡£¶ø websocket
×÷Ϊ HTML5 µÄÐÂÌØÐÔ£¬Ëü²»Ïñ´«Í³µÄÂÖѯ²éѯ·þÎñ¶ËµÄ·½Ê½¶øÊÇÖ÷¶¯ push µÄ·½Ê½Ïò¿Í»§¶ËÍÆËÍÏûÏ¢£¬websocket
ÕâÖÖ³¤Á¬½ÓµÄÌØÐÔ²»½öÊʺÏÏûÏ¢ÍÆËÍ£¬¶ÔÓÚʵʱÔÚÏßÁÄÌ칦ÄÜÒ²ÊǷdz£Êʺϡ£±¾ÎľͽáºÏÁË websocket ºÍ
Cordova µÄÌØÐÔ¿ª·¢ÁË»ìºÏÒÆ¶¯µÄÏûÏ¢ÍÆËÍ¡£
|