从Safari启动应用程序或应用程序商店?

我已经知道如何从Safari浏览器启动应用程序,但可以在启动之前检查应用程序是否已安装? 我想要启动应用程序商店,如果该应用程序目前没有安装在iPhone上。

无法检查是否从网页安装应用程序。 你可以通过检查你的urlscheme是否可以使用UIApplication的-canOpenURL:方法打开,但是没有与之相当的javascript。

但是,您可以使用以下解决方法:

<script language="javascript"> function open_appstore() { window.location='http://itunes.com/'; } function try_to_open_app() { setTimeout('open_appstore()', 300); } </script> <a onClick="javascript:try_to_open_app();" href="yourappurl:">App name</a> 

如果超时结束,此代码将在链接上设置一个超时值,该链接将调用open_appstore函数。 由于您的链接指向应用程序的自定义url,Safari会尝试打开该链接,如果可以,它将打开应用程序并停止计时器,所以AppStore链接将不会打开。

如果应用程序链接不能打开,当计时器用完时将显示一个错误popup窗口,说不能打开页面(不能摆脱),但它会立即去AppStore并消除该错误。


iOS 9增加了一个非常不错的function,可以让您的应用程序打开一个http / surl: Universal Links


iOS 10中 ,当您点击链接并安装应用程序时,popup窗口显示“ 在[应用程序名称]中打开 ”。 如果用户在给定的timeout内未点击“ 打开 ”,则此解决scheme将使用回退。 由于300ms太短而无法点击任何内容, 因此该解决scheme在iOS 10上总是失败

这对我也有类似的情况:其中我想打开gmaps应用程序,如果它被支持 – 否则直接进入gmap网站。

 function mapLink(addy) { addy = encodeURIComponent(addy); var fallback = 'http://maps.google.com/?q=' + addy , link = 'comgooglemaps://?q=' + addy; try { document.location = link; } catch(err) { document.location = fallback; } } 

似乎工作得很好,我的用例。

更新:如果你想在回退上做一个新的窗口,这仍然允许popupios错误消息。 绕过它试试这个。

  try { document.location = link; } catch(err) { window.location.reload(true); window.open(fallback, '_blank'); } 

苹果的解决scheme:

从Apple文档

https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html

如果该应用程序已经安装在用户的设备上,则横幅会智能地更改其操作,点击横幅将简单地打开该应用程序。 如果用户在他的设备上没有您的应用程序,点击横幅会将他带到应用程序商店中的应用程序中。 当他回到你的网站时,横幅上会出现一个进度条,表示下载完成需要多长时间。 当应用程序完成下载时,“查看”button将变为“打开”button,点击横幅将打开应用程序,同时保留用户的网站上下文。

智能应用横幅会自动确定用户设备是否支持该应用。 如果设备加载横幅不支持您的应用程序,或者如果您的应用程序在用户的位置不可用,横幅将不会显示。

要将智能应用横幅添加到我们的网页,请在每个想要显示横幅的页面的头部添加以下元标记:

注意:我们也可以传递应用参数:像myName等,

检查在此页面上为您的应用程序标题提供导航上下文

更新:

1.一旦你closures了显示的横幅,那么即使你在我们的html中有meta标签,也不会再显示。

2.要重置启动设置应用程序,请导航到“常规”>“重新发送”>“重置所有设置”

你可以简单地从方法– (BOOL)openURL:(NSURL )url *中读取返回值,如果是NO,则表示目标应用程序没有安装。 下面的代码片断给出了一个使用navigon urlscheme的例子:

 NSString *stringURL = @"navigon://coordinate/NaviCard/19.084443/47.573305"; NSURL *url = [NSURL URLWithString:stringURL]; if([[UIApplication sharedApplication] openURL:url]) { NSLog(@"Well done!"); } else { stringURL = @"https://itunes.apple.com/it/app/id320279293?mt=8"; url = [NSURL URLWithString:stringURL]; [[UIApplication sharedApplication] openURL:url]; } 

感谢zszen的更正。