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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
58 ͬ³Ç iOS ¿Í»§¶Ë×é¼þ»¯ÑݱäÀú³Ì
 
×÷Õߣº ÔøÇì¡ À´Ô´£º¼«¿ÍÍ·Ìõ ·¢²¼ÓÚ£º 2017-5-3
  3985  次浏览      29
 

µÚÒ»°æ App ¼Ü¹¹

ÔçÔÚ 2010 Äê 58 ͬ³Çµ®ÉúµÚÒ»°æ iOS ¿Í»§¶Ë£¬°´ÕÕ´«Í³µÄ MVC ģʽȥÉè¼Æ£¬´¿ Native Ò³Ãæ£¬ÕâʱµÄ¹¦ÄܽÏΪ¼òµ¥£¬¼Ü¹¹Ò²ÊÇÈç´Ë£¬´ÓÉÏÖÁÏ·ÖΪ UI Õ¹ÏÖ¡¢ÒµÎñÂß¼­¡¢Êý¾Ý·ÃÎÊÈý²ã£¬Èçͼ 1 Ëùʾ¡£ºÍͬÆÚÆäËû¹«Ë¾Ò»Ñù£¬App µÄ³ö·¢µãÊÇΪÁË¿ìËÙÇÀÕ¼Êг¡£¬²ÉÈ¡¡°¶Ìƽ¿ì¡±µÄ·½Ê½¿ª·¢¡£´¿ Native µÄ App ÔÚÔçÆÚÒµÎñÁ¿²»ÊÇÌ«´óµÄÇé¿öÏ£¬ÄÜÂú×ãÒµÎñµÄÐèÇó¡£

ͼ 1 App ÔçÆÚ¼Ü¹¹

µÚ¶þ°æ¼Ü¹¹

Hybrid ¿ò¼ÜÐèÇó

ÓÉÓÚÆ»¹ûÉóºËÖÜÆÚ½Ï³¤£¬ÒµÎñÐèÇó²»¶ÏÔö´ó£¬ÓÐЩҵÎñÈç¹ûÓà Native ½øÐпª·¢£¬¹¤×÷Á¿´óͶÈëÈËÔ±½Ï¶à£¬Ò²²»Äܶ¯Ì¬¸üУ¬Èç 58 App µÄ´óÀà¡¢ÁÐ±í¡¢ÏêÇéÒ³Ãæ¡£ÕâÖÖÇé¿öÏ£¬Óà HTML5 ÊDZȽÏÁ÷ÐеĽâ¾ö·½Ê½£¬Óɴ˲úÉúÁ˵ڶþ°æ¼Ü¹¹£¬Èçͼ 2 Ëùʾ£¬ÔÚ UI ²ãÌí¼ÓÁË HTML5 Ò³Ãæ¼° Hybrid ½»»¥¿ò¼Ü¡£

ͼ 2 ´ø Hybrid µÄ¼Ü¹¹

µ±Ê± 58 App Éè¼ÆÊ±ÓÃÓÚ¼ÓÔØ HTML5 µÄ×é¼þÊÇ UIWebView£¬Ò²Ö»ÄÜʹÓÃÕâ¸ö£¨±Ëʱ»¹Ã»ÓÐ WKWebView£©£¬µ«ÊµÏÖÆðÀ´Óм¸¸öÎÊÌâÊÇÐèÒª½â¾öµÄ£º

Ôõô½â¾ö Hybrid ÖÐ Web ºÍ Native ½»»¥ÎÊÌ⣬ÈçÓû§µã»÷Ò»¸öÀà±ð£¬Äܵ÷Æð Native µÄһЩ·½·¨È¥Ö´ÐÐÏà¹ØÒ³ÃæÌø×ª»òдÈÕÖ¾¡£

ÈçºÎÌá¸ß HTML5 Ò³ÃæµÄ¼ÓÔØËÙ¶È£¬HTML5 Ò³Ãæ¼ÓÔØÊ±ÒªÏÂÔØÒ»Ð© JavaScript¡¢CSS ¼°Í¼Æ¬×ÊÔ´£¬ÊDZȽϺÄʱµÄ¡£

ÉèÖûº´æ

ΪÁË·½±ãÃèÊö£¬±¾ÎÄÏȽéÉÜÈçºÎÌá¸ß HTML5 Ò³Ãæ¼ÓÔØËٶȵÄÎÊÌâ¡£

¶ÔÓÚһЩ·ÃÎÊ±È½ÏÆµ·±µÄÒ³Ãæ£¬Èç´óÀàÁбíÏêÇ飬ÎÒÃÇÔçÆÚ²ÉÓõͼÊÇ HTML5 Ò³Ãæ¡£Òª¼ÓËÙÕâÐ©Ò³ÃæµÄäÖȾ£¬¾ÍÒªÏë°ì·¨ÌáÉý×ÊÔ´µÄ¼ÓÔØ¡£ÄÇôÈçºÎʵÏÖÄØ£¿Ê×ÏÈÏëµ½µÄÊÇʹÓûº´æ£¬ÎÒÃÇ¿ÉÒÔ°ÑÕâÐ©Ò³ÃæµÄ×ÊÔ´ÄÚÖõ½ App ÖÐËæ°æ±¾·¢²¼¡£

ÓÉÓÚ UIWebView ÔÚ·¢ÇëÇóµÄʱºò¶¼»á×ß NSURLCache µÄÕâ¸ö·½·¨£º

- (nullable NSCachedURLResponse*)cachedResponseForRequest:(NSURLRequest *)request;

ÎÒÃÇ¿ÉÒÔ´Ó NSURLCache ÅÉÉú³ö×ÓÀà WBHybrid Component£¬¸´Ð´ cachedResponseForRequest:·½·¨£¬ÔÚÕâÖ®ÖмÓÔØ App µÄÄÚÖÃ×ÊÔ´£¬¾ßÌå¼ÓÔØ²ßÂԿɼûͼ 3¡£

ͼ 3 »º´æ´¦ÀíÁ÷³Ì

ÆäÖУ¬H5ViewController Ϊ HTML5 ÔØÌåÒ³Ãæ£¬WBCacheHandler ΪרÃÅ´¦ÀíÄÚÖÃ×ÊÔ´À࣬ÓÃÓÚ¼ÓÔØ¡¢²éÕÒ¡¢ÏÂÔØ¡¢±£´æÄÚÖÃ×ÊÔ´¡£URL µÄ query ÖÐÉèÖð汾ºÅ²ÎÊý cachevers ×÷Ϊ×ÊÔ´»º´æµÄ±êʶ£¬ÆäֵΪÊý×ÖÀàÐÍ£¬¼ÙÉè cachev1£¬ÆäÓëÄÚÖÃ×ÊÔ´Öеİ汾ºÅÈçΪ cachev2 ½øÐжԱȣ¬Èô cachev2>= cachev1£¬±íʾÄÚÖÃ×ÊÔ´ÖÐÊÇ×îÐÂÊý¾Ý£¬Ö±½Ó¸øÇëÇó·µ»ØÊý¾Ý£»·ñÔòÏÂÔØÐµÄÄÚÖÃ×ÊÔ´£¬Í¬Ê±¸ù¾Ý cachev1- cachev2 µÄ²îÖµ½øÐÐÅжϣ¬ÈçÉèÖÃÒ»¸öÁÙ½çÖµ x£¬Èô²îÖµ´óÓÚ x£¬Ôò˵Ã÷ÄÚÖÃ×ÊԴΪ¾É£¬¸øÇëÇó·µ»Ø nil£¬·ñÔò·µ»ØÄÚÖÃÊý¾Ý£¬ÈÃÇëÇóÏÈÓûº´æÊý¾Ý£¬ÏÂ´ÎÆô¶¯Ê±ÔÙÓÃÐÂÊý¾Ý¡£

ÄÚÖÃÊý¾Ý²ÉÓõÄÊÇÒ»¸ö bundle °ü£¬Èçͼ 4 Ëùʾ£¬CacheResources.bundle ΪÄÚÖðüÃû£¬ÀïÃæ°üº¬ÁËÒ»¸öË÷ÒýÎļþºÍÈô¸É¸öÄÚÖÃÊý¾ÝÎļþ£¬ÆäÖÐË÷ÒýÎļþÖÐÿÏî item ¸ñʽΪ key¡¢°æ±¾ºÅºÍÎļþÃû¡£

ͼ 4 »º´æ°ü½á¹¹

ÏëҪʹÓÃ×Ô¶¨ÒåµÄ NSURLCache£¬±ØÐëÔÚ App Æô¶¯Ê±³õʼ»¯ WBHybridComponent£¬²¢½øÐÐÉèÖã¬Ì滻ĬÈ쵀 Cache£¬×¢Ò⣺Õâ¸öÉèÖñØÐëÔÚËùÓÐÇëÇó֮ǰ½øÐУ¬·ñÔòÉèÖÃʧЧ£¬¶øÊDzÉÓÃĬÈ쵀 NSURLCache ʵÀý£¬ÎÒÃÇÔø¾­²È¹ýÕâ¸ö¿Ó¡£

// URLCache³õʼ»¯
WBHybridComponent *hybridComp = [[WBHybridComponent alloc] initWithMemoryCapacity
:MEM_CAPACITY diskCapacity:DISK_CAPACITY diskPatch:nil];
[NSURLCache setSharedURLCache:hybridComp]

»ùÓÚ AJAX µÄ Hybrid ¿ò¼Ü

¶ÔÓÚÇ°ÃæËùÁеĵÚÒ»¸öÎÊÌ⣬ÎÒÃÇÊÇÒªÉè¼ÆÒ»¸ö Web/Native µÄ Hybrid ¿ò¼Ü¡£½»»¥Ö÷Òª°üÀ¨Á½²¿·ÖÄÚÈÝ£¬Ò»ÊÇ Native µ÷Óà Web£¬Õâ¸ö±È½Ï¼òµ¥£¬Ö±½Óͨ¹ý UIWebView µÄ stringByEvaluatingJavaScriptFromString:Ö´ÐÐÒ»¶Î JS ½Å±¾£¬²¢·µ»ØÖ´Ðнá¹û£¬±¾ÎÄÖ÷Òª·ÖÏí Web µ÷ Native µÄ·½·¨¡£

¶ÔÓÚ Web µ÷ Native ½»»¥µÄ·½Ê½£¬ÎÒÃDzÉÓÃÒì²½ AJAX ½øÐУ¬´´½¨Ò»¸ö XMLHttpRequest ¶ÔÏó£¬Ö´ÐÐ send()½øÐÐÒì²½ÇëÇó£¬Native À¹½Ø¡£

xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
// ´¦Àí·µ»ØÊý¾Ý
}
};
xmlhttp.open("GET", "nativechannel://?paras=...¡±, true);
xmlhttp.send();

ÓÉÓÚ XMLHttpRequest µÄ·½Ê½ÊǽøÐÐÒ³Ãæ¾Ö²¿Ë¢Ð£¬²¢²»Äܱ» UIWebViewDelegate ´úÀíµÄ - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:

(UIWebViewNavigationType)navigationType ·½·¨À¹½Øµ½£¬Éè¼Æµ½ÕâÀïÓÖ³öÏÖÁËÐÂÎÊÌ⣬ÈçºÎÈà Native ÄÜÀ¹½Øµ½ AJAX ÇëÇóÄØ£¿

¾­¹ýÒ»·¬µ÷ÑУ¬ÎÒÃÇÕÒµ½ÁËÓÃÓÚ»º´æµÄ NSURLCache£¬¶ÔÓÚ UIWebView ÖеÄËùÓÐÇëÇ󣨰üÀ¨ AJAX ÇëÇ󣩶¼»á×ß NSURLCache¡£Òò´Ë£¬ÎÒÃǾö¶¨²ÉÓø´Óûº´æÖÐµÄ WBHybridComponent À¹½Ø AJAX ÇëÇ󣬾ßÌå Web µ÷ Native µÄ½»»¥Éè¼ÆÈçͼ 5 Ëùʾ¡£

ͼ 5 Hybrid ¿ò¼Ü´¦ÀíÁ÷³Ìͼ

ÆäÖУ¬H5ViewController Ϊ HTML5 µÄÔØÌåÒ³£¬WBWebView ÊÇ UIWebView ÅÉÉúÀà¡£WBWebView ÖÐͨ¹ý AJAX ·¢³öµÄÒì²½ÇëÇó£¬ÔÚ WBHybridComponent Öб»À¹½Ø£¬ÔÙͨ¹ý WBHybridJSHandler ÖÐµÄ dic ±íÕÒµ½¶ÔÓ¦µÄ WBActionAnalysis ¶ÔÏó£¬È»ºóÔÚ WBActionAnalysis ÖзÖÎöÒì²½ÇëÇó´«¹ýÀ´µÄЭÒ飬ȡ³ö action ×ֶΣ¬ÔÙ¸ù¾Ý action ÖµÕÒµ½ delegate ¼´ H5ViewController ÖжÔÓ¦µÄ·½·¨¡£

AJAX ·¢³öµÄÇëÇóÎÒÃÇÔ¼¶¨Îª:nativechannel://?paras=<json ЭÒé>£¬WBHybridComponent ÔÚÀ¹½ØÊ±ÅÐ¶Ï URL ÖÐÊÇ·ñΪ nativechannel µÄЭÒéÍ·£¬Èç¹ûÊÇÔòΪ Web µ÷Æð Native ²Ù×÷£¬ÐèÒª½øÐкóÐø Native ´¦Àí£»·ñÔò·Å¹ý½øÐÐÆäËû´¦Àí¡£<json ЭÒé> µÄ¼ò»¯¸ñʽÈçͼ 6 Ëùʾ£¬ÕâÊǶþÊÖ³µ´óÀàÒ³µã»÷¶þÊÖ³µÀàÄ¿ Web µ÷ Native ʱ AJAX ´«¹ýÀ´µÄЭÒé¡£

ͼ 6 Web µ÷ Native ´«ÊäЭÒé

¸Ä½øµÄ Hybrid ¿ò¼Ü

Ç°ÃæÎÒÃÇÉè¼ÆµÄ Hybrid ¿ò¼Ü£¬Í¨¹ý´´½¨ XMLHttpRequest ¶ÔÏó·¢ËÍ AJAX ÇëÇóµÄ·½Ê½ÄÜ´ïµ½ Web µ÷ Native µÄÄ¿µÄ£¬Ò²¿ÉÒÔÂú×ãÒµÎñÉϵÄÐèÇó£¬ÔÚÒ»¶ÎÄÚ·¢»ÓÁËÖØÒª×÷Óᣵ«Ëæ×Åʱ¼äµÄÍÆÒÆ£¬Õâ¸ö Hybrid ¿ò¼Ü±©Â¶³öÁËһЩÎÊÌ⣬ÈçÏÂËùʾ¡£

ÎÒÃÇ·¢ÏÖ App ÖдæÔÚ´óÁ¿µÄÄÚ´æÐ¹Â¶£¬¾­²é×ï¿ý»öÊ×¾¹ÊÇ UIWebView¡£µ÷Ñз¢ÏÖ UIWebView ÖÐÖ´ÐÐ XMLHttpRequest Òì²½ÇëÇóʱ»áÓÐÄÚ´æÐ¹Â¶£¬ÍøÉÏÒ²ÓÐÈË̽ÌÖ¹ýÕâ¸öÎÊÌ⣬²Î¿¼²©ÎÄ£ºhttp://blog.techno-barje.fr//post/2010/10/04/UIWebView-secrets-part1-memory-leaks-on-xmlhttprequest/¡£

Hybrid ½»»¥·½Ê½Ó뻺´æ¶¼Ê¹Óà NSURLCache µÄÅÉÉúÀà WBHybridComponent Ö´ÐÐÀ¹½Ø£¬Æä³õÖÔÒ²ÊÇÓÃÓÚ»º´æ¡£ÎÒÃÇµÄ Hybrid ¿ò¼Ü½«Á½ÕßñîºÏÔÚÒ»Æð£¬Õâ¶ÔÓÚºóÆÚµÄ¿ª·¢ºÍÐÔÄÜÓÅ»¯¹¤×÷»á´øÀ´²»ÉÙÒþ»¼¡£

ÎÒÃÇÔÚ Hybrid ½»»¥µÄʱºòά»¤ÁËÒ»¸ö

//´´½¨iFrameÔªËØ
variFrame= document.createElement("iframe");
//ÉèÖÃiFrame¼ÓÔØµÄÒ³ÃæÁ´½Ó
iFrame.src= "nativechannel://?paras=<jsonЭÒé>";
//Ïòdom treeÖÐÌí¼ÓiFrameÔªËØ£¬ÒÔ´¥·¢ÇëÇó
document.body.AppendChild(iFrame);
//ÇëÇó´¥·¢ºó£¬ÒƳýiFrame
iFrame.parentNode.removeChild(iFrame);
iFrame = null;</jsonЭÒé>

ÓÉÓÚ iframe ·½Ê½ÊÇÕû¸öÒ³ÃæË¢Ð£¬ËùÒÔÄÜÖ´ÐÐ UIWebViewDelegate µÄ»Øµ÷·½·¨ - (BOOL)webView:(UIWebView )webView shouldStartLoadWithRequest:(NSURLRequest )request navigationType:(UIWebViewNavigationType)navigationType¡£ÎÒÃÇ¿ÉÒÔÖ±½ÓÔÚÕâ¸ö·½·¨ÖÐÀ¹½Ø Web µÄµ÷Æð£¬iframe ·½Ê½´¦ÀíÁ÷³ÌÈçͼ 7 Ëùʾ¡£

ͼ 7 iframe µÄ Hybrid ½»»¥·½Ê½

ͨ¹ý iframe µÄ·½Ê½£¬ÎÒÃÇ App ¼«´óµØ¼ò»¯ÁË Hybrid ¿ò¼ÜµÄ½»»¥Á÷³Ì£¬Í¬Ê±Ò²½â¾öÁËÄÚ´æÐ¹Â¶¡¢Ó뻺´æ¹¦ÄÜñîºÏ¡¢ÏûºÄ²»±ØÒªµÄÄÚ´æ¿Õ¼äµÈÎÊÌâ¡£

µÚÈý¸ö°æ±¾¼Ü¹¹

Ëæ×ÅÒµÎñµÄ½øÐУ¬Ò»Ð©Ðµļ¼ÊõÐèÇóÀ´ÁË£¬±ÈÈçÓÐЩ»ù´¡Ä£¿é¿ÉÒÔ´Ó App ÖжÀÁ¢³öÀ´½øÐжàÓ¦ÓüäµÄ¸´Óã»ÐèҪΪתת App Ìṩһ¸öÈÕÖ¾ SDK£»ÎªÎ¥Õ²éѯµÈ App ÌṩµÇ¼µÄ Passport SDK£»ÎªÆäËû App Ìṩһ¸ö¿É¶¨ÖÆ»¯µÄ·ÖÏí×é¼þµÈµÈ¡£

App ²ð·Ö×é¼þ

ÕâʱÎÒÃÇÆÈÇеØÐèÒªÔÚ¹¤³Ì´úÂë²ãÃæ¶ÔÔ­À´µÄ App ½øÐвð·Ö¡¢×é¼þ»¯¿ª·¢£¬Èçͼ 8 Ëùʾ¡£

ͼ 8 µÚÈý°æ¼Ü¹¹

ÎÒÃǽ« App ²ð·Ö³ÉÈý²ã£¬´ÓÏÂÖÁÉÏÒÀ´ÎÊÇ»ù´¡·þÎñ²ã¡¢»ù´¡ÒµÎñ²ã¡¢Ö÷ÒµÎñ²ã£º

»ù´¡·þÎñ²ãÀïµÄ×é¼þÊÇÓëÒµÎñÎ޹ص쬹©Éϲãµ÷Óã¬Ã¿¸ö×é¼þΪһ¸ö¹¤³Ì£¬ÈçÍøÂç¡¢Êý¾Ý¿â¡¢ÈÕÖ¾µÈ¡£ÕâÀïÃæÓÐЩ×é¼þÊÇÕû¸ö¹«Ë¾µÄÆäËû App Ò²ÔÚʹÓã¬ÈçÀÖ¸ßÈÕÖ¾£¬ÎÒÃǶÔÍâÌṩһ¸ö SDK£¬ÓëÎĵµÒ»Æð·ÅÔÚ´úÂë·þÎñÆ÷ÉϹ©ÆäËûÍŶÓʹÓᣲ¢½« 58 App ÖÐÓõ½µÄËùÓеÚÈý·½¿â¶¼¼¯ÖÐÆðÀ´´æ·Åµ½Ò»¸öרÃŵŤ³ÌÖУ¬Ò²±ãÓÚ¸üÐÂά»¤¡£

»ù´¡ÒµÎñ²ãÀïµÄ×é¼þÊÇÓëÒµÎñÏà¹ØµÄ£¬¹©Ö÷ÒµÎñ²ãʹÓã¬Ã¿¸ö×é¼þÊÇÒ»¸ö¹¤³Ì£¬ÈçµÇ¼¡¢·ÖÏí¡¢ÍÆËÍ¡¢IM µÈ£¬ÎÒÃÇ°Ñ Hybrid ¿ò¼ÜÒ²¹éÔÚÒµÎñ²ã¡£ÆäÖеǼ×é¼þÎÒÃÇ×ö³É Passport SDK£¬¹©¹«Ë¾ÆäËû App ¼¯³Éµ÷Óá£

Ö÷ÒµÎñ°üÀ¨ App Ê×Ò³¡¢¸öÈËÖÐÐÄ¡¢¸÷ÒµÎñÏßÒµÎñºÍµÚÈý·½½ÓÈëÒµÎñ£¬ÒµÎñÏßÒµÎñÖ÷Òª°üÀ¨·¢²¼¡¢´óÀà¡¢ÁÐ±í¡¢ÏêÇé¡£

¼¯³É¹ÜÀí×é¼þ

¹¤³Ì²ð·ÖÍêºó£¬¾ÍÊǹ¤³Ì¼¯³ÉÁË£¬ÎÒÃÇÓà Cocoapods ½«¸÷¹¤³Ì¼¯³Éµ½Ò»Æð±àÒëÔËÐкʹò°ü£¬¶ÔÓÚÿһ¸ö¹¤³ÌÅäÖúÃ.podspec Îļþ¡£ÔÚÅäÖà podfile Îļþʱ£¬µ±ÓÃÓÚ±¾µØ¿ª·¢Ê±£¬ÎÒÃÇͨ¹ý path µÄ·½Ê½½øÐм¯³É£¬²»ÓÃÁÙʱÏÂÔØ¹¤³Ì´úÂ룬ÈçÏÂËùʾ¡£

pod proj, :path => '~/58_ios_libs/proj¡¯

ÔÚ½øÐÐ Jenkins ´ò°üʱ£¬ÎÒÃÇͨ¹ý Git ·½Ê½½«´úÂëʵʱÏÂÔØ£º

pod proj, :git => 'git@gitlab.58corp.com:58_ios_team/proj.git',:branch => '1.0.0'¡£

GitLab ·þÎñ½øÐдúÂë¹ÜÀí

ÎÒÃÇÔÚ¾ÖÓòÍø´î½¨Ò»¸ö GitLab ·þÎñ£¬ÓÃÓÚ¹ÜÀíËùÓй¤³Ì´úÂ룬²¢ÉèÖúÿª·¢×é¼°ÏàÓ¦µÄȨÏÞ¡£Í¨¹ý GitLab »¹¿ÉÒÔʵÏÖÌá½»´úÂëÉóºË¡¢´úÂëºÏ²¢ÇëÇó¼°¹¤³Ì·ÖÖ§±£»¤¡£

µÚËİæ¼Ü¹¹

Ëæ×Å 58 App Óû§Á¿µÄ¾çÔö£¬¸÷ÒµÎñÏßÒµÎñѸËÙÔö³¤£¬¶Ô 58 App ÓÖÌá³öÁËÐÂÐèÇó£¬ÈçΪ¼Ó¿ì´óÀàÁбíÏêÇéÒ³ÃæµÄäÖȾËÙ¶È£¬ÐèÒª½«Ô­À´ÕâЩ HTML5 Ò³Ãæ Native »¯£»ÔÙÈç¸÷ÒµÎñÏßÒª¶¨ÖÆÁбíÏêÇéºÍɸѡÑùʽ¡£Ãæ¶ÔÈç´ËÖÚ¶àÐèÇó£¬ÏÔȻԭÀ´µÄ¼Ü¹¹ÒѾ­Âú×ã²»ÁË£¬ÄǾÍÐèÒªÎÒÃǽøÒ»²½¸Ä½ø¿Í»§¶Ë¼Ü¹¹£¬½«Ö÷ÒµÎñ²ã½øÒ»²½²ð·Ö¡£

Ö÷ÒµÎñ²ã²ð·Ö

ÎÒÃǶÔÖ÷ÒµÎñ²ã½øÐÐÒ»¸ö²ð·Ö£¬²ð·ÖºóµÄÕûÌå¼Ü¹¹Èçͼ 9 Ëùʾ£¬ÆäÖÐÿһ¸öÄ£¿éΪһ¸ö¹¤³Ì£¬Ò²ÊÇÒ»¸ö×é¼þ¡£

ͼ 9 µÚËİæ¼Ü¹¹

ÎÒÃǽ«Ê×Ò³¡¢·¢²¼¡¢·¢ÏÖ¡¢ÏûÏ¢ÖÐÐÄ¡¢¸öÈËÖÐÐļ°µÚÈý·½ÒµÎñµÈ¶¼´ÓÖ÷ÒµÎñ²ã²ð·Ö³öÀ´³ÉΪ¶ÀÁ¢¹¤³Ì¡£Í¬Ñù½«·¿²ú¡¢¶þÊÖ¡¢¶þÊÖ³µ¡¢»ÆÒ³¡¢ÕÐÆ¸µÈÒµÎñÏߵĴúÂë´ÓÔ­¹¤³ÌÀïÃæ°þÀë³öÀ´£¬Ã¿¸öÒµÎñÏß¶ÀÁ¢Ò»¹¤³Ì£¬½«ÁбíºÍÏêÇé·Ö±ð°þÀë³öÀ´²¢½øÐÐ Native »¯£¬ÎªÉϲãÒµÎñÏß¶¨Öƹ¦ÄÜÌṩ½Ó¿Ú¡£

ÒµÎñÏß²ð·ÖµÄʱºòÎÒÃÇ×ñÑ­ÒÔϼ¸¸öÔ­Ôò£º

¸÷ÒµÎñÏßÖ®¼ä²»ÄÜÓÐÒÀÀµ¹ØÏµ£¬ÒòΪÎÒÃǵÄÒµÎñÏßÔÚ¿ª·¢µÄÕû¸ö¹ý³ÌÖж¼ÊǶÀÁ¢ÔËÐе쬲»»áº¬ÓÐÆäËûÒµÎñÏß´úÂë¡£

·ÇÒµÎñÏß¹¤³Ì²»ÄܶԸ÷ÒµÎñÏßÓÐÒÀÀµ¹ØÏµ£¬¼´ËùÓÐÒµÎñÏß¶¼²»¼¯³É½ø App Ò²ÒªÄÜÕý³£±àÒë¡£

¸÷ÒµÎñÏß¶Ô·ÇÒµÎñÏß¹¤³Ì¿ÉÒÔ±£Áô±ØÒªµÄÒÀÀµ£¬ÈçÒµÎñÏß¶ÔÁбí×é¼þµÄÒÀÀµ¡£

ÔÚ²ð·Ö¹ý³ÌÖÐÎÒÃÇÒ²²ÉÈ¡ÁËһЩ²ßÂÔ£¬ÈçÔÚ²ð·ÖÕÐÆ¸ÒµÎñÏßʱ£¬ÏȰÑÕÐÆ¸ÒµÎñÏß´Ó¼¯³ÉºóµÄ¹¤³ÌÖÐɾ³ý£¬½øÐбàÒ룬»á³öÏÖ¸÷ÖÖ±àÒë´íÎó£¬ËµÃ÷ÊÇÓй¤³Ì¶ÔÕÐÆ¸ÒµÎñÏß´úÂë½øÐÐÒÀÀµ¡£ÈçºÎ½â¾öÕâЩÒÀÀµ¹ØÏµÄØ£¿ÎÒÃÇÖ÷ÒªÊǽâ¾öÏ໥ÒÀÀµ¹ØÏµ£¬ÕÐÆ¸ÒµÎñÏß¶Ô·ÇÒµÎñÏß¹¤³Ì¿Ï¶¨ÊÇÓÐÒ»¶¨µÄÒÀÀµ¹ØÏµ£¬Õâ¸öÏȱ£Áô£¬ÎÒÃÇÒª½â¾öµÄÊÇÆäËû×é¼þÉõÖÁ¿ÉÄÜÊÇÆäËûÒµÎñÏß¶ÔÕÐÆ¸µÄÒÀÀµ¡£ÎÒÃÇ×ܽáÁËÏ£¬Ö÷ÒªÓÃÁËÒÔϼ¸ÖÖ·½Ê½£º

½«ÒÀÀµµÄÎļþ»ò·½·¨Ï³Á£¬ÈçÓÐЩÎļþ²¢²»ÊÇÕÐÆ¸ÒµÎñÏßרÓõģ¬¿ÉÒÔ´ÓÕÐÆ¸ÖÐϳÁµ½ÆäËû¹¤³Ì£¬Í¬ÑùÓÐЩ·½·¨Ò²¿ÉÒÔϳÁ¡£

Runtime£¬ÕâÖÖ·½Ê½±È½ÏÆÕ±é£¬µ«Ò²²»ÐèÒªËùÓеط½¶¼Ó㬱Ͼ¹Æäά»¤³É±¾»¹ÊDZȽϸߵġ£

Category ·½Ê½£¬Èç¸öÈËÖÐÐÄ×é¼þÖз½·¨ funA Òªµ÷ÓÃÕÐÆ¸×é¼þÖеķ½·¨ funB£¬µ« funB µÄʵÏÖÊÇÒªÒÀÀµÕÐÆ¸ÄÚ²¿´úÂ룬ÕâÖÖÇé¿öϸöÈËÖÐÐÄÊÇÒÀÀµÕÐÆ¸ÒµÎñÏߵģ¬ÀíÂÛÉÏÕÐÆ¸¿ÉÒÔÒÀÀµ¸öÈËÖÐÐÄ£¬¶ø²»Ó¦¸Ã·´¹ýÀ´ÒÀÀµ¡£½â¾ö°ì·¨ÊÇ¿ÉÒÔÔÚ¸öÈËÖÐÐÄÌí¼ÓÒ»¸öÀ࣬Èç ClassA£¬ÀïÃæÌí¼Ó·½·¨ funB£¬µ«ÊµÏÖΪ¿Õ£¬Èç¹û´ø·µ»ØÖµ¿ÉÒÔ·µ»ØÒ»¸öĬÈÏÖµ£¬ÔÙÔÚÕÐÆ¸ÖÐÌí¼ÓÒ»¸ö ClassA µÄÀà±ð ClassA+XX£¬½«Ô­À´ÕÐÆ¸Öеķ½·¨ funB ·ÅÈë ClassA+XX£¬ÕâÑùÈç¹ûÕÐÆ¸¼¯³É½øÀ´£¬¾Í»áÖ´ÐÐ ClassA+XX ÖÐµÄ funB ·½·¨£¬·ñÔòÖ´ÐиöÈËÖÐÐÄ×Ô¼ºµÄ funB ·½·¨¡£

Ìø×ª×ÜÏß

×ÜÏß°üÀ¨ UI ×ÜÏߺͷþÎñ×ÜÏߣ¬Ç°ÕßÖ÷Òª´¦Àí×é¼þ¼äÒ³Ãæ¼äµÄÌø×ª£¬ÓÈÆäÊÇÔÚÖ÷ÒµÎñ²ã£¬UI ×ÜÏßÓÃµÃ±È½ÏÆµ·±¡£·þÎñ×ÜÏßÖ÷Òª´¦Àí×é¼þ¼äµÄ·þÎñµ÷Óã¬ÕâÀïÖ÷Òª½²Ìø×ª×ÜÏß¡£ÔÚÖ÷ÒµÎñ²ã£¬±»·â×°³ÉµÄ¸÷¸ö×é¼þÐèҪͨ¹ý UI ×ÜÏß½øÐÐÒ³ÃæÌø×ª£¬ÎÒÃÇÉè¼ÆÁËÒ»¸ö×Ü·Ö·¢ÖÐÐĺÍ×Ó·Ö·¢ÖÐÐĵÄģʽ½øÐд¦Àí£¬Èçͼ 10 Ëùʾ¡£

ͼ 10 UI Ìø×ª×ÜÏß

Ö÷ÒµÎñ²ãÿ¸ö×é¼þÄÚ¶¼ÓÐÒ»¸ö×Ó·Ö·¢ÖÐÐÄ£¬ËüµÄ´¦ÀíÂß¼­Óɸ÷×é¼þÄÚÀ´½øÐУ¬µ«±ØÐëʵÏÖһЩ¹²Í¬µÄ½Ó¿Ú£¬ÇÒÕâ¸ö×Ó·Ö·¢ÖÐÐÄÐèÒª½øÐÐ×¢²á¡£µ±×é¼þÄÚÐèÒª½øÐÐ UI Ìø×ªÊ±£¬µ÷ÓÃ×Ü·Ö·¢ÖÐÐÄ£¬½«Ìø×ªÐ­Òé´«Èë×Ü·Ö·¢ÖÐÐÄ£¬×Ü·Ö·¢ÖÐÐĸù¾ÝЭÒéÖÐ×é¼þ±êʶ£¨ÈçÒµÎñÏß±êʶ£©ÕÒµ½¶ÔÓ¦µÄÄ¿±ê×é¼þ×Ó·Ö·¢ÖÐÐÄ£¬½«Ìø×ªÐ­Òé͸´«µ½¶ÔÓ¦µÄ×Ó·Ö·¢ÖÐÐÄ¡£½ÓÏÂÀ´µÄÌø×ªÓÉ×Ó·Ö·¢ÖÐÐÄÈ¥Íê³É¡£ÕâÑùµÄ·½Ê½¼«´ó½µµÍÁË×é¼þ¼äµÄñîºÏ¶È¡£

UI ×ÜÏßÖеÄÌø×ªÐ­ÒéÎÒÃÇÔ­À´Óà JSON ÐÎʽ£¬ºóÀ´Í³Ò»µ÷ÕûΪ URL µÄ·½Ê½£¬½« m µ÷Æð¡¢ä¯ÀÀÆ÷µ÷Æð¡¢push µ÷Æð¡¢Íⲿ App µ÷ÆðºÍ App ÄÚÌø×ªÍ³Ò»´¦Àí¡£

ÐÂÍ³ÌøÐ­Òé URL ¸ñʽÈçÏ£º

wbmain://jump/job/list? ABMark£½markID&params=

ÆäÖУ¬wbmain Ϊ 58 App µÄ scheme£¬job ΪÕÐÆ¸ÒµÎñÏß±êʶ£¬list Ϊµ½ÁбíÒ³£¬ABMark Ϊ AB ²âÌø×ªÓõıêʶ ID£¬ºóÃæ»áϸ½²£¬params Ϊ´«¹ýÀ´µÄһЩ²ÎÊý£¬ÈçÊÇ·ñÐèÒª¶¯»­£¬push »¹ present ·½Ê½ÈëÕ»µÈ¡£ÎªÁ˼æÈÝÀÏЭÒ飬ÎÒÃǽ«Ô­À´Ð­ÒéÖеÄÒ»²¿·ÖÄÚÈÝÖ±½Ó͸´«µ½ params ÖС£

AB ²âÌø×ª

¶ÔÓÚÖ¸¶¨Ìø×ª URL£¬ÓÐÊ±Ìø×ªµÄÄ¿±êÒ³ÃæÊDz»¹Ì¶¨µÄ£¬ÈçÎÒÃǵķ¢²¼Ò³Ã棬ÓÐ HTML5 ºÍ React Native Á½Ì×Ò³Ãæ£¬Èç¹û React Native Ò³Ãæ³öÁËÎÊÌ⣬¿ÉÒÔ½« URL ×öÐÞ¸ÄÌøµ½ HTML5 Ò³Ãæ¡£¾ßÌå·½°¸ÊÇ·þÎñÆ÷Ï·¢Ò»¸ö·ÓÉ±í£¬Ã¿¸ö±íÏîÓÐÒ»¸ö ID ºÍ¶ÔӦеÄÌø×ª URL£¬Ã¿¸ö±íÏîÉèÖÃÓйýÆÚʱ¼ä¡£Ìø×ªµÄ URL ¿ÉÒÔ´øÓÐ AB ²âÌø×ªÓõıêʶ ID£¬¼´ markID¡£Èç¹ûÓÐÕâ¸ö±êʶ£¬Ìø×ªÊ±¾ÍÈ¥Óë·ÓɱíÖеıíÏîÆ¥Å䣬Èç¹ûÃüÖо͸ÄÓ÷ÓɱíÖÐµÄ URL Ìø×ª£¬·ñÔò»¹ÓÃÔ­À´µÄ URL Ö´ÐÐÌø×ª£¬´ó¸ÅÁ÷³ÌÈçͼ 11 Ëùʾ¡£

ͼ 11 AB ²âÌø×ªÁ÷³Ìͼ

¾²Ì¬¿â·½°¸

ΪÁËÌá¸ßÕû¸ö App µÄ±àÒëËÙ¶È£¬ÎÒÃÇΪÿ¸ö¹¤³ÌÅäÖÃÒ»¸ö¶ÔÓ¦µÄ¿â¹¤³Ì£¬ÀïÃæÔ¤ÏÈÓÉÔ´Â빤³Ì±àÒë³öÀ´Ò»¸ö¶ÔÓ¦µÄ¾²Ì¬¿â£¬Èçͼ 12 Ëùʾ¡£

ͼ12 Ô´Âë¿âÓ뾲̬¿â¶ÔÓ¦¹ØÏµ

¿ª·¢ÈËÔ±¿ÉÒÔ½«È¨ÏÞÄÚµÄÔ´ÂëºÍ¾²Ì¬ÏÂÔØµ½±¾µØ£¬°´Ðè½øÐÐÔ´ÂëºÍ¿â»ìºÏ¼¯³É£¬Èç¶ÔÓÚÕÐÆ¸ÒµÎñÏß RD£¬ÎÒÃÇÖ»Ðè¹ØÐÄÕÐÆ¸ÒµÎñÏßÔ´Â빤³Ì£¬²»ÐèÒªÆäËûÒµÎñÏßµÄÔ´Âë»ò¾²Ì¬¿â£¬Ê£ÏµĹ¤³Ì¿ÉÒÔÑ¡ÔñÈ«²¿Óþ²Ì¬¿â½øÐм¯³É¡£

¶ÔÓÚ Jenkins ´ò°üƽ̨£¬ÎÒÃÇÒ²¿ÉÒÔ¸ù¾ÝÐèÇóÊʵ±ÔÚÔ´ÂëºÍ¾²Ì¬¿âÖ®¼ä×öÑ¡Ôñ¡£¶ÔÓÚÒ»Ð©ÌØÊâµÄ¹¤³Ì£¬ÈçµÚÈý·½¿â¹¤³Ì ThirdComponent£¬Ò»°ãÒ²²»»á±ä£¬¿ÉÒÔÖ±½Ó½ÓÈë¶ÔÓ¦µÄ¾²Ì¬¿â¹¤³Ì ThirdComponentLib¡£

×ܽá

ÒµÎñÔÚ²»¶Ï±ä»¯£¬ÐèÇó³ÖÐøÔö¶à£¬¼¼ÊõÒ²ÔÚ²»¶ÏµØ¸üУ¬ÎÒÃǵļܹ¹Ò²ÐèÒª²»¶Ï½øÐе÷ÕûºÍÉý¼¶£¬¼Ü¹¹µÄÑݽøÊÇÒ»ÏÆÚµÄÈÎÎñ¡£

   
3985 ´Îä¯ÀÀ       29
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶Ë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ÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ