答案 0 :(得分:7)
我最近花了很多时间尝试将这个功能应用到一个应用程序中,并希望将我在这个主题上找到的一些资源用于拯救别人头疼。这正在成为一种越来越受欢迎的功能,并在Workflow和Facebook的Groups应用程序等主要应用程序中使用。鉴于Workflow现在是Apple应用程序,Apple看起来并不像使用这种技术有任何问题。 @jin提供的答案基本上是正确的。这个过程看起来像这样:
您的网络服务器需要显示一个以base64编码格式返回另一个页面的页面,以便用户可以在Web服务器停止运行后使用该快捷方式(显然您不能让嵌入式服务器全天候运行) )。编码页面需要检测页面是否以独立模式启动。如果是,那么它应该带你到你的应用程序,否则它应该给你一个页面,用户可以将页面保存到主屏幕。以下是我的html如何查找服务的示例:
<!DOCTYPE html>
<html>
<div id="html">
<!DOCTYPE html>
<html>
<head>
<title>Add to Homescreen</title>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
<meta content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;" name="viewport"/>
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<meta content="SHORTCUT NAME HERE" name="apple-mobile-web-app-title"/>
<link rel="icon" type="image/png" href="data:image/png;base64, ICON IMAGE DATA"/>
<link rel="apple-touch-icon" href="data:image/png;base64, ICON IMAGE DATA"/>
<link rel="apple-touch-startup-image" href="data:image/png;base64, ICON IMAGE DATA"/>
</head>
<body>
<a id="redirectURL" href="YOUR CUSTOM URL" name = "redirectURL"></a>
<script>
if (window.navigator.standalone) {
var e = document.getElementById('redirectURL');
var ev = document.createEvent('MouseEvents');
ev.initEvent('click', true, true);
e.dispatchEvent(ev);
window.close();
} else {
document.write("<center><h1>Valet</h1><img id=\"imageIcon\" src=\"data:image/png;base64, IMAGE ICON DATA\"></img><h2> Add this page to your homescreen </h2></center>")
}
</script>
</body>
</html>
</div>
<script type="text/javascript">
var html = document.getElementById("html").innerHTML;
html = html.replace(/\s{2,}/g, '')
.replace(/%/g, '%25')
.replace(/&/g, '%26')
.replace(/#/g, '%23')
.replace(/"/g, '%22')
.replace(/'/g, '%27');
var dataURI = 'data:text/html;charset=UTF-8,' + html;
window.location.href = dataURI
</script>
</html>
以下是帮助我的主题资源列表(对不起,我没有足够的声誉来包含2个以上的链接......所以你必须复制意大利面这些):
https://gist.github.com/FokkeZB/5899387
https://stackoverflow.com/questions/28042152/link-to-safari-add-to-home-screen-from-inside-app
http://cubiq.org/add-to-home-screen
https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html
https://developer.apple.com/library/content/featuredarticles/iPhoneURLScheme_Reference/Introduction/Introduction.html
https://stackoverflow.com/questions/9238890/convert-html-to-datatext-html-link-using-javascript
如果有人有任何问题,请告诉我们!
答案 1 :(得分:4)
除了应用程序之外,您无法向“桌面”(Springboard)添加图标。这个应用程序正在做的是在他们的应用程序中显示iPhone“桌面”的副本。
更新:此链接现在指向一个应用程序执行此操作,它似乎有点可能,虽然相当黑客在我看来。
这就是我相信该应用程序的工作原理(它类似于答案 下面但更详细)。
你可以实现类似的东西(虽然我不建议)。这些是要遵循的步骤:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
注意:如果您的应用程序被删除,那么网络剪辑将不再有效并且会使用户感到困惑。 Apple也可能拒绝您的应用。
答案 2 :(得分:2)
我猜应用程序的工作原理如下,
1)它只是为每个联系人创建一个html
2)它使用safari功能“添加到主屏幕”
为模拟safari功能找到了一个很好的答案,
我使用“添加到主屏幕”按钮从Safari创建了一个链接。它在/ private / var / mobile / Library / WebClips /中创建了一个名为54C86B09482D4560BAB46091CC75825A.webclip的目录。该目录包含两个文件,icon.png和Info.plist。 icon.png只是在查看应用程序屏幕时显示的图标。 Info.plist的内容是真实信息的位置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>ClassicMode</key>
<false/>
<key>FullScreen</key>
<false/>
<key>IconIsPrecomposed</key>
<false/>
<key>IconIsScreenShotBased</key>
<true/>
<key>Scale</key>
<real>0.32653060555458069</real>
<key>ScrollPoint</key>
<dict>
<key>x</key>
<real>0.0</real>
<key>y</key>
<real>-183</real>
</dict>
<key>Title</key>
<string>The Daily WTF</string>
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleGray</string>
<key>URL</key>
<string>http://thedailywtf.com/</string>
</dict>
</plist>
因此,为了测试这一点,我创建了一个名为C28C8FDC2F184AAD84F77B511442548F.webclip的新文件夹,并将Info.plist文件从其他目录复制过来,将该网址编辑为http://google.com。然后我重新弹出手机,它就像任何其他的网络夹子一样出现了。文件夹名称只是一个十六进制编码的GUID,我使用了http://www.somacon.com/p113.php并且只选择了这个简单测试后的0x之后
答案 3 :(得分:-1)