【问题标题】:How to to share context between Safari and Native App?如何在 Safari 和 Native App 之间共享上下文?
【发布时间】:2012-09-19 08:33:54
【问题描述】:

我需要通过 Safari 设置一些上下文(上下文令牌),然后从原生 iOS 应用读取该上下文。这样做的最佳做法是什么?

到目前为止的一些想法:

  1. 在 HTML 5 数据库中设置上下文,但我不确定这是否可行,因为该数据库可能只能从 Safari 访问。 在本机应用程序中使用 WebUIView 是否允许我访问与 Safari 相同的 HTML5 数据库/本地存储
  2. 在设备存储中设置上下文,但我不确定这是否可行,因为我不知道 Safari 是否真的可以写入设备存储。

【问题讨论】:

  • 您打算从浏览器启动应用程序吗?还是用户稍后才打开应用程序?
  • @JesseRusak - 这有点复杂,但发生的事情是用户收到了一个带有唯一“上下文令牌”的 URL 的电子邮件。他们在 Safari 中打开它。然后将他们重定向到 Apple App Store 以下载应用程序。下载应用程序后,我们需要知道原始的“上下文令牌”。今天我们只是向用户发送一条带有我们在应用程序中处理的自定义 URL 的 SMS,并从中解析上下文令牌,但这不是一个理想的行为。我们正在寻找一种更好的方法来传递此上下文,并摆脱 SMS 消息。

标签: ios html native


【解决方案1】:

我会建议以下两个选项之一:

  • 让网络服务器在应用程序和网站上跟踪用户,例如通过创建用户帐户。

  • 通过将您的应用注册为协议处理程序,立即通过 URL 方案将上下文令牌传递给应用,请参阅更多信息 here

    建议方式:

    1. 发送带有链接和上下文令牌的电子邮件,当用户单击链接时,将上下文令牌保存在 safari 的 cookie 中,然后重定向到应用商店进行应用下载。
    2. 当用户下载并打开应用时,为用户显示一个按钮,当用户点击它时,在 safari 中打开一个网页。
    3. Safari 使用上下文令牌加载 cookie,然后使用诸如 yourAppName://contextToken=12345678 之类的 URL 方案触发另一个链接。该链接会打开您的应用,该应用会从 URL 中读取上下文令牌。

没有直接在 Safari 和本机应用程序之间直接共享数据的最佳做法,而且您根本不应该这样做。每个应用程序的所有 cookie 和存储都被沙盒化,并且 safari 有自己的沙盒。

让您的服务器通过用户帐户完成工作是 i.m.o 最好和最干净的方式。这就是您拥有用户帐户的原因。如果您没有尝试使用协议处理程序来读取特定的 URL,我认为这也可以很方便。

【讨论】:

  • 好主意。我想知道用户在第一次打开 Safari 和原生应用程序时会不会有很差的用户体验?
  • 当然,这不会是顶级的用户体验,而且看起来有点混乱,但如果你真的想避免用户注册过程,我想不出更好的方法。但是,由于您已经通过电子邮件向用户发送了某种令牌,从某种意义上说,这意味着您确实有一个注册过程,您也可以一直完成它。看看 WhatsApp 之类的应用程序或 WordFeud 之类的游戏 - 两者都有快速的注册流程,这并没有降低它们的受欢迎程度。
  • TechCrunch 报告说这种方法现在导致应用程序被 Apple 拒绝。 techcrunch.com/2013/02/25/…
  • 是的,似乎是为了防止滥用广告。这里的意图不是广告,而是注册过程的一部分。如果 Apple 清楚这一点,它可能仍然被允许。或者也许不是——如果 Apple 想要阻止所有“野生动物园翻转”,广告与否。但是没有办法确定,除了尝试 =)
  • 您还通过假设声称为yourAppName://contextToken=12345678 的应用程序实际上是您的应用程序而不是试图窃取您的会话的恶意行为者来引入安全漏洞...通用链接是一个很好的解决方法。
【解决方案2】:

您能否让应用程序在首次启动时点击一个由服务器托管的 URL,该 URL 在 Safari 中重定向用户,并比较 IP 地址、时间、iOS 版本等以至少获得近似匹配?如果近似匹配不充分,您可以在看到近似匹配时让您的应用打开 safari 以通过 cookie 确认其身份。

【讨论】:

  • 我没有得到 cookie 部分...? Safari 无法从应用程序访问 cookie,它们已被沙盒化...
  • 您可以通过检查用户首次访问网站时设置的 cookie(在 Safari 中)来确认他们的身份。这将让您确定它们应该具有哪个上下文,并让您将它们重定向到具有正确上下文的应用程序(通过 URL 方案)。
  • 另外,iOS 6 没有这样的东西吗?他们宣布了一些从网站启动应用程序(或应用程序商店)并传递上下文信息的方法,不是吗?
  • @JesseRusak 你有推荐人吗?
  • @LukeMcneice 是的,他们叫Smart App Banners
【解决方案3】:

使用WebViewJavascriptBridge 在 UIWebView 和您的本机之间发送消息很容易。

不过,在您的情况下,接受的答案建议使用自定义 URL 方案(直接从电子邮件到应用,安装后)是最有意义的。

【讨论】:

    猜你喜欢
    • 2019-08-20
    • 2020-11-08
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    相关资源
    最近更新 更多