【问题标题】:Using a custom URL scheme to import data使用自定义 URL 方案导入数据
【发布时间】:2023-03-06 16:26:01
【问题描述】:

我希望我的应用用户可以通过一种简单的方式相互发送内容。此内容将是一个带有名称、成分列表和一些说明的食谱。也许有一天它会包含一些图片。

我被使用自定义 URL 方案来实现这一点的简单性所吸引,并依赖电子邮件进行通信。我的应用程序将能够撰写电子邮件,并使用此 url 方案嵌入链接。收到食谱的人会单击电子邮件中的此链接,然后它会打开我的应用程序(如果已安装)。该链接将包含要添加的配方的详细信息。

我不确定如何最好地构建 URL,以便它包含配方的详细信息。无论我采用哪种约定来识别配方名称、成分和说明,都可能是易碎的。例如,如果我决定构建类似的东西:

`myApp://name=salsa&ing=tomatoes&ing=garlic...

如果用户在成分名称中使用“&”创建了食谱,我将错误地解析 url。

我该如何避免这种情况?有没有办法先打包内容,或者至少包含一个校验和(所以接收应用程序可以放弃任何看起来不正确的东西)。如果没有,是否有构建 URL 以包含此类数据的最佳实践?

【问题讨论】:

  • 您需要对 URL 字段中的字段进行百分比转义(例如,将与符号替换为 %26 等)。但在你去那里之前,请注意通常 URL 对长度有一些实际限制,因此发送完整的食谱(尤其是带有图片,你必须对其进行 base64 编码或类似的东西)可能不切实际。
  • 如果你最终走这条路,请参阅stackoverflow.com/questions/705448/…,了解有关转义参数百分比的讨论。
  • 谢谢。当我解码并且用户在名称中输入了 %26 时会发生什么?
  • % 本身将获得百分比编码。

标签: objective-c ios cocoa-touch url url-scheme


【解决方案1】:

您应该在将用户输入嵌入到 URL 之前对其进行清理(即 URL 转义)。您可以使用CoreFoundation函数CFURLCreateStringByAddingPercentEscapes()函数进行这种转换。

【讨论】:

  • 我想我明白了。那么我应该单独编码每个成分名称,然后形成字符串吗?在接收端,我会分离出成分,并分别解码?
  • @BenPackard 是的,基本上就是这样。另外,不要忘记为不同的成分使用相同的名称/密钥不是好习惯,想出别的东西而不是&ing=first ingredient&ing=second ingredient等。
  • 我想知道这一点。也许逗号分隔的成分?例如。成分=第一,第二,等等?除了,我想我需要选择一些实际会被编码的东西?
猜你喜欢
  • 2014-10-07
  • 1970-01-01
  • 2014-04-02
  • 2012-06-15
  • 2011-04-30
  • 2014-10-22
  • 2011-12-14
  • 2011-08-01
  • 2017-07-18
相关资源
最近更新 更多