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

nin*_*eer 46 mobile-safari app-store custom-url ios

我已经知道如何从safari启动应用程序,但是可以在启动之前检查应用程序是否已安装?如果iPhone上当前没有安装该应用,我正在考虑启动应用商店.

Fil*_*lic 84

无法检查是否从网页安装了应用.您可以通过检查您的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>
Run Code Online (Sandbox Code Playgroud)

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

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


iOS 9增加了一个非常好的功能,让你的应用程序打开一个http/s网址:通用链接


iOS 10中,当您点击链接并安装了应用程序时,会弹出一个" 在[应用程序名称]中打开 "的弹出窗口.如果用户未点击给定的" 打开 ",则timeout此解决方案将使用后备.由于300毫秒太短,无法点击任何东西,这个解决方案总是在iOS 10上失败.

  • 我试过这个.但是,如果"yourappurl:"成功启动了您的应用程序,那么当用户返回Safari时,超时最终会终止并将用户发送到iTunes. (5认同)
  • 这仍然显示警告说"无法打开页面".有没有办法防止这种情况发生.此外,我想保持在同一页面,而不是重定向,如果没有安装该应用程序. (5认同)
  • 在iOS 10中,安装应用程序时会弹出一个"在[App Name]中打开"的弹出窗口.如果用户未在给定的"超时"中点击"打开",则此解决方案将使用回退.由于300毫秒太短而无法点击任何东西,因此该解决方案总是失败.在我看来,答案应该提到这一点. (5认同)
  • 借调 - 即使应用程序打开,也会显示警告. (2认同)

小智 12

这对我来说也有类似的情况:如果支持的话我想打开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;
  }
}
Run Code Online (Sandbox Code Playgroud)

似乎对我的用例非常有效.

更新: 如果你想在后备上做一个新窗口,这仍然允许弹出ios错误消息.为了解决它试试这个.

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

  • 此代码不适用于iOS 9.它不会遇到catch块,因为如果未安装该应用程序,链接URL将无提示失败. (3认同)

Vij*_*com 8

Apple的解决方案:

来自Apple文档

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

如果该应用已安装在用户的设备上,则横幅会智能地更改其操作,点按横幅将只会打开该应用.如果用户没有在他的设备上安装您的应用程序,点击横幅将使他进入App Store中的应用程序条目.当他返回您的网站时,横幅中会出现一个进度条,指示下载完成所需的时间.当应用程序完成下载后,"查看"按钮将变为"打开"按钮,点击横幅将打开应用程序,同时保留用户的网站上下文.

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

要将智能应用横幅添加到我们的网页,请在每个页面的开头包含以下元标记,您可以在其中显示横幅:

注意:我们也可以传递app-argument:如myName等,

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

更新:

1.一旦你关闭了显示的横幅,即使你在我们的html中有了这个元标记,也不会再显示.

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