删除 iPhone OpenGraph SMS 消息需要按 "Tap to Load Preview"
Remove need to press "Tap to Load Preview" for iPhone OpenGraph SMS Message
我正在尝试发送带有 link 的 SMS 消息,其中包含 OpenGraph 预览图像,这些图像将加载到 iOS "Messages" 应用程序中,并且会显示没有缩略图的缩略图用户必须先按 [Tap To Load Preview]... 如何实现?
为此,我正在向 iPhone X 发送一条短信,它是 运行 iOS 10 并使用消息应用程序打开。
短信 body 包含指向资源(HTML 网页)的 URL,其 body 包含 OpenGraph 元数据 og:image
标签。例如:
<meta property="og:image" content="https://www.apple.com/v/iphone/home/t/images/home/og.png?201610171354" />
出于演示目的,我们正在努力使图像首先加载并立即加载,而无需用户点击按钮才能看到它...
预期行为:
实际行为:
附带说明一下,在我们测试过的 Android 客户端上,支持 OpenGraph 的图像将立即显示,而不会提示用户执行任何操作。对于任何其他受测试的 OpenGraph 支持的应用程序也是如此,包括 Facebook。
作为参考,这里是我测试过的一些方法,试图让它为我们工作(以及其中的组合):
- 尝试在没有中间重定向的情况下直接提供图像,也尝试过重定向。
- 尝试提供 PNG 和 JPG 图像。
- 尝试从 URL 提供包含不超过 20 个字符的图像,其中 URL 具有“.jpg”和“.png”参数并且没有额外的 GET 参数。当扩展名不属于 link.
时也尝试过
- 尝试通过直接引用其 IP 而不是使用 public 域名从服务器提供图像。
- 也尝试使用 GET 参数,每次使用随机数来阐明一个完全唯一的 URL。
- 尝试从 HTTPS 和 HTTP links 提供图像。
- 尝试使用动态生成的图像提供服务,在呈现和提供图像时应该会出现几毫秒的短暂延迟。
- 尝试在响应 URL 页面以及图像请求的脚本中强制休眠以引起几毫秒的故意延迟,并为此试验了各种设置。
- 尝试提供具有各种不同尺寸、纵向和横向以及极大和极小以及介于(
50x50, 60x50
等及以上)之间的其他变体的图像。
- 始终确保图像的大小小于 1 MB,但无论如何也测试了更大的图像以查看它们是否有效。
- 尝试提供来自 phone 或消息服务可能已经 'recognise' 和 'trusted' 相同规范来源的图像,因为我们已经加载了过去那些图像的预览(测试是否存在这样的功能,它可能不存在)。
- 专门尝试过,Apple 技术说明中提到的所有建议 "Best Practices for Link Previews in Messages" 请参阅 https://developer.apple.com/library/content/technotes/tn2444/_index.html
- 尝试将 OG 标签移到页面
<head>
之外。
- 尝试剥离页面的所有标签,相关
og:image
标签除外。
- 尝试删除 HTTP headers 以响应对图像资源的 GET,以便仅返回图像本身。尝试然后单独添加
Content-Type
header。
- 尝试启动对图像的请求以响应各种 HTTP 规范 cache-invalidating 相关 headers..
尝试从美国和澳大利亚的各种 phone 号码发送,还尝试将 SMS 消息本身的 "From" 字段更改为 "VERIZON", "Verizon", "Telstra", "APPLE", "Apple", "Facebook", "Uber", "China"
等字符串。
尝试从手持设备 phone 以及 Twilio Messaging API 服务发送消息。
None 以上工作的 iPhone X.
无法使用 SMS 执行此操作。如果您将它作为 iMessage 发送,它会自动显示预览。
在 iPhone 秒,预览是在设备上生成的,而不是 server-side。当用户点击预览时,他们的设备会向服务器发送 4 个 GET 请求。如果预览是自动生成的,则会存在安全漏洞。您可以向任何 iPhone 用户发送文本并获取他们的 IP 地址。
使用 iMessages,预览会自动生成,但不存在安全漏洞。发送 link 的设备向服务器发送 4 个 GET 请求,生成预览,然后通过 iMessages 将预览传输给接收者。因此,接收设备无需向服务器发送生成预览的请求。并且他们的 IP 地址不为网络服务器的所有者所知。
在 Google 的 Android 消息应用程序中,预览是在服务器端生成的。有一个 GET 请求发送到 Web 服务器。但它源自 Android 消息服务器。因此,网络服务器的所有者再次没有从他们收到的文本中收到收件人的 IP 地址。
我正在尝试发送带有 link 的 SMS 消息,其中包含 OpenGraph 预览图像,这些图像将加载到 iOS "Messages" 应用程序中,并且会显示没有缩略图的缩略图用户必须先按 [Tap To Load Preview]... 如何实现?
为此,我正在向 iPhone X 发送一条短信,它是 运行 iOS 10 并使用消息应用程序打开。
短信 body 包含指向资源(HTML 网页)的 URL,其 body 包含 OpenGraph 元数据 og:image
标签。例如:
<meta property="og:image" content="https://www.apple.com/v/iphone/home/t/images/home/og.png?201610171354" />
出于演示目的,我们正在努力使图像首先加载并立即加载,而无需用户点击按钮才能看到它...
预期行为:
实际行为:
附带说明一下,在我们测试过的 Android 客户端上,支持 OpenGraph 的图像将立即显示,而不会提示用户执行任何操作。对于任何其他受测试的 OpenGraph 支持的应用程序也是如此,包括 Facebook。
作为参考,这里是我测试过的一些方法,试图让它为我们工作(以及其中的组合):
- 尝试在没有中间重定向的情况下直接提供图像,也尝试过重定向。
- 尝试提供 PNG 和 JPG 图像。
- 尝试从 URL 提供包含不超过 20 个字符的图像,其中 URL 具有“.jpg”和“.png”参数并且没有额外的 GET 参数。当扩展名不属于 link. 时也尝试过
- 尝试通过直接引用其 IP 而不是使用 public 域名从服务器提供图像。
- 也尝试使用 GET 参数,每次使用随机数来阐明一个完全唯一的 URL。
- 尝试从 HTTPS 和 HTTP links 提供图像。
- 尝试使用动态生成的图像提供服务,在呈现和提供图像时应该会出现几毫秒的短暂延迟。
- 尝试在响应 URL 页面以及图像请求的脚本中强制休眠以引起几毫秒的故意延迟,并为此试验了各种设置。
- 尝试提供具有各种不同尺寸、纵向和横向以及极大和极小以及介于(
50x50, 60x50
等及以上)之间的其他变体的图像。 - 始终确保图像的大小小于 1 MB,但无论如何也测试了更大的图像以查看它们是否有效。
- 尝试提供来自 phone 或消息服务可能已经 'recognise' 和 'trusted' 相同规范来源的图像,因为我们已经加载了过去那些图像的预览(测试是否存在这样的功能,它可能不存在)。
- 专门尝试过,Apple 技术说明中提到的所有建议 "Best Practices for Link Previews in Messages" 请参阅 https://developer.apple.com/library/content/technotes/tn2444/_index.html
- 尝试将 OG 标签移到页面
<head>
之外。 - 尝试剥离页面的所有标签,相关
og:image
标签除外。 - 尝试删除 HTTP headers 以响应对图像资源的 GET,以便仅返回图像本身。尝试然后单独添加
Content-Type
header。 - 尝试启动对图像的请求以响应各种 HTTP 规范 cache-invalidating 相关 headers..
尝试从美国和澳大利亚的各种 phone 号码发送,还尝试将 SMS 消息本身的 "From" 字段更改为
"VERIZON", "Verizon", "Telstra", "APPLE", "Apple", "Facebook", "Uber", "China"
等字符串。尝试从手持设备 phone 以及 Twilio Messaging API 服务发送消息。
None 以上工作的 iPhone X.
无法使用 SMS 执行此操作。如果您将它作为 iMessage 发送,它会自动显示预览。
在 iPhone 秒,预览是在设备上生成的,而不是 server-side。当用户点击预览时,他们的设备会向服务器发送 4 个 GET 请求。如果预览是自动生成的,则会存在安全漏洞。您可以向任何 iPhone 用户发送文本并获取他们的 IP 地址。
使用 iMessages,预览会自动生成,但不存在安全漏洞。发送 link 的设备向服务器发送 4 个 GET 请求,生成预览,然后通过 iMessages 将预览传输给接收者。因此,接收设备无需向服务器发送生成预览的请求。并且他们的 IP 地址不为网络服务器的所有者所知。
在 Google 的 Android 消息应用程序中,预览是在服务器端生成的。有一个 GET 请求发送到 Web 服务器。但它源自 Android 消息服务器。因此,网络服务器的所有者再次没有从他们收到的文本中收到收件人的 IP 地址。