2011-02-10 100 views
13

我想創建一個可以通過電子郵件發送的鏈接,當安裝了我的應用程序的Android設備上打開鏈接時,會自動在我的應用程序中打開正確的頁面。Android深入鏈接到應用程序

我已經通過幾種不同的方式獲得了部分工作,但發現了一些問題,我想知道是否有人有解決方案。

嘗試1:使用自定義方案:myapp:// someItem。這可行,但一些電子郵件應用程序不會將其視爲鏈接,因爲它不是http。有沒有辦法強制應用程序將其視爲有效的鏈接?例如,Gmail。

嘗試2:與主機使用http鏈接:http://com.myapp/someItem。這也適用,但我的應用程序最終註冊處理所有不理想的http鏈接。

嘗試3:在主機和端口上使用http鏈接:http://com.myapp:2345/someItem。這是我目前的解決方案,唯一的缺點是當鏈接打開時,它仍然可以選擇在瀏覽器中打開鏈接。有沒有辦法阻止瀏覽器試圖打開我的鏈接?

有沒有人有辦法使鏈接被所有的應用程序視爲鏈接,並且在打開它們時也被瀏覽器忽略?

+0

能否請你點我的一些資源,幫助我 - 「如何啓用應用內容的深層鏈接」 - 深層鏈接可直接用戶的內容,沒有任何提示,插頁式網頁,或登錄。 – user2056563 2015-08-31 10:36:15

回答

4

這種技術實際上似乎是工作在Android從我可以告訴:

http://mobile.dzone.com/news/custom-url-schemes-phonegap

我還沒有嘗試過在一個真正的生產應用程序,所以你的里程可能會有所不同我所做的就是使用創建隱藏iframe的方法,並嘗試將位置設置爲自定義url方案,並從文檔的onload調用函數。到目前爲止,我所看到的(我只在2.2和2.3設備上進行過測試)是,如果我安裝了一個應用程序來處理自定義方案,則該應用程序將啓動,否則該頁面將呈現。

相對乾淨的單個URL來覆蓋這兩種情況,並且不會毀掉像URL的Twitter分享之類的東西。如果請求來自看起來像可能支持應用程序的平臺,以減少不兼容的桌面行爲的風險,則實際生產版本可能只會執行隱藏的iframe探測。

+1

我已經完成了90%的工作。我唯一不喜歡的是它在瀏覽器中留下一頁。我希望它能夠成功返回1頁,並保持它無法顯示下載鏈接的地方。你有沒有找到方法來檢查重定向是否有效? – skorulis 2011-02-10 22:31:31

0

如果你可以使用服務器端的東西,也許你可以有一個普通的頁面,當訪問時從瀏覽器跳轉到自定義方案鏈接?這具有可能分辨應用程序是否未安裝並提示安裝的附加優點。

雖然它並沒有解決在瀏覽器中打開鏈接的問題。我能想到的唯一真正的解決方案就是跳轉到相應應用程序的鏈接處理程序。那麼問題是,允許用戶更改首選瀏覽器...

+0

如果應用程序已安裝,我將如何從瀏覽器中檢查? – skorulis 2011-02-10 03:46:29

+0

哦,我沒有想到這一點。我不知道是否有一個簡單的方法來做到這一點。至少,點擊頁面是可能的。 ;編輯:也許你可以在應用程序上運行HTTP服務器服務,然後使用它來檢測應用程序的存在?這就是我現在可以提出的一切。 – 2011-02-10 03:48:45

4

要回答您的問題,以下是清單中的示例意圖過濾器。

<intent-filter> 
    <action android:name="android.intent.action.VIEW"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <category android:name="android.intent.category.BROWSABLE"/> 
    <data 
     android:host="www.example.com" 
     android:pathPrefix="/home" 
     android:scheme="https"/> 
</intent-filter> 

因此,基本上,當開始http://www.example.com/home任何鏈接有人點擊,他/她將獲得與您的應用程序打開它與瀏覽器的應用程序一起的選項。 你必須處理活動的意圖

此外,該計劃可能是任何東西,但谷歌建議http方案,以便您的應用程序和瀏覽器應用程序可以聽深度鏈接的網址上的點擊。

注意:如果您想要鏈接應用,請不要忘記在您的網頁中添加android-app:// yourpackage name/http/www.example.com/home/...。

1
1:-set Custom URL schemes like http://example.com. 
    For example, the URL http://example.com/?id=95 , 
    will open up the relevant FAQ and the URL 
    http://example.com/?sectionid=8 
    (where sectionid is the publish id of any Section), 
    will open up relevant section. 
2:- <activity android:name="com.example.shilpi.deeplinkingsample.DeepLinkActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 
       <data android:scheme="http" android:host="example.com"/> 
      </intent-filter> 
     </activity> 
3:-   @Override 
      protected void onResume() { 
       super.onResume(); 

       Intent in = getIntent(); 
       Uri data = in.getData(); 
       System.out.println("deeplinkingcallback :- "+data); 
      } 
相關問題