Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
»ìºÏÒÆ¶¯Ó¦ÓõÄÏûÏ¢ÍÆËÍÖ® websocket
 
 À´Ô´£ºibm ·¢²¼ÓÚ£º2017-2-16
  2319  次浏览      28
 

»ìºÏÒÆ¶¯Ó¦ÓÃÏûÏ¢ÍÆËÍ

»ìºÏÓ¦ÓÃÒ»°ãʹÓà 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 µÄÌØÐÔ¿ª·¢ÁË»ìºÏÒÆ¶¯µÄÏûÏ¢ÍÆËÍ¡£

 

   
2319 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ