Bluesky 如何在截图上绘制其标志
摘要
本文解释了 Bluesky 如何利用巧妙的 iOS 技巧,在截图上显示其标志,通过将实际按钮隐藏在安全文本字段后方,并与 Telegram 和 Signal 中的类似做法进行了比较。
<p><a href="https://lobste.rs/s/05ocit/how_bluesky_draws_its_logo_on_screenshots">评论</a></p>
查看缓存全文
缓存时间: 2026/08/17 22:11
# Bluesky 如何在截图上绘制其Logo
来源:https://timmarinin.net/2026/bluesky-screenshots/
有时我会截取喜欢的帖子的截图,或是分享给朋友/梗图频道,或是保存一份“永久”副本。例如这个(我裁剪掉了界面的其他部分):
Bluesky 用户 @eroston.bsky.social 的帖子截图,重点是右上角可见的 Bluesky logo
原始链接(https://bsky.app/profile/eroston.bsky.social/post/3mt5gs2fdyk2l),如果你想转发
我注意到右上角的 Bluesky logo,心想:为什么使用 App 时 logo 并不会困扰我?然后我再次查看 App 内的帖子——logo 并不在那里,取而代之的是“关注”按钮。
我记得有些应用会将 logo 隐藏在 iPhone 的刘海区域,这样它就不会显得突兀,除非你截图。但这里的 logo 明显放置在开放区域,他们是怎么做到的?
我尝试再截一次图,这次是在切换到另一个应用的中途:
缩小版 Bluesky 应用在切换中途的截图,可见“关注”按钮
当我中途切换应用时,截图中“关注”按钮是可见的。
他们是否设置了某种监听器,检测到我同时按下截图和切换应用的两个按钮,并在最后关头切换了显示内容?我不是 iOS 开发者,所以不确定那里有哪些可能性。
此时我产生了些许好奇。幸运的是,我记得 Bluesky 的应用是开源的(或者至少代码可供查阅)。
答案就在一个字面上名为 `GrowthHack.tsx`(https://github.com/bluesky-social/social-app/blob/main/src/screens/PostThread/components/GrowthHack.tsx)的文件中,由 mozzius(https://github.com/mozzius)于 2026 年 1 月引入。但它只是使用了一个依赖项,为了理解其原理,我进一步查看了同样由他们开发的 `expo-privacy-sensitive`(https://github.com/mozzius/expo-privacy-sensitive)包。
这个包创建了一个 `UITextField`,并将其 `isSecureTextEntry` 属性设置为 true,然后将实际内容(即按钮)渲染到该字段的 `.layer` 中。当我截图时,iOS 通过清空该层来隐藏这个 UITextField,从而让 Bluesky 的 logo 得以显现(它一直都在那里)。对于其他平台,它则会直接渲染内容,不做遮蔽。
为什么在应用之间切换时这招就不管用了?我推测 iOS 在手势开始时自身会拍摄一个快照(不会触发清空),而当我截图时,已经没有活跃的 UITextField 实例来响应了,只剩下一个静态的快照。但再次声明,我不是 iOS 开发者。
这是个巧妙的技巧,还是滥用旨在保护隐私的 API?在添加该行为的讨论帖(https://github.com/bluesky-social/social-app/pull/9637)中,大多数参与者(在帖子被锁定前)并不喜欢它。我觉得这挺可爱的。
我稍微搜索了一下,发现这个技巧其实广为人知。Telegram 为它的“秘密”聊天(https://github.com/TelegramMessenger/Telegram-iOS/blob/master/submodules/UIKitRuntimeUtils/Source/UIKitRuntimeUtils/UIKitUtils.m#L299-L328)实现了类似功能,Signal 也是如此(https://github.com/signalapp/Signal-iOS/blob/a9f55ea599561e6d3bcee87d4f1540a7191b28dc/Signal/util/ScreenshotBlocking.swift),所以我预计苹果近期不会对其进行修补。
相似文章
Bluesky’s new CEO wants a big tent, not a bubble
Decoder podcast interview with new Bluesky CEO Toni Schneider about balancing the Bluesky app with the AT Protocol ecosystem, confronting the 'bubble' reputation, and how the open social web could develop like the early web.
Bluesky 即将推出‘社区’功能
Bluesky 正在推出基于 AT 协议的‘社区’功能,允许用户创建具有隐私级别和自定义推送的小型空间,灵感来源于 Reddit。
Indigo
Indigo 是一个帮助你与 Bluesky 和 Mastodon 上的联系人保持联系的工具。
Bluesky Protocol Services
Bluesky 推出了 Bluesky Protocol Services,这是其公共 AT Protocol 基础设施的新品牌/网站,并发布了 Jetstream v2 及 Network Replay 功能以支持历史数据访问,还推出了新的 TypeScript 和 Go SDK。
Bluesky 现在可以隐藏你关注的那个烦人用户的转帖
Bluesky 新增隐藏特定用户转帖的功能,并提供为长帖自动编号的测试版选项。