如何通过应用程序在iOS桌面上创建快捷方式

时间:2011-09-28 03:11:08

标签: iphone ios iphone-4

我的意思是我想使用该应用程序在桌面上创建一个带图标的快捷方式,这将允许用户加快访问此应用程序的某些功能。

我怎么能这样做,有什么建议吗?或者任何人都有这方面的经验。

一个例子: FaceDial

4 个答案:

答案 0 :(得分:7)

我最近花了很多时间尝试将这个功能应用到一个应用程序中,并希望将我在这个主题上找到的一些资源用于拯救别人头疼。这正在成为一种越来越受欢迎的功能,并在Workflow和Facebook的Groups应用程序等主要应用程序中使用。鉴于Workflow现在是Apple应用程序,Apple看起来并不像使用这种技术有任何问题。 @jin提供的答案基本上是正确的。这个过程看起来像这样:

  1. 为您的应用注册自定义网址方案。创建动态URL链接,如果遵循这些链接,则会指向您希望快捷方式的内容。目前向iOS跳板添加快捷方式的唯一方法是通过Safari的“添加到主屏幕”功能。所以我们想要做的是使用Safari来保存我们的应用程序到跳板的自定义URL。诀窍是,您不能只将您的URL发送到Safari并保存,因为这样做会导致Safari立即关注该链接,用户将永远无法点击“添加到主屏幕”。因此,为了避免这个问题,您需要在某个地方托管一个Web服务,该服务会获取您的URL并返回一个base64 URL,您的用户可以将其保存到主屏幕。
  2. 要创建此Web服务,您可以远程托管它,这将要求您的用户在线使用,或者将其嵌入到您的应用中,这就是Workflow和Facebook Groups所做的事情。对于嵌入式服务器,有一些非常好用的选项。如果您正在使用objective-c theres CocoaHTTP,如果您使用的是Swift,我建议使用Swifter,这就是我使用的内容。
  3. 您的网络服务器需要显示一个以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>
    
  4. 以下是帮助我的主题资源列表(对不起,我没有足够的声誉来包含2个以上的链接......所以你必须复制意大利面这些):

    1. 网络服务如何与现场演示配合使用的绝佳示例:https://gist.github.com/FokkeZB/5899387
    2. 描述该过程的另一个堆栈溢出问题: https://stackoverflow.com/questions/28042152/link-to-safari-add-to-home-screen-from-inside-app
    3. 用于提示用户在Safari中点击“添加到主屏幕”的优秀JavaScript小部件: http://cubiq.org/add-to-home-screen
    4. Apple有关自定义网址方案的文档: https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html
    5. Apple关于内置方案的文档,它可以更好地简化简单任务,即发送电子邮件: https://developer.apple.com/library/content/featuredarticles/iPhoneURLScheme_Reference/Introduction/Introduction.html
    6. 显示如何在Javascript中对您的HTML进行base64编码的示例: https://stackoverflow.com/questions/9238890/convert-html-to-datatext-html-link-using-javascript
    7. 如果有人有任何问题,请告诉我们!

答案 1 :(得分:4)

除了应用程序之外,您无法向“桌面”(Springboard)添加图标。这个应用程序正在做的是在他们的应用程序中显示iPhone“桌面”的副本。

更新:此链接现在指向一个应用程序执行此操作,它似乎有点可能,虽然相当黑客在我看来。

这就是我相信该应用程序的工作原理(它类似于答案 下面但更详细)。

  • 应用程序创建webclip图像并将其和电话号码发送到Web服务。
  • 然后,Web服务会创建一个附加了Webclip信息的页面。电话号码/电子邮件将转换为网址,该网址将触发相应的应用程序(邮件/消息/电话)。 即“+834 895 734” - &gt;电话:834895734或短信:834895734
  • 然后应用程序在MobileSafari和该页面打开该页面 大概有关于如何“添加到主屏幕”的说明。
  • 然后,用户必须导航到并点按“添加到主屏幕”按钮。这会将webclip作为图标添加到Springboard。
  • 点击网络剪辑会激活网址,并使用数字/电子邮件启动邮件/消息/电话

你可以实现类似的东西(虽然我不建议)。这些是要遵循的步骤:

  • Register your own url scheme
  • 在某个地方托管一个页面,其中包含您想要快捷方式的每个功能/网址的webclip。如果网址不是静态的,或者您需要动态图标,则需要提供网络服务。
  • 使用此AppDelegate方法处理应用程序中的URL

- (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)

与您的问题相关的所有信息似乎都是here

请参阅此link以获取更多信息

我希望它能帮助你......