我已经知道如何从 safari 启动应用程序,但是否可以在启动前检查应用程序是否已安装?如果应用程序当前未安装在 iPhone 上,我正在考虑启动应用程序商店。
4 回答
无法检查是否从网页安装了应用程序。您可以通过检查是否可以使用 UIApplication 的 -canOpenURL: 方法打开您的 url 方案,在其他应用程序中执行此操作,但没有与此等效的 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 url:通用链接
在iOS 10中,当您点击链接并安装应用程序时,会弹出“在 [应用程序名称] 中打开”。如果用户没有点击给定的“打开” timeout
,这个解决方案将使用回退。由于 300ms 太短而无法点击任何东西,因此此解决方案在 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;
}
}
似乎对我的用例很有效。
更新: 如果您想在回退时创建一个新窗口,这仍然允许弹出 ios 错误消息。为了解决它,试试这个。
try {
document.location = link;
} catch(err) {
window.location.reload(true);
window.open(fallback, '_blank');
}
苹果的解决方案:
来自 Apple 文档
如果应用程序已经安装在用户的设备上,横幅会智能地改变它的动作,点击横幅会简单地打开应用程序。如果用户在他的设备上没有您的应用程序,点击横幅将带他到应用程序在 App Store 中的条目。当他返回您的网站时,横幅中会出现一个进度条,指示完成下载需要多长时间。当应用程序完成下载后,查看按钮变为打开按钮,点击横幅将打开应用程序,同时保留您网站中的用户上下文。
智能应用横幅会自动确定用户设备是否支持该应用。如果加载横幅的设备不支持您的应用,或者您的应用在用户所在位置不可用,则横幅将不会显示。
要将智能应用横幅添加到我们的网页,请在您希望横幅出现的每个页面的头部添加以下元标记:
注意:我们也可以传递 app-argument: like myName,etc.,
检查是否在此页面中为您的应用标题提供导航上下文
更新:
1. 关闭显示的横幅后,即使您在我们的 html 中有该元标记,也不会再次显示。
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 的更正。