确定是否存在应用程序并在iOS上启动该应用程序
有没有办法来检查iOS,看看是否已经安装了另一个应用程序,然后启动? 如果内存服务于我,这在早期版本中是不可能的,但是这个改变了吗?
可行,但棘手。
启动已安装的应用程序,如FB或Twitter应用程序,使用自定义URLscheme完成。 这些既可以在其他应用程序也可以在网站上使用。
这里有一篇关于如何用你自己的应用程序来做到这一点的文章 。
看到这个URL是否在那里,可能会很棘手。 Boxcar是检测安装的应用程序的一个很好的例子。 这里的事情是Boxcar具有高级的自定义URL的知识。 我相当(99%)肯定有一个canOpenURL:
所以知道你想提前定位的应用程序的自定义scheme,这使得这个简单的实现。
以下是您可以检查的一些更受欢迎的url的部分列表 。
但是,如果您想扫描应用程序并推断其URL,则无法在非JB设备上完成。
这里有一篇博客文章,谈论Bump的人如何处理这个问题。
有一个如下的脚本。
<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>
从networking调用这个脚本( <a href="#" onclick="startMyApp()">Try to start MyApp</a>
),您可以确定您的应用程序是否在设备上安装了“yourAppScheme”scheme。
该应用程序将启动,如果它安装在设备上,并且“yourAppScheme”在其中注册。 如果应用程序没有安装,你可以build议用户从iTunes安装这个应用程序。
检查是否安装了应用程序(例如清除):
BOOL installed = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"clearapp://"]];
打开该应用程序:
BOOL success = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"clearapp://"]];
如果应用程序未安装,则隐藏错误消息
在分支我们使用下面的代码forms – 请注意,iframe在更多的浏览器上工作。 只需在应用程序的URI和App Store链接中进行replace即可。
<!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,JavaScriptredirect只作为后备。 这是逻辑:
当没有应用程序的用户第一次点击到应用程序的链接时,他或她将被直接redirect到App Store。 这是通过指向您的应用程序的链接来实现的,该链接实际上是您的服务器上的一个dynamic生成的页面,具有redirect。 您创build一个cookie并在您的后端loggingIP地址,操作系统,操作系统版本等的“数字指纹”。
当用户安装应用程序并打开它时,您将收集并发送另一个“数字指纹”到您的后端。 现在,您的后端知道链接已安装在任何后续访问与您的应用程序关联的链接,您的服务器确保dynamic生成的redirect页面导致应用程序,而不是App Store,基于与请求一起发送的cookie。
这避免了丑陋的redirect,但涉及更多的工作。
据我了解,由于隐私问题,你不能看到一个应用程序是否安装在设备上。 解决这个问题的方法是尝试启动应用程序,如果不启动让用户点击回退url。 为了防止发生移动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");
我最近苦苦挣扎,这是我提出的解决scheme。 请注意,仍然没有确定的方法来检测应用程序是否启动。
在检测到User-Agent后,我从服务器提供一个redirect到iPhone特定变体的页面。 该页面的链接只能通过电子邮件/短信或Facebook共享。
该页面呈现被引用文档的最小版本,但随后会在加载时自动尝试使用隐藏的<iframe>来打开应用程序(在这种情况下,AJAX总是失败 – 您无法使用jQuery或XMLHttpRequest进行此操作)。
如果URLscheme被注册,应用程序将打开,用户将能够做他们需要的一切。 无论哪种方式,页面底部显示一个消息:“该应用程序启动了吗?如果没有,你可能还没有安装它….”与商店的链接。