ios 建立案頭捷徑

來源:互聯網
上載者:User

標籤:ios

iOS上建立案頭捷徑
應用情境:
在iOS裝置案頭建立app內某一個模組或頁面的捷徑,通過該捷徑可以直接進入相應模組或頁面。目前app內有該功能的有高德一鍵導航,360安全衛士的小火箭。

技術原理:
在iOS開發中可以使用openUrl的方式開啟一個網頁,並通過Safari瀏覽器的發送到主畫面從而建立一個網頁的捷徑,這篇文章就是利用這個方法來建立一個app的案頭捷徑。首先在app內部開啟一個輕量級的HttpServer,利用openurl:127.0.0.1 的方式開啟本地頁面,利用html的重新導向將頁面指向一個包含建立案頭捷徑所有資訊的,遵守data協議的url,這時利用Safari的發送到主畫面,就可以達到我們的要求。

技術痛點:
1. 建立一個本地的httpServer。
2. 建立本地頁面以及data協議url時的編碼格式。

3. 在Safari未啟動時或者app進入後台時,本地httpserver服務啟動延遲。

- (void)createLinkWithDict:(NSDictionary *)dict desktopLinkType:(SyDesktopLinkType)linkType;{    NSString *title = [dict objectForKey:deskLinkTitle];    NSString *urlScheme = [dict objectForKey:deskLinkUrlScheme];        NSString *moduleID = [dict objectForKey:deskLinkModuleTag];    NSString *imageName = [dict objectForKey:deskLinkIconName];        NSMutableString *htmlStr = [[NSMutableString alloc] init];    [htmlStr appendString:@"<html><head>"];    [htmlStr appendString:@"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"];        NSMutableString *taragerUrl = [NSMutableString stringWithFormat:@"0;url=data:text/html;charset=UTF-8,<html><head><meta content=\"yes\" name=\"apple-mobile-web-app-capable\" /><meta content=\"text/html; charset=UTF-8\" http-equiv=\"Content-Type\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\" /><title>%@</title></head><body bgcolor=\"#ffffff\">",title];        NSString *htmlUrlScheme = [NSString stringWithFormat:@"<a href=\"%@",urlScheme];        NSString *dataUrlStr = nil;    if(linkType == SyDesktopLinkType_One){                dataUrlStr =  [NSString stringWithFormat:@"%@=%@&%@=%@\" id=\"qbt\" style=\"display: none;\"></a>",deskLinkModuleTag,moduleID,deskLinkType,[NSString stringWithInt:linkType]];            }else if (linkType == SyDesktopLinkType_Two){        //業務產生器功能           }else if(linkType == SyDesktopLinkType_Three){           }        UIImage *image = [UIImage imageNamed:imageName];    NSData *imageData = UIImagePNGRepresentation(image);        NSString *base6ImageStr = [imageData base64Encoding];// 轉碼//dataUrlStr = [dataUrlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];    NSString *imageUrlStr = [NSString stringWithFormat:@"<span id=\"msg\"></span></body><script>if (window.navigator.standalone == true) {    var lnk = document.getElementById(\"qbt\");    var evt = document.createEvent('MouseEvent');    evt.initMouseEvent('click');    lnk.dispatchEvent(evt);}else{    var addObj=document.createElement(\"link\");    addObj.setAttribute('rel','apple-touch-icon-precomposed');    addObj.setAttribute('href','data:image/png;base64,%@');",base6ImageStr];        NSString *lastHtmlStr = @"document.getElementsByTagName(\"head\")[0].appendChild(addObj);    document.getElementById(\"msg\").innerHTML='<div style=\"font-size:12px;\">點擊頁面下方的 + 或 <img id=\"i\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTU1NEJDMzMwQTBFMTFFM0FDQTA4REMyNUE4RkExNkEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTU1NEJDMzQwQTBFMTFFM0FDQTA4REMyNUE4RkExNkEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5NTU0QkMzMTBBMEUxMUUzQUNBMDhEQzI1QThGQTE2QSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5NTU0QkMzMjBBMEUxMUUzQUNBMDhEQzI1QThGQTE2QSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlMy2ugAAAAbUExUReXy/yaS/4nE/67W//n8/+n0/0yl/wB//////1m3cVcAAAAJdFJOU///////////AFNPeBIAAABDSURBVHjaxNA7DgAgCAPQoiLc/8T+EgV1p0ubxwb0E+xR8SBICBcyJUnEHktW0VwOykivvSaus6kA1CD0sZ+3aQIMAJIgC+S9X9jmAAAAAElFTkSuQmCC\"> 按鈕,在彈出的菜單中選擇[添加至主畫面],即可將選定的功能添加到主畫面作為捷徑。</div>';}</script></html>";        [taragerUrl appendString:htmlUrlScheme];    [taragerUrl appendString:dataUrlStr];    NSString *dataUrlEncode = [taragerUrl urlUTF8Encoded];        NSString *imageUrlEncode = [imageUrlStr urlUTF8Encoded];    NSString *lastHtmlStrEncode = [lastHtmlStr urlCFEncoded];            [htmlStr appendFormat:@"<meta http-equiv=\"REFRESH\" content=\"%@%@%@\">",dataUrlEncode,imageUrlEncode,lastHtmlStrEncode];    [htmlStr appendString:@"</head></html>"];        NSData *data = [htmlStr dataUsingEncoding:NSUTF8StringEncoding];        [data writeToFile:_mainPage atomically:YES];        NSString *urlStrWithPort = [NSString stringWithFormat:@"http://127.0.0.1:%d",[_httpServer listeningPort]];    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlStrWithPort]];}


ios 建立案頭捷徑

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.