【问题标题】:invoking application activity from url in email从电子邮件中的 url 调用应用程序活动
【发布时间】:2015-08-24 10:23:47
【问题描述】:

我有一个包含 4 个不同活动的应用程序。

  • 活动 1 用于实时屏幕
  • 活动 2 用于播放屏幕

我正在实现从发送到电子邮件客户端 (Gmail) 的 url 启动活动的方案。

用户收到电子邮件,它有 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. 由于我在清单文件中添加了两个意图过滤器,当我单击电子邮件中的 url 链接时,它会打开一个选择器对话框来选择应用程序。 在里面,我的应用程序图标显示了 2 次。 我希望我的应用程序图标只显示一次。并根据链接,它应该打开活动 1 或 2。 根据清单文件中给出的意图过滤器,该图标似乎出现了多次。我该如何克服这个问题

【问题讨论】:

    标签: java android android-intent deep-linking custom-url


    【解决方案1】:

    当我使用自定义方案(例如“myapp”)时,Gmail 内的链接不可点击。如果我将方案添加为“http”,我只能单击该链接。这是 android 电子邮件客户端的缺点吗?如何克服这个问题并使用可点击的自定义 url。

    不幸的是,它是否想与自定义 URL 方案配合得很好取决于 GMail。

    一种常用的解决方案是链接到将用户重定向到自定义 URL 方案的网站。

    由于我在清单文件中添加了两个意图过滤器,当我单击电子邮件中的 url 链接时,它会打开一个选择器对话框来选择应用程序。在里面,我的应用程序图标显示了 2 次。我希望我的应用程序图标只显示一次。并根据链接,它应该打开活动 1 或 2。根据清单文件中给出的意图过滤器,图标似乎出现了多次。我该如何克服这个问题

    只为您要拦截的每个唯一 URI 方案注册一个意图过滤器。

    如果您的应用需要解析数据以确定去往何处,那么您可以将该逻辑放在主 Activity 中,或者创建一个特殊 Activity 仅用于解析链接并将意图过滤器放在该 Activity 的清单条目中.

    如果你真的在使用&lt;data android:scheme="http" /&gt;,那么你的&lt;data&gt; 标签就太模糊了。您可以通过添加主机或路径属性使它们更具体,以便您的链接仅解析为您的意图过滤器之一,而不是全部。

    【讨论】:

      【解决方案2】:

      免责声明:我为 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>
      

      Branch 再次为您完成所有工作,并允许您通过 Play 商店进行深度链接,以提供个性化的新用户体验。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-26
        • 1970-01-01
        • 2010-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-14
        相关资源
        最近更新 更多