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

Rob*_*Rob 74 launch discovery ios4

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

Dou*_*hen 65

可行,但很棘手.

启动已安装的应用程序(如FB或Twitter应用程序)是使用自定义URL方案完成的.这些既可以在其他应用程序中使用,也可以在网站上使用.

这是一篇关于如何使用您自己的应用程序执行此操作的文章.

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

以下是您可以查看的一些更受欢迎的URL的部分列表.

但是,如果您想扫描应用程序并推断其URL,则无法在非JB设备上完成.

这是一篇博客文章,谈论Bump的人如何处理这个问题.

  • 链接已经死了. (4认同)

小智 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>
Run Code Online (Sandbox Code Playgroud)

通过Web(<a href="#" onclick="startMyApp()">Try to start MyApp</a>)调用此脚本,您可以确定是否在设备上安装了具有"yourAppScheme"方案的应用程序.

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

  • 但如果应用程序不存在,您仍会看到来自safari的错误消息. (22认同)
  • 有没有人知道如果没有安装应用程序如何避免来自safari的错误消息? (9认同)
  • 这看起来像是一个hack,也是一个不稳定的...在重定向(`document.location`)之后JS应该停止执行,所以`setTimeout`中的函数永远不应该被执行.并不是说我知道更好的方法(除非[iOS智能应用程序横幅](http://smartappbanners.com/)足以满足您的需求).愿被证明是错的. (3认同)
  • @johndodo这正是重点.如果重定向成功,JavaScript将停止执行,从而避免超时阻塞(但是,它确实应该检查当前时间与启动时间,因为它*将在用户稍后返回Safari时继续执行).另一方面,如果重定向失败,用户将看到两条消息:Safari已经提到的第一个丑陋的消息,然后是第二个用户提供的,有些道歉的消息来解释第一个消息.它并不理想,但至少不会像*只是看到第一个错误那样令人困惑. (2认同)
  • 这不起作用,即使在意图重定向之后,setTimeout 也始终会执行 (2认同)

Gav*_*ope 22

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

BOOL installed = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"clearapp://"]];
Run Code Online (Sandbox Code Playgroud)

要打开该应用:

BOOL success = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"clearapp://"]];
Run Code Online (Sandbox Code Playgroud)


st.*_*ick 13

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

分支机构,我们使用下面代码的形式 - 请注意,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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

这避免了丑陋的重定向,但涉及更多的工作.