涉及:OpenUrl、iOS shceme、Data URI Scheme、JS、Socket

实现功能

将应用的某一个页面或某一个功能以快捷方式形式添加到桌面,用户点击桌面图标,可以唤起应用并打开对应页面或功能。

背景

用户在使用如微博、淘宝、贴吧、百度地图时,有些页面打开频率非常高,甚至某个应用只为了这几个单一的功能,这个时候,可以考虑将对应的功能页面以快捷方式添加到桌面上。

实现这个功能的基础

因为没有找到或没有这个功能的开放API,因此只能借助Safari,在Safari中,有一个功能叫:添加到主屏幕,而我们将使用这个入口去实现这个功能。

Safari中添加到主屏幕,就是把当前页面的url以图标的形式添加到桌面,点击该图标,还是打开Safari并打开对应的url,和我们想要的效果不一样,继续看下去。

iOS之OpenUrl

OpenUrl(开放链接)

例如:

[[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"tel://xxx"]];
复制代码

在iOS中,如果我们要在应用里唤起拨号应用,会使用这么一种方式,"tel://" 就是拨号应用在程序里注册的scheme,所有应用都可以在程序里注册scheme,这种scheme在整个手机里是通用的,第三方的分享也是依赖这种方式通过openURL:scheme的方式唤起自己的应用。

那么如何注册自己应用的scheme?网上关于这方面非常多,就贴个链接吧here.

OpenUrl在这个功能的利用就是:

  1. 通过OpenUrl唤起Safari,让Safari访问一个指定页面。
  2. Safari保存到桌面的图标,在点击时通过OpenUrl唤起我们的应用。(你可以在Safari地址栏输入tel://xxx)

Safari打开怎么样的页面?

通过OpenUrl,我们可以让应用打开Safari并访问一个页面。我们知道Safari添加到桌面是把当前的URL添加到桌面,那么,当我们点击图标的时候也是访问这个页面。而这个页面在第一次被打开的时候需要显示一些引导页之类的,而在桌面被打开的时候却需要调用一个scheme。这似乎不太可能,我们接着往下看。

JS

对JS不是太熟悉,以下方法来自网络

<script>
if (window.navigator.standalone == true)
{var lnk = document.getElementById("你的带scheme的<a>标签ID").click();//通过你所知道的方式打开一个scheme,上面这句话的链接标签如:<a href="tel://xxx">
}
else
{document.getElementById("msg").innerHTML='<div style="font-size:12px">可以插入引导页</div>';//这里你可以去加载你的引导页
}
</script>
复制代码

你可以试试通过Safari保存一个页面到桌面,再打开这个页面,你会发现,前者是非全屏状态,而通过快捷方式打开的Safari是全屏的。这正是一个突破口。

if (window.navigator.standalone == true)
复制代码

判断当前页面是否全屏,如果非全屏,那么我们显示引导页,如果是全屏,我们就打开一个链接。到这里,上一个问题就被解决了。

已经可以实现这个功能了

现在你可以在服务器部署一个网页实现这个功能了。但是,还是有缺点的,每次点击快捷方式我们都需要访问这个页面,如果网络状态不好,那么是很大的延时,(比如xx贴吧目前的状况)。

进一步优化之利用Data URI Scheme

我们希望这个页面不依赖网络。在这个过程中试验了多种方案,这里只贴我认为最妥的一种。

做过前端的小伙伴可能说到这就明白了,Data URI Scheme(DATA-URI 是指可以在Web 页面中包含图片但无需任何额外的HTTP 请求的一类URI.)比如网页里需要放一张图片,这张图片会有一个地址,而图片的获取是需要访问网络的。但是通过DataURI,我们可以把图片进行base64编码直接存储在页面中。

![](http://xxxx/xx.png)
->
![](http://upload-images.jianshu.io/upload_images/1971004-4e4b821f981fd216.png)
复制代码

这里,我们就要通过这种方式,把我们的网页存储在地址栏,首先,我们将做好的页面(含引导页和跳转scheme)通过base64编码成DataURIScheme,接着,我们放入这样一个新页面的标签。这个新页面的作用就是作为一个中间物,所以其他可以不写。

<meta http-equiv="refresh" content="0;URL= ‘your datauri’>
复制代码

这个新页面你需要部署到服务器,接着应用就打开这个页面,这个时候,页面会自动刷新一次,你会发现,你编码过的网页就出现在了地址栏,是不是很神奇。然后你把这个页面添加快捷方式到桌面。断开网络,再试试打开这个快捷方式吧。


该项目的Demo: iOS添加快捷方式到桌面

转载于:https://juejin.im/post/5cd14a57f265da039d329a55

iOS添加快捷方式到桌面相关推荐

  1. 把服务器添加到桌面,iOS 添加快捷方式到桌面

    前言 最近在乘车码里面做了一个需求,添加快捷方式到桌面,点击桌面图标打开app进入对应页面.功能很小,但是涉及的知识点很多,涉及 openURL.HTML.JavaScript.Data URI Sc ...

  2. Android中程序向桌面和Launcher添加快捷方式

    最近感觉这个添加快捷方式挺有趣的,就查资料自己写了个demo---简单的例子,这个例子就是有两个按钮,点击"将此程序添加到快捷方式",则手机桌面增加一个快捷方式,同时launche ...

  3. html5添加到安卓桌面图标,Android向桌面添加快捷方式,使其指向特定的网页

    转载: http://www.cnblogs.com/wanyao/archive/2011/11/27/2265333.html 今天遇到一个需求,就是向桌面添加一个快捷方式,使点击时链接到特定的网 ...

  4. Android之添加快捷方式(Shortcut)到手机桌面

    在两个手机上测试,发现小米手机上添加了快捷方式后不能移除,三星手机可以.权限 要在手机桌面上添加快捷方式,首先需要在manifest中添加权限. <!-- 添加快捷方式 --><us ...

  5. android url 快捷方式,Android向桌面添加快捷方式,使其指向特定的(URL)网页

    /* * 在桌面添加快捷方式 * @param      icon         快捷方式图标 * @param      name      快捷方式名称 * @param      uri    ...

  6. win10怎么在桌面添加计算机,win10怎么添加我的电脑(计算机)快捷方式到桌面

    摘要 腾兴网为您分享:win10怎么添加我的电脑(计算机)快捷方式到桌面,智能互联,游戏堂,幸福钱庄,相机美颜等软件知识,以及boilsoftvideojoiner,江苏农信,dell台式机网卡驱动, ...

  7. android 查询快捷方式,Android编程添加快捷方式(Short)到手机桌面的方法(含添加,删除及查询)...

    本文实例讲述了Android编程添加快捷方式(Short)到手机桌面的方法.分享给大家供大家参考,具体如下: 权限 要在手机桌面上添加快捷方式,首先需要在manifest中添加权限. ? 添加快捷方式 ...

  8. Android添加快捷方式(Short)到手机桌面

    权限 要在手机桌面上添加快捷方式,首先需要在manifest中添加权限. <!-- 添加快捷方式 --><uses-permission android:name="com ...

  9. Visual Studio 2015 - 桌面添加快捷方式

    Visual Studio 2015 - 桌面添加快捷方式 1 打开文件位置 C:\ProgramData\Microsoft\Windows\Start Menu\Programs 2 桌面添加快捷 ...

最新文章

  1. 复用io selectors模块
  2. FileFilter过滤器的原理和使用
  3. sessionState 配置方案
  4. Z-Blog 扩展数据库 字段 二次开发
  5. python装饰器解析请求参数_我如何在装饰器中获得Flask可选的URL参数?
  6. 深入解析Java中的装箱和拆箱
  7. ToStringBuilder.reflectionToString用法
  8. 电磁学——电磁场与电磁波:麦克斯韦方程组
  9. 雅虎十四条:网站前端网页优化的14条原则
  10. linux 卸载mono,Linux系统(centos7.6)安装mono3.8
  11. 微信小程序实例:开发showToast消息提示接口
  12. Windows系统上的软件(如:爱奇艺万能播放器)固定任务栏图标后,打开后出现新任务栏图标
  13. 小程序个人中心(我的页面)
  14. 如何让人机对话更自然?
  15. django多任务开启rabbitmq,并进行声明队列、发送、阻塞监听消息
  16. Cadence-pad designer 焊盘设计教程
  17. 微信视频号重走公众号老路
  18. 【C语言】基础知识梳理总结(超详细!!!!
  19. ppt流程图字体太小_PPT中较长的流程图如何清晰展现??
  20. 2022年最后一波旺季冲刺,亚马逊卖家要把握住这些关键时刻~

热门文章

  1. 机器学习面试宝典200题!
  2. FP-growth:从FP树中挖掘频繁项集
  3. 中间件 | Redis - [数据类型 指令]
  4. [SD.TEAM语录]阿翔语录
  5. 魔都蹭课、观光、酱油记
  6. F - LIS on Tree【二分OR权值线段树】
  7. C / C++ 计算程序运行的时间
  8. Windows 98 入门介绍大全(一)(转)
  9. 布隆过滤器(Bloom Filter)、布谷鸟过滤器(Cuckoo Filter)、商过滤器(quotient filter)(持续更新~~~~)
  10. Quest Pro永久降价至999美元,256GB版Quest 2降至429美元