确定应用是否存在并在iOS上启动该应用

时间:2011-04-21 15:28:32

标签: ios4 launch discovery

有没有办法检查iOS以查看是否已安装其他应用程序然后启动?如果内存为我服务,这在早期版本中是不可能的,但是这已经改变了吗?

6 个答案:

答案 0 :(得分:65)

可行,但很棘手。

使用自定义URL方案启动已安装的应用程序,如FB或Twitter应用程序。这些可以在其他应用程序和网站上使用。

Here's an article about how to do this with your own app

但是,看看URL是否存在可能会非常棘手。检测已安装应用的应用的一个很好的示例是Boxcar。这里的事情是Boxcar拥有自定义URL的高级知识。我相当(99%)确定有一个canOpenURL:,所以知道你想要提前定位的应用程序的自定义方案使这很容易实现。

Here's a partial list您可以查看的一些比较流行的网址。

但是如果您想扫描应用并推断其网址,则无法在非JB设备上完成。

Here's a blog post谈论Bump的人如何处理这个问题。

答案 1 :(得分:41)

有如下的脚本。

<script type="text/javascript">
function startMyApp()
{
  document.location = 'yourAppScheme://';
  setTimeout( function()
  {
      if( confirm( 'You do not seem to have Your App installed, do you want to go download it now?'))
      {
        document.location = 'http://itunes.apple.com/us/app/yourAppId';
      }
  }, 300);
 }
</script>

从网络(<a href="#" onclick="startMyApp()">Try to start MyApp</a>)调用此脚本,您可以确定您的应用程序是否已在设备上安装了“yourAppScheme”方案。

如果应用程序已安装在设备上并且“yourAppScheme”已在其中注册,则该应用程序将启动。 如果未安装该应用程序,您可以建议用户从iTunes安装此应用程序。

答案 2 :(得分:22)

检查是否安装了应用(例如,清除):

BOOL installed = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"clearapp://"]];

要打开该应用:

BOOL success = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"clearapp://"]];

答案 3 :(得分:11)

如果未安装该应用,则隐藏错误消息

Branch我们使用下面代码的形式 - 请注意,iframe适用于更多浏览器。只需在您的应用的URI和App Store链接中替换即可。

<!DOCTYPE html>
<html>
    <body>
        <script type="text/javascript">
            window.onload = function() {
                // Deep link to your app goes here
                document.getElementById("l").src = "my_app://";

                setTimeout(function() {
                    // Link to the App Store should go here -- only fires if deep link fails                
                    window.location = "https://itunes.apple.com/us/app/my.app/id123456789?ls=1&mt=8";
                }, 500);
            };
        </script>
        <iframe id="l" width="1" height="1" style="visibility:hidden"></iframe>
    </body>
</html>

第二种可能性首先依赖于cookie,而javascript重定向仅作为后备。这是逻辑:

当没有应用的用户首先点击指向您应用的链接时,他或她会直接重定向到App Store。这是通过指向您的应用程序的链接实现的,该链接实际上是使用重定向在您的服务器上动态生成的页面。您创建一个cookie并在后端记录IP地址,操作系统,操作系统版本等的“数字指纹”。

当用户安装应用程序并将其打开时,您将收集并向您的后端发送另一个“数字指纹”。现在,您的后端知道链接已安装在随后访问与您的应用关联的链接时,您的服务器会确保动态生成的重定向页面基于随请求发送的cookie导向应用程序,而不是App Store。

这可以避免丑陋的重定向,但需要做更多的工作。

答案 4 :(得分:2)

据我了解,由于隐私问题,您无法查看设备上是否安装了应用。解决这个问题的方法是尝试启动应用程序,如果它没有启动,让用户点击后备网址。为防止发生移动版Safari错误,我发现将其放在iframe中有助于解决问题。

这是我使用过的一段代码。

<form name="mobileForm" action="mobile_landing.php" method="post">
        <input type="hidden" name="url" value="<?=$web_client_url?>">
        <input type="hidden" name="mobile_app" value="<?=$mobile_app?>">
        <input type="hidden" name="device_os" value="<?=$device_os?>">
    </form>
<script type="text/javascript">
        var device_os = '<? echo $device_os; ?>'; 


        if (device_os == 'ios'){

        var now = new Date().valueOf(); 
        setTimeout(function () { 
            if (new Date().valueOf() - now > 100) 
                return;

        document.forms[0].submit(); }, 5); 


        var redirect = function (location) {
            var iframe = document.createElement('iframe');
            iframe.setAttribute('src', location);
            iframe.setAttribute('width', '1px');
            iframe.setAttribute('height', '1px');
            iframe.setAttribute('position', 'absolute');
            iframe.setAttribute('top', '0');
            iframe.setAttribute('left', '0');
            document.documentElement.appendChild(iframe);
            iframe.parentNode.removeChild(iframe);
            iframe = null;
        };

        setTimeout(function(){
            window.close()
            }, 150 );

        redirect("AppScheme");

答案 5 :(得分:1)

我最近在努力解决这个问题,这是我提出的解决方案。请注意,仍然没有可靠的方法来检测应用程序是否已启动。

我从我的服务器提供一个页面,该页面在检测到User-Agent时重定向到特定于iPhone的变体。该页面的链接只能通过电子邮件/短信或Facebook共享。

该页面呈现所引用文档的最小版本,但是一旦加载,就会使用隐藏的&lt; iframe&gt;自动尝试打开该应用程序。 (在这种情况下,AJAX总是失败 - 你不能使用jQuery或XMLHttpRequest)。

如果注册了URL方案,则应用程序将打开,用户将能够执行所需的一切。无论哪种方式,页面底部都会显示如下消息:“应用程序是否已启动?如果没有,您可能尚未安装它......”并带有指向商店的链接。