【问题标题】:Send an email with a link (HTML) to open a specific application on the mobile phone发送带有链接 (HTML) 的电子邮件以在手机上打开特定应用程序
【发布时间】:2015-10-27 03:13:14
【问题描述】:

背景

我打算在我的应用程序中实现密码重置功能。经过一些研究,我评估了这种方法以满足我的需求:

  1. 用户进入“重置密码”活动,在该活动中他输入预先注册的电子邮件以发送重置链接。
  2. 系统有一个表password_change_requests,其中包含IDTimeUserID 列。当用户按下“发送”按钮重置密码时,会在表中创建一条记录。 Time 列包含用户按下“忘记密码”按钮的时间。 ID 是一个字符串。创建一个长随机字符串,然后像密码一样散列。然后将此哈希用作表中的“ID”。
  3. 系统向用户发送一封电子邮件,其中包含一个链接。该链接还包含原始 ID 字符串(在散列之前)。
  4. 当用户单击电子邮件中的链接时,他将被移至相关应用程序。应用程序从 URL 中检索 ID,再次对其进行哈希处理,然后对照表进行检查。如果存在这样的记录并且不超过 24 小时,则会提示用户输入新密码。
  5. 用户输入新密码,点击确定。

这种方法的灵感来自 Vilx- 对this question 的回答。

困难

乍一看,上面介绍的方法似乎很容易实现。但是我遇到了一些头痛。步骤(1)和(2)很容易实现。当我仔细查看步骤 (3) 和 (4) 时,我最初的想法是在电子邮件中发送某种 Intent,因为这是启动应用程序的常用方式。但由于意图的“来源”充其量是 HTML 代码,我不太确定这是否可行。

问题

  1. 如何从用户收件箱中的电子邮件(比如 HTML 锚标记)启动我的特定 Android 应用程序?
  2. 如何通过电子邮件将数据(ID 字符串)传递给我的应用程序?

如果这不可能,是否有替代方法来解决上述方法?

【问题讨论】:

    标签: android html


    【解决方案1】:

    如何从用户收件箱中的电子邮件(比如 HTML 锚标记)启动我的特定 Android 应用程序?

    没有保证的方法可以做到这一点。电子邮件应用程序没有义务关注您。

    欢迎您在您的应用程序中使用 <intent-filter> 来宣传您希望响应某些 URL 或 URL 前缀的活动,例如 http://marcussystem.com/hey/lets/run/the/app。理论上,当用户点击电子邮件中指向匹配 URL 的链接时,您的应用将包含在选择器中(连同 Web 浏览器)供用户选择。

    或者,欢迎您使用 intent 方案创建一个 URL,以打开您的一项活动。电子邮件客户端可能无法将其识别为有效 URL,但它会绕过选择器。

    但是,同样,任何电子邮件客户端都不需要支持您想要的功能。对于碰巧在移动 Web 浏览器中查看电子邮件的用户来说,这会增加一倍。

    如何通过电子邮件将数据(ID 字符串)传递给我的应用程序?

    http URL 的情况下,让它成为URL 本身的一部分,最好在路径中:http://marcussystem.com/hey/lets/run/the/app/and/here/is/the/ID/...,其中... 是您的ID(假设它是纯粹的URL 路径友好字符)。

    【讨论】:

    • 使用<intent-filter> 似乎是一种有效的方法,尽管它有指出的缺点。另一个想法是我可以让 URL 指向我的 Web 服务器,它可以获取数据参数并运行脚本来启动应用程序。这可能会消除“选择器问题”。您知道是否有任何支持此功能的服务器端语言?
    • @Marcus:“并运行脚本来启动应用程序”——这实际上是不可能的。充其量,您可以说 Web 服务器向设备的浏览器返回一个网页,其中该页面包含一个旨在运行您的应用程序的链接。
    • 那太糟糕了。我将按照它的当前外观使用意图过滤器。一如既往,非常感谢您的回答,谢谢!
    猜你喜欢
    • 2012-10-21
    • 2017-06-11
    • 2021-06-06
    • 2011-08-30
    • 2012-08-10
    • 2018-05-06
    • 1970-01-01
    • 2012-07-30
    相关资源
    最近更新 更多