我不会下载你的应用。网页版就很好。
I won't download your app. The web version is a-ok

原始链接: https://www.0xsid.com/blog/wont-download-your-app

## 一切的应用化 许多在线服务正在积极引导用户转向使用应用程序,常常以牺牲其网站体验为代价。这表现为持续的应用下载提示、有限的网站功能,甚至完全只允许通过应用程序访问——这对于那些更喜欢浏览器提供的控制和灵活性的用户来说,是一种令人沮丧的趋势。 作者认为应用程序提供的控制权更少;浏览器允许通过用户脚本和扩展进行自定义,从而增强可用性并阻止不需要的元素。相反,应用程序优先考虑数据收集、通知以及将用户锁定在“封闭的花园”中。尽管如此,大多数应用程序仅仅显示文本和媒体——这些任务很容易由浏览器处理——却需要大型下载和权限,而带来的好处却很小。 通常,这些应用程序甚至做得不够好,缺乏原生操作系统功能的精良,导致用户体验略有不适。这种推动源于一个愤世嫉俗的“劣质化”循环:降低网站体验迫使用户转向应用程序,从而提升产品经理的指标并优先考虑广告收入而非用户体验。最终,开放的网络正被降级为应用程序商店的营销工具。

## Web 与 App:用户偏好 最近的 Hacker News 讨论强调了用户越来越倾向于网站而非专用 App。许多用户,特别是那些拥有较长互联网使用历史的用户,更喜欢网站的可访问性和类似沙盒的安全特性。除非网站无法正常使用或主动*强制*使用 App(通过限制功能),否则他们会坚持使用浏览器。 许多评论者表达了对公司为了推广 App 下载而“劣化”其网站的沮丧,认为这是一种商业问题。人们对 App 权限和数据访问与浏览器相对安全性相比表示担忧。 讨论还涉及实际考虑:旧手机可能缺乏存储更多 App 的空间,并且 PWA(渐进式 Web 应用)尚未被广泛采用。虽然有些人承认 App 可以为特定任务(如 GPS 或复杂界面)提供更佳体验,但许多人更喜欢桌面或移动网络浏览器的便利性和更大的屏幕空间。最终,强制使用 App 可能会导致客户流失。
相关文章

原文

As someone who prefers using services via their websites, I’ve gotten terribly jaded lately. Almost everyone wants me, and by extension, you, to use their darn apps to consume content and off their web versions.

Whether it's the obvious social media apps or something as basic as parking, the app is the priority and the site the red-headed stepchild. And they aren't too subtle in the push either. It might be a modal covering half the web version with links to the App Store, an immediate popup after a bit of scrolling, or a header screaming “the app is 10x better,” but it's always there and it's always grating.

Let's not even go into the cases where the app is the only option to access the service. A minor annoyance for ordering food, but a major hassle when it's a public service or utility.

Why the Hostility From Both Sides?

On principle, I like control over what I see and how I see it. Apps are super limited; while in a browser, I can do a lot of very nifty things to improve usability.

A service lacks a dark mode? I can use any number of user scripts. Reddit introduced a gaming section in the sidebar? Two-second fix that I bundled into my extension [1]. Between userscripts, ad-blockers, and custom extensions, I'm basically a god, swaggering through my realm.

This control, or lack thereof, also explains the app maker's adversarial stance towards users. They are often a black hole of dark patterns, and they'd like nothing getting in their way. Apps make it easier for them to push notifications, collect intrusive telemetry, and keep you inside their walled garden. A better user experience is the pitch but securing better user retention is the end goal.

It's Mostly Just Text and Media

Most apps are just that. Text and media in a never-ending, all-consuming feed or a multi-page form, cleverly disguised by the user interface.

Excluding heavy 3D gaming or utilities that genuinely require deep integration with your phone's hardware (like accessing the LiDAR scanner for AR), what are we actually left with? A thin client whose main job is to fetch data from an API and render it onto native views.

Why do I need to download a 100+ MB app, give it permission to track my location, and let it run background processes just to browse through a restaurant menu, buy a ticket, or scroll through a list of posts? At the end of the day, it is almost always just JSON being parsed and rendered. Yet, companies insist on rebuilding their basic content as native shells just to claim a permanent square of real estate on my home screen.

The Apps Aren't Even Good

If a service is going to pull you out of the browser, it should at least offer a polished, native experience. But more often than not, the app you just downloaded is a compromise.

Anyone who endured the iOS-specific shader compilation jank in early Flutter apps [2] knows exactly how grating this can be (this specific bug was fixed 2023ish fwiw). Before they swapped Skia out for the Impeller engine, I had to capture and ship precompiled shaders with my apps just to stop the UI from stuttering the first time an animation ran.

The result is often the uncanny valley of user interfaces. It’s not broken, but it is subtly different, sometimes janky. The scroll velocity doesn't quite match the rest of the OS. The swipe back gesture hesitates for a few milliseconds.

Human brains are remarkably good at detecting when a system's timing is off. This is how the XZ backdoor was caught: an engineer noticed their SSH logins taking a fraction of a second longer than usual. It's not that unique -- my old FPS buddies could tell our server region just by firing a shot and feeling the lag. [3]

These micro interactions matter, because without that final layer of polish, the entire facade of a native experience falls apart. Not every app is like this, obviously, but enough of them are this way that it sours the entire experience.

The Enshittification Loop

When that full-screen modal pops up demanding you download the app to read the rest of a thread, users choose the path of least resistance. They download and they move on.

To a PM staring at an analytics dashboard, I'm an acceptable casualty, an inconsequential minority. If degrading the web version successfully funnels 80% of users into the App Store, that PM gets a promotion and a big pay bump. As always, actions follow the incentive. Our demographic is simply too small to factor into their quarterly metrics.

This is the enshittification loop in its full glory, working exactly as intended. A service builds its initial audience on the open web because it's frictionless and indexable. Once the user base is sufficiently locked in, the web version is deliberately hobbled to force everyone into the native app. Once you're inside the app, the walls close in: you are now a captive audience for a feed full of ads that your ad-blocker can no longer touch.

There is no financial incentive to maintain a stellar web experience anymore. The browser, once the great universal platform, is increasingly being reduced to a top-of-funnel marketing channel for the App Store. The depressing part of it is that the numbers prove it works.


[1] https://gosinkit.com/

[2] https://blog.flutter.dev/whats-new-in-flutter-2-2-fd00c65e2039 Search for "Preview: iOS shader compilation improvements"

[3] https://www.0xsid.com/blog/667mhz-machine

联系我们 contact @ memedata.com