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]];
}
时间: 2024-10-06 00:16:53

ios 创建桌面快捷方式的相关文章

手把手教你在ubuntu下创建桌面快捷方式

习惯使用windows的朋友来说创建桌面快捷方式简直就是so easy, 鼠标右键点击文件-->选择发送桌面快捷方式,就OK了.对于ubuntu下该怎样创建桌面快捷方式呢?下面以创建eclipse的快捷方式为例,简单介绍一下. 环境: 1)系统版本:Ubuntu 14.04 2)桌面环境:Unity 3)已经下载并解压eclipse(免安装)到/opt目录下 详细步骤: 1)新建文件eclipse.desktop,命令如下: sudo vim /usr/share/applications/ec

ubuntu12.4创建桌面快捷方式(三种方法)

ubuntu12.4创建桌面快捷方式(三种方法) ubuntu12.4 不能在桌面"右键-->创建启动器" ,所以要另寻方法来创建桌面快捷图标. 1.方法一: 在文件系统  /usr/share/applications  存放着ubuntu 自动安装软件的快捷方式: 如:直接右键 "终端"然后复制到桌面: 双击就可以打开,这下不需用快捷键  Ctrl+Alt+T  了: 2.方法二: 鼠标按住图标往桌面拉,同时按住 Alt  键: 拖到桌面的时候会看到有几个

ubuntu创建桌面快捷方式

ubuntu11.04之前的版本,鼠标在桌面右键可以有更方便的创建快捷方式的方法,之后就没有了. 1.创建一个文件,将下面的代码拷贝进去 这里我们只需要关注3个地方,分别为Exec=软件执行文件的路径,Icon=快捷方式图标(如果有的话),Name=快捷方式名称.根据自己软件按转的位置修改代码,保存之后关闭文件.下面以eclipse为例. [Desktop Entry] Categories=Development; Comment[zh_CN]= Comment= Exec=/home/owe

为eclipse创建桌面快捷方式

为eclipse创建桌面快捷方式 在linux桌面空白处,点击鼠标右键,弹出一个对话框,选择"create Launcher"(中文是"新建启动器"),在"Create Launcher"(中文"创建快捷方式")对话框中选择Application(中文"应用程序"),输入名字:eclipse ,在Command(中文"命令")找到eclipse的启动程序(比如我的是:/opt/eclip

解决Inno Setup制作安装包无法创建桌面快捷方式的问题

转自:http://yedward.net/?id=104 昨天想把个java程序做成exe安装软件,然后就去下载了Inno Setup这个软件安装包制作软件,Inno Setup这个软件确实非常好用,但是由于我下载的中文汉化版,根据向导一步步来就是不创建桌面快捷方式,折腾了很久,终于找到了解决方法. 下面是我使用Inno Setup打包软件后自动生成的一段代码: 1 2 3 [Tasks] Name: "desktopicon"; Description: "{cm:Cre

WPF 创建桌面快捷方式

#region 创建桌面快捷方式 string deskTop = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop); string dirPath = System.Environment.CurrentDirectory; string exePath = Assembly.GetExecutingAssembly().Location; System.Diagnostics.FileVers

(转)Inno Setup入门(四)——为程序创建桌面快捷方式

本文转载自:http://blog.csdn.net/augusdi/article/details/8564810 Icons这一可选段定义所有创建在开始菜单和\或其它位置 (比如桌面) 的快捷方式.一个例子如下: [setup] ;全局设置,本段必须 AppName=Test AppVerName=TEST DefaultDirName="E:\TEST" AppVersion=1.0 [files] Source: "F:\desktop\ipmsg.exe"

windows创建桌面快捷方式的VBA脚本

Dim wShell, oShortcut    'Dim strDesktop$ ' 为了与VBS兼容,    Dim strDesktop    ' 这里改写一下,测试通过...    Set wShell = CreateObject("Wscript.shell")    strDesktop = wShell.SpecialFolders("Desktop")    strDesktop = strDesktop + "\搜物网-货源必备.lnk

PHP创建桌面快捷方式实例

要利用php创建桌面快捷方式我们需要借助于header,InternetShortcut及一些我看不懂的代码. 方法:新建一个php文件,然后把下面的代码扔进去,保存为比如shortcut.php,放在网站跟目录,代码如下: $shortCut = "[InternetShortcut] URL=http://www.baidu.com IDList= [{000214A0-0000-0000-C000-000000000046}] Prop3=19,2 "; Header("