我已经知道如何从safari启动应用程序,但是可以在启动之前检查应用程序是否已安装?如果iPhone上当前没有安装应用程序,我打算启动应用程序商店。
答案 0 :(得分:83)
无法检查是否从网页安装了应用。您可以通过检查是否可以使用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链接将不会打开。
如果无法打开应用程序链接,当计时器用完时,它将显示一个错误弹出窗口,说它无法打开页面(无法摆脱它),但它会立即转到AppStore并解除那个错误。
iOS 9 添加了一个非常好的功能,可让您的应用打开http / s网址:Universal Links
在 iOS 10 中,当您点击该链接并安装该应用时,会弹出一个“在[应用名称]中打开”的弹出窗口。如果用户未点击给定timeout
中的“打开”,此解决方案将使用后备。
由于300毫秒太短而无法点击任何东西,这个解决方案总是在iOS 10上失败。
答案 1 :(得分:11)
这对我来说也有类似的情况:如果支持的话我想打开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;
}
}
似乎对我的用例非常有用。
<强>更新强> 如果你想在后备上做一个新窗口,这仍然允许弹出ios错误消息。为了解决它,试试这个。
try {
document.location = link;
} catch(err) {
window.location.reload(true);
window.open(fallback, '_blank');
}
答案 2 :(得分:8)
Apple的解决方案:
来自Apple文档
如果应用已安装在用户的设备上,则横幅会智能地更改其操作,点击横幅只会打开应用。如果用户没有在他的设备上安装您的应用程序,点击横幅将使他进入App Store中的应用程序条目。当他返回您的网站时,横幅中会出现一个进度条,指示下载完成所需的时间。当应用程序完成下载后,“查看”按钮将变为“打开”按钮,点击横幅将打开应用程序,同时保留用户的网站上下文。
智能应用横幅自动确定用户设备是否支持该应用。如果加载横幅的设备不支持您的应用,或者您的应用在用户所在位置不可用,则不会显示横幅。
要在我们的网页上添加智能应用横幅,请在每个页面的开头添加以下元标记,以便显示横幅:
注意:我们也可以传递app-argument:如myName等,
检查在this Page
中为您的应用标题提供导航上下文<强>更新强>
<强> 1。关闭显示的横幅后,即使您的html中包含该元标记,也不会再次显示。
<强> 2。要重置启动设置应用程序,然后导航到常规&gt;重新发送&gt;重置所有设置
答案 3 :(得分:2)
您只需从方法 - (BOOL)openURL:(NSURL )url *中读取返回值,如果为NO,则表示未安装目标应用程序。以下代码剪切提供了一个使用navigon url方案的示例:
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的纠正。