2012-03-13 58 views
14

在我的iPhone上,我剛剛注意到,如果我使用Google搜索(在移動Safari中)並在quora.com上選擇結果,結果頁面會在手機上啓動本機Quora應用程序。如何從移動Safari重定向到本機iOS應用程序(如Quora)?

這是如何完成的?具體而言,它是檢測用戶代理和使用iOS URL方案嗎?它可以告訴本機應用程序是否安裝和/或重定向到應用程序商店?

回答

4

你可以做觸發使用custom URL scheme,通過與iOS的運行你的應用程序註冊啓動您的應用程序。然後在您的網站上編寫代碼來檢測傳入的用戶代理,如果檢測到iOS,則生成您的自定義URL而不是常規http。

+4

那麼,會發生什麼如果他們沒有安裝應用程序? – Callmeed 2012-03-13 19:18:26

+0

好問題,因爲沒有一個標準的處理方法。但是這裏(http://stackoverflow.com/questions/1108693/is-it-possible-to-register-a-httpdomain-based-url-scheme-for-iphone-apps-like/1109200#1109200)是本網站的另一位用戶發佈的體面解決方法。 – Perception 2012-03-13 19:56:14

+0

解決方法是檢測您的應用程序安裝時是否沒有錯誤消息? – kkurni 2014-01-29 06:09:08

15

我重新發佈一個答案,我自己有關(但最初的Ruby-on-Rails的特定的)問題在這裏:Rails: redirect_to 'myapp://' to call iOS app from mobile safari

您可以使用JavaScript重定向window.location

示例代碼:

<html><head> 
    <script type="text/javascript"> 
     var userAgent = window.navigator.userAgent; 
     if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i)) { 
     window.location = "myiosapp://" 
     } 
    </script> 
    </head> 
    <body> 
    Some html page 
    </body> 
</html> 
+0

在我的iOS 7設備上不起作用。 – Jonny 2013-10-16 09:57:19

+0

如果我以全屏模式從webclip啓動webapp,則無法在iOS 7設備上使用。它不得不是webclip的全屏模式設置。 – Jonny 2013-10-16 10:02:36

+0

如果沒有安裝應用程序,這將不起作用。 – kkurni 2014-01-29 06:09:34

5

JS代碼的只是一個小的改進,如果沒有安裝的應用程序,它會向用戶發送到iTunes商店)

<script type="text/javascript"> 

    // detect if safari mobile 
    function isMobileSafari() { 
     return navigator.userAgent.match(/(iPod|iPhone|iPad)/) && navigator.userAgent.match(/AppleWebKit/) 
    } 
    //Launch the element in your app if it's already installed on the phone 
    function LaunchApp(){ 
     window.open("Myapp://TheElementThatIWantToSend","_self"); 
    }; 

    if (isMobileSafari()){ 
     // To avoid the "protocol not supported" alert, fail must open itunes store to dl the app, add a link to your app on the store 
     var appstorefail = "https://itunes.apple.com/app/Myapp"; 
     var loadedAt = +new Date; 
     setTimeout(
      function(){ 
      if (+new Date - loadedAt < 2000){ 
       window.location = appstorefail; 
      } 
      } 
     ,100); 
     LaunchApp() 

    } 

</script> 
相關問題