簡體   English   中英

通過瀏覽器中的 URL 打開 Android 應用

[英]Open an Android app via a URL in the browser

好的,所以我知道必須有比這更多的東西。 我在這里閱讀了很多答案,都說同樣的話,但對我不起作用。 我希望能夠使用帶有自定義 URL 方案的鏈接從瀏覽器打開 Android 應用程序。 首先,我正在使用模擬器(實際上是 Genymotion),所以我不知道這是否與它有關。 我看到的答案一直在說我需要的只是與此類似的東西:

<intent-filter>
    <data android:scheme="myapp" android:host="hello"/>
    <action android:name="ANDROID.INTENT.ACTION.VIEW"/>
    <category android:name="ANDROID.INTENT.CATEGORY.BROWSABLE"/>
    <category android:name="ANDROID.INTENT.CATEGORY.DEFAULT"/>
</intent-filter>

我把它放在一個新的空白活動上,而不是主要活動上。

如果我理解正確,任何以myapp://hello開頭的 URL 都將使用該意圖過濾器打開活動。 但是,無論我嘗試什么,我都會在瀏覽器中不斷收到 ERR_UNKNOWN_URL_SCHEME。 這是庫存的 Android 瀏覽器,因為我不能將 Chrome 放在 Genymotion 上(至少不是免費版本)。 這是需要 Chrome 的東西嗎? 它只能在實際設備上完成嗎? 有什么我做錯了嗎?

這里有幾件事情在起作用。

首先,正如 Blackbelt 所指出的,Android 區分大小寫,大多數編程語言和開發環境也是如此。 您需要按照這些操作和類別的文檔將其更改為正確的情況:

<intent-filter>
    <data android:scheme="myapp" android:host="hello"/>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>

其次,並非所有的 Web 瀏覽器都像myapp://一樣處理方案。 我不知道在任何司法管轄區有任何關於書籍的法律迫使開發商尊重它們。 您將遇到三種基本模式:

  • 有些瀏覽器可能會處理得很好

  • 當在頁面上的鏈接中使用此類 URL 時,某些瀏覽器會處理它們,但如果在地址欄中鍵入 URL,則不會處理它們

  • 一些瀏覽器不會嘗試找到一個活動來處理它們並且一直失敗

Google 的首選替代方案是使用httphttps方案,主機和路徑由您控制。 一些瀏覽器將始終打開該網頁,但其他瀏覽器會檢查、查看是否存在宣傳支持該 URL 的活動,並讓用戶選擇如何處理它。 Android 的“M”版本將提供更多可以繞過選擇器的鈎子( “應用鏈接” )。 此外,其他應用程序(例如,短信客戶端、電子郵件客戶端)通常會將http鏈接設為可點擊,允許用戶選擇打開您的應用程序,而很少有應用程序知道myapp://hello以同樣的方式有意義。

如果 url 是http://www.example.com/test/test1表示使用以下代碼:

在android清單文件中添加

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Holo.Light.NoActionBar">
    <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter android:label="@string/app_name" >
         <action android:name="android.intent.action.VIEW" />
         <!-- Accepts URIs that begin with "http://example.com/test/test1" -->
         <data
             android:host="www.example.com"
             android:pathPrefix="/test/test1"
             android:scheme="http" />
         <category android:name="android.intent.category.DEFAULT" />
         <category android:name="android.intent.category.BROWSABLE" />
     </intent-filter>
</activity>

看看我在這里問的問題 您應該查看我授予賞金的答案並查看評論。

概括:
使用 android web-view 的應用程序存在問題。
問題不在於您,而在於您單擊鏈接的應用程序。 在這種情況下,您的瀏覽器。

您可以嘗試使用 HTML 查看器,它會起作用,至少它對我有用。
Xperia 的一些默認電子郵件應用程序確實有效。

現在在 Google IO 2015 中隨着 Android M 的發布,他們也改進了應用程序深層鏈接(同樣的事情),因為我們(開發人員)對這些抱怨很多。
你可以在這里這里看到它。

我希望它有幫助:)

問題在於沒有標准——所以每個解決方案都會有它的缺陷。

經過大量研究和工作,我建議在任何地方使用Android 應用程序鏈接(http/s 鏈接),並使用自定義應用程序方案( myapp://... )回退到具有深層鏈接的頁面。

可以使用代理服務器處理回退 - 如果應用程序鏈接不起作用,它將打開瀏覽器以獲取具有打開 URL 的網頁。

它經過測試並證明可以捕獲所有已知的陷阱。

順便說一句:當今大多數流行的瀏覽器都可以在 Android 上完美地處理自定義應用程序方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM