Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从Safari启动应用程序或应用商店?_Ios_App Store_Mobile Safari_Custom Url - Fatal编程技术网

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

Ios 从Safari启动应用程序或应用商店?,ios,app-store,mobile-safari,custom-url,Ios,App Store,Mobile Safari,Custom Url,我已经知道如何从safari启动应用程序,但是否可以在启动前检查应用程序是否已安装?如果应用程序当前未安装在iPhone上,我想启动应用程序商店。无法检查应用程序是否从网页安装。您可以在另一个应用程序中通过检查您的url方案是否可以使用UIApplication的-canOpenURL:方法打开来实现这一点,但没有与此等效的javascript 但是,您可以使用以下变通方法: <script language="javascript"> function open_appst

我已经知道如何从safari启动应用程序,但是否可以在启动前检查应用程序是否已安装?如果应用程序当前未安装在iPhone上,我想启动应用程序商店。

无法检查应用程序是否从网页安装。您可以在另一个应用程序中通过检查您的url方案是否可以使用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(){
窗口位置http://itunes.com/';
}
函数try_to_open_app(){
setTimeout('open_appstore()',300);
}
如果超时结束,此代码将在调用open_appstore函数的链接上设置超时。由于您的链接指向应用程序的自定义url,Safari将尝试打开该链接,如果可以,它将打开应用程序并停止计时器,因此不会打开AppStore链接

如果应用程序链接无法打开,当计时器用完时,它将显示一个错误弹出窗口,表示无法打开页面(无法摆脱),但它将立即转到AppStore并消除该错误


iOS 9添加了一个非常好的功能,让您的应用程序打开http/s url:


在iOS 10中,点击链接并安装应用程序时,会弹出“在[应用程序名称]中打开”的弹出窗口。如果用户在给定的
超时时间内未点击“打开”,此解决方案将使用回退。

由于300ms太短,无法点击任何内容,此解决方案在iOS 10上总是失败

您只需从方法-(BOOL)openURL:(NSURL)url*读取返回值,如果不是,则表示未安装目标应用程序。下面截取的代码给出了使用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的更正。

苹果的解决方案:

来自苹果文档

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

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

要将智能应用程序横幅添加到我们的网页,请在希望横幅出现的每个页面的页眉中添加以下元标记:

注意:我们还可以传递app参数:比如myName等

检查是否在中为应用程序标题提供导航上下文

更新:

1。一旦您关闭了显示的横幅,那么即使您在我们的html中有该meta标记,也不会再次显示该横幅。


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

,这对我来说也适用于类似的情况:如果支持,我想打开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');
  }

我试过这个。但是,如果“yourappurl:”成功启动了你的应用程序,那么当用户返回Safari时,超时最终将触发,并将用户发送到itunes。@George在什么版本的iOS和什么设备上发生了这种情况?有一些缺点,但现在,这是我找到的最佳解决方案+1这仍然显示“无法打开页面”的警告。有没有办法防止这种情况发生。此外,如果没有安装应用程序,我希望保持在同一页面上,而不是重定向。在iOS 10中,安装应用程序时会弹出一个对话框,上面写着“在[应用程序名称]中打开”。如果用户在给定的
超时时间内未点击“打开”,此解决方案将使用回退。由于300ms太短,无法点击任何内容,此解决方案总是失败。在我看来,答案应该提到这一点。你的意思是你正在这样做吗?试试{document.location=link;}catch(x){document.location=fallback;}只是一个小的更新,你的代码在
Mac OS
中仍然有效,太棒了。。TY该代码将在任何支持系统范围URI协议处理程序的操作系统上运行。Windows、OS X、iOS、Android、Linux。此代码不适用于iOS 9。它永远不会碰到catch块,因为如果没有安装应用程序,链接url将自动失败。删除应用程序名称它可以很好地工作。这很酷,但举个例子:我需要做和智能横幅一样的事情,不同的是我需要n个不同深度链接的链接。我知道我可以向Smart Banner添加更多数据,但Smart Banner的链接对于页面是唯一的。如果你有什么想法的话,欢迎光临!在我上一个应用程序的开发过程中,我构建了一个名为的链接工具,它为你提供了一个托管链接,可以很好地实现这一点——适用于Android或iOS。