从电子邮件中的url调用应用程序活动

时间:2015-06-09 14:20:32

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

我正在申请4项不同的活动。

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

我正在实施方案,以便从网址发送到电子邮件客户端(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. 当我使用自定义方案时(例如&#34; myapp&#34;),Gmail中的链接无法点击。我只能点击链接,如果我添加方案为&#34; http&#34; 。这是Android电子邮件客户端的缺点吗?如何克服此问题并使用可点击的自定义网址。
  2. 因为我在清单文件中添加了两个intent过滤器,当我点击电子邮件中的url链接时,它会打开一个选择器对话框来选择应用程序。 在其中,我的应用程序图标显示2次。 我希望我的应用程序图标只显示一次。并且基于该链接,它应该打开活动1或2。 根据清单文件中给出的intent过滤器,似乎图标显示的次数。我怎样才能克服这个问题

2 个答案:

答案 0 :(得分:1)

  

当我使用自定义方案时(例如&#34; myapp&#34;),Gmail中的链接无法点击。我只能点击链接,如果我添加方案为&#34; http&#34; 。这是Android电子邮件客户端的缺点吗?如何克服此问题并使用可点击的自定义网址。

不幸的是,GMail是否想要使用自定义URL方案。

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

  

因为我在清单文件中添加了两个intent过滤器,当我点击电子邮件中的url链接时,它会打开一个选择器对话框来选择应用程序。在其中,我的应用程序图标显示2次。我希望我的应用程序图标只显示一次。并且基于该链接,它应该打开活动1或2.根据清单文件中给出的intent过滤器,似乎图标出现次数。我怎样才能克服这个问题

仅为要拦截的每个唯一URI方案注册一个intent过滤器。

如果您的应用需要解析数据以确定去哪里,那么您可以将该逻辑放在主活动中,或者创建一个特殊的Activity,仅用于解析链接并将intent过滤器放入该Activity&#39 ; s明显入口。

如果您确实在使用<data android:scheme="http" />,那么您的<data>代码太模糊了。您可以通过添加主机或路径属性使其更具体,以便您的链接仅解析为您的一个意图过滤器而不是所有过滤器。

答案 1 :(得分: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>

此外,Branch为您完成所有工作,并允许您通过Play商店进行深层链接,以便个性化新用户体验。