我正在申请4项不同的活动。
我正在实施方案,以便从网址发送到电子邮件客户端(Gmail)启动活动。
用户收到电子邮件,它有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>
问题
答案 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商店进行深层链接,以便个性化新用户体验。