如何在Swift中为URL编码大型Data对象?

时间:2018-06-06 23:44:25

标签: ios swift url

我想使用网址打开我的iOS应用,但我的网址似乎太长了? URL的长度是否有限制?我整天都在网上搜索过,看起来没有明确的答案。我的url包含一个对象的base64EncodedString,大约是1,500个字节。

看起来像这样:

MyApp://favorite?Class=eyJzZXR0aW5ncyI6eyJzY2FsZSI6WzAsNCwxMiwxOSwyMF0sImZyZXEiOjIyMCwidHVuaW5nIjoiZXlKelkyRnNZU0k2SWlGY2JpRWdjSFJ2YkdWdGVTNXpZMnhjYmlGY2JsQjBiMnhsYlhrZ01USWdibTkwWlNCelkyRnNaVnh1SURFeVhHNGhYRzRnTVRkY0x6RTJYRzRnT1Z3dk9GeHVJREU1WEM4eE5seHVJRFZjTHpSY2JpQTBYQzh6WEc0Z01URmNMemhjYmlBelhDOHlYRzRnTVROY0x6aGNiaUExWEM4elhHNGdOMXd2TkZ4dUlERTFYQzg0WEc0Z01sd3ZNVnh1SW4wPSIsInNvdW5kIjoiZXlKaGRIUnlhV0oxZEdWeklqcGJleUpoZEhSaFkyc2lPakl1TXprd01EQXdNREF3TURBd01EQXlMQ0prWldOaGVTSTZNQzR6TkRrNU9UazVPVGs1T1RrNU9UazVMQ0pwYzAxMWRHVmtJanBtWVd4elpTd2ljbVZzWldGelpTSTZNQzR6TlRJMU1EQXdNREF3TURBd01EQXhMQ0p3WVhKMGFXRnNJam93TGpVeExDSmhiWEFpT2pBdU1qTXpOelV3TURBd01EQXdNREF3TVN3aWMzVnpkR0ZwYmlJNk1IMHNleUpoZEhSaFkyc2lPakF1TWpVc0ltUmxZMkY1SWpvd0xqRXpOU3dpYVhOTmRYUmxaQ0k2Wm1Gc2MyVXNJbkpsYkdWaGMyVWlPakVzSW5CaGNuUnBZV3dpT2pFc0ltRnRjQ0k2TUM0M05Td2ljM1Z6ZEdGcGJpSTZNSDBzZXlKaGRIUmhZMnNpT2pBdU9URTFNREF3TURBd01EQXdNREF4TXl3aVpHVmpZWGtpT2pBdU5URXlOVEF3TURBd01EQXdNREF3TXl3aWFYTk5kWFJsWkNJNlptRnNjMlVzSW5KbGJHVmhjMlVpT2pBdU1qWXlOU3dpY0dGeWRHbGhiQ0k2TWk0eU5EazVPVGs1T1RrNU9UazVPVGdzSW1GdGNDSTZNQzR3T0RFNU9UazVPVGs1T1RrNU9UazVPU3dpYzNWemRHRnBiaUk2TUgwc2V5SmhkSFJoWTJzaU9qQXNJbVJsWTJGNUlqb3dMakkwTlN3aWFYTk5kWFJsWkNJNlptRnNjMlVzSW5KbGJHVmhjMlVpT2pBdU16Y3lOVEF3TURBd01EQXdNREF3TVN3aWNHRnlkR2xoYkNJNk5TNDNOREl3TURBd01EQXdNREF3TURFc0ltRnRjQ0k2TUM0d05UY3NJbk4xYzNSaGFXNGlPakI5WFN3aWJtRnRaU0k2SWtOc1pXRnlJRUpsYkd3aUxDSmtaWE5qSWpvaVNuVnpkQ0JoYm05MGFHVnlJR0psYkd3Z2MyOTFibVF1SW4wPSIsInRvbmUiOiJBIiwibXV0ZWQiOmZhbHNlfSwibmFtZSI6IlB0b2xlbXkgaW4gQSIsImRlc2MiOiJDbGVhciBCZWxsIn0=

我想发短信或通过电子邮件发送此网址,然后让收件人点按该链接,在他们的设备上打开我的应用。

麻烦的是链接包含在邮件和消息应用程序中,而只包含" MyApp://收藏?"部分用蓝色标记为链接。文本的其余部分不是链接的一部分。

有没有办法通过网址发送这样的数据?

1 个答案:

答案 0 :(得分:2)

这听起来与URL本身或Swift无关。您要描述的问题是&#34;邮件和邮件应用程序。&#34;听起来你是以明文发送消息并依靠数据检测器来查找它。这对数据检测器的要求太高了,这是一个启发式猜测过程。如果您想将其作为链接发送,则应将其作为HTML邮件发送,并使用<a href>进行标记。

关于格式的一些注释:

此数据采用双base64编码,非常浪费。如果你只编码一次,那就是:

MyApp://favorite?Class=eyJzZXR0aW5ncyI6eyJzY2FsZSI6WzAsNCwxMiwxOSwyMF0sImZyZXEiOjIyMCwidHVuaW5nIjp7InNjYWxhIjoiIVxuISBwdG9sZW15LnNjbFxuIVxuUHRvbGVteSAxMiBub3RlIHNjYWxlXG4gMTJcbiFcbiAxNy8xNlxuIDkvOFxuIDE5LzE2XG4gNS80XG4gNC8zXG4gMTEvOFxuIDMvMlxuIDEzLzhcbiA1LzNcbiA3LzRcbiAxNS84XG4gMi8xXG4ifSwic291bmQiOnsiYXR0cmlidXRlcyI6W3siYXR0YWNrIjoyLjM5MDAwMDAwMDAwMDAwMiwiZGVjYXkiOjAuMzQ5OTk5OTk5OTk5OTk5OSwiaXNNdXRlZCI6ZmFsc2UsInJlbGVhc2UiOjAuMzUyNTAwMDAwMDAwMDAwMSwicGFydGlhbCI6MC41MSwiYW1wIjowLjIzMzc1MDAwMDAwMDAwMDEsInN1c3RhaW4iOjB9LHsiYXR0YWNrIjowLjI1LCJkZWNheSI6MC4xMzUsImlzTXV0ZWQiOmZhbHNlLCJyZWxlYXNlIjoxLCJwYXJ0aWFsIjoxLCJhbXAiOjAuNzUsInN1c3RhaW4iOjB9LHsiYXR0YWNrIjowLjkxNTAwMDAwMDAwMDAwMTMsImRlY2F5IjowLjUxMjUwMDAwMDAwMDAwMDMsImlzTXV0ZWQiOmZhbHNlLCJyZWxlYXNlIjowLjI2MjUsInBhcnRpYWwiOjIuMjQ5OTk5OTk5OTk5OTk4LCJhbXAiOjAuMDgxOTk5OTk5OTk5OTk5OTksInN1c3RhaW4iOjB9LHsiYXR0YWNrIjowLCJkZWNheSI6MC4yNDUsImlzTXV0ZWQiOmZhbHNlLCJyZWxlYXNlIjowLjM3MjUwMDAwMDAwMDAwMDEsInBhcnRpYWwiOjUuNzQyMDAwMDAwMDAwMDAxLCJhbXAiOjAuMDU3LCJzdXN0YWluIjowfV0sIm5hbWUiOiJDbGVhciBCZWxsIiwiZGVzYyI6Ikp1c3QgYW5vdGhlciBiZWxsIHNvdW5kLiJ9LCJ0b25lIjoiQSIsIm11dGVkIjpmYWxzZX0sIm5hbWUiOiJQdG9sZW15IGluIEEiLCJkZXNjIjoiQ2xlYXIgQmVsbCJ9

可以节省超过350个字节的当前方法。

如果你在对Base64进行编码之前通过gzip运行它,它就是这个大小的三分之一(~550字节)。使用二进制格式,你可能会把它降低到~200字节(在base64编码之后),甚至没有变得聪明。

也就是说,URL完全能够处理这种大小的数据。我怀疑你的问题只是要求启发式系统检测URL,而不是用HTML确切地标记它。