2015-06-09 32 views
2

我有一個應用程序與4個不同的活動。從電子郵件中的URL調用應用程序活動

  • 活動1是直播屏幕
  • 活動2是播放畫面

我implementating方案來從URL啓動活動發送到電子郵件客戶端(如Gmail)。

用戶收到的電子郵件,它有2個鏈接:

  • 鏈接1是開啓實時屏幕(活動1)
  • 鏈接2是打開播放畫面(活動2)

在我的申請清單文件中,我爲活動1和活動2創建了意圖過濾器。

<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" /> 
    </intent-filter> 

問題

  1. 當我使用自定義方案(例如「myapp」)時,Gmail中的鏈接無法點擊。我只能點擊鏈接,如果我添加方案爲「http」。它是一個Android電子郵件客戶端的缺點?如何解決此問題並使用可點擊的自定義網址。
  2. 由於我在清單文件中添加了兩個intent過濾器,當我點擊電子郵件中的url鏈接時,它會打開一個選擇器對話框來選擇應用程序。 裏面,我的應用程序圖標顯示2次。 我希望我的應用程序圖標只顯示一次。並且基於該鏈接,它應該打開活動1或2. 似乎該圖標出現次數按照在清單文件中給出的意圖過濾器。我怎樣才能解決這個問題

回答

1

當我使用自定義方案(例如「MYAPP」)Gmail的內部鏈接無法點擊。我只能點擊鏈接,如果我添加方案爲「http」。它是一個Android電子郵件客戶端的缺點?如何解決此問題並使用可點擊的自定義網址。

不幸的是,它是由GMail決定,不管它是否想要與自定義URL方案打好關係。

一個常用的解決方案是鏈接到將用戶重定向到自定義URL方案的網站。

因爲我在清單文件中添加了兩個intent過濾器,當我點擊電子郵件中的url鏈接時,會打開一個選擇器對話框來選擇應用程序。在裏面,我的應用程序圖標顯示2次。我希望我的應用程序圖標僅顯示一次。並且基於該鏈接,它應該打開活動1或2.似乎該圖標出現在清單文件中給出的意圖過濾器的次數。我怎樣才能克服這個問題

只爲每個你想攔截的唯一URI方案註冊一個意圖過濾器。

如果您的應用需要解析數據以確定去哪裏,那麼您可以將該邏輯放在主要活動中,或者創建一個特殊的活動,僅用於解析鏈接並將意圖過濾器放入該活動的清單條目。

如果你真的在使用<data android:scheme="http" />,那麼你的<data>標籤太簡單了。您可以通過添加主機或路徑屬性來使其更具體,以便您的鏈接僅解析爲您的意圖過濾器之一而不是全部。

0

免責聲明:我爲branch.io工作,並考慮約18小時的移動鏈接。

第2期第一,因爲它更容易。它會兩次顯示圖標,因爲您已經爲相同的URI註冊了兩次應用程序。就像您的手機上有多個瀏覽器一樣,它們都會註冊http方案,以便單擊http鏈接時,各個瀏覽器圖標將顯示在選擇器中。

現在問題1,關於從電子郵件中打開您的應用程序。首先,您可以使用Branch link爲您自動完成所有這些操作。這是非常容易的,我強烈推薦它。但是,如果您擁有無限資源並想自己構建它,或者只是想了解它的工作原理,請在下面進行解釋。

首先,從最佳實踐的角度來看,你永遠都不想只是把你的URI方案(MYAPP://)在公開消息,因爲如果不安裝該應用程序的所有瀏覽器拋出一個錯誤消息。你需要一些客戶端JavaScript回落到Play商店。關於這個最糟糕的部分是,幾乎所有的瀏覽器都以不同的方式處理。例如,Twitter的webview與Chrome非常不同。

下面是一些例子客戶端JS打開Facebook的應用程序和深層鏈接到一個職位,但退回到Play商店正常,如果不是安裝它。它處理一些最常見的瀏覽器。

<script type="text/javascript"> 
    window.onload = function() { 
     var method = 'iframe'; 
     var fallbackFunction = function() { 
      if (method == 'iframe') { 
       window.location = "market://details?id=com.facebook.katana"; 
      } 
     }; 
     var addIFrame = function() { 
      var iframe = document.createElement("iframe"); 
      iframe.style.border = "none"; 
      iframe.style.width = "1px"; 
      iframe.style.height = "1px"; 
      iframe.src = "fb://page/838619192839881"; 
      document.body.appendChild(iframe); 
     }; 
     var loadChromeIntent = function() { 
      method = 'intent'; 
      document.location = "intent://page/838619192839881#Intent;scheme=fb;package=com.facebook.katana;end"; 
     }; 
     if (navigator.userAgent.match(/Chrome/) && !navigator.userAgent.match("Version/")) { 
      loadChromeIntent(); 
     } 
     else if (navigator.userAgent.match(/Firefox/)) { 
      window.location = "fb://page/838619192839881"; 
     } 
     else { 
      addIFrame(); 
     } 
     setTimeout(fallbackFunction, 750); 
    }; 
</script> 

此外,分公司所有這一切給你,並允許您通過Play商店的全新用戶體驗個性化的深層鏈接。

相關問題