跨平台兼容之殇:iOS与Android的90%功能鸿沟
|
去年六月份,我亲手把一套 React Native 项目往 iOS 上提审,第七次。苹果那条“功能缺失需说明”的驳回理由,我盯着看了四分半——手机弹出钉钉消息:Android 团队说热更新下发成功了,用户反馈摄像头权限自动弹框正常。我切回 Xcode,编译日志里还卡在 “Signing for ‘xxx’ requires a development team” —— 可我连证书都换过三轮,Profile 过期时间比我家泡面保质期还短。 提交工单时孩子蹲在我腿上撕快递单,胶带扯得满手黏;我左手按住他后颈,右手点完“提交”,屏幕跳转成功页的瞬间,鼠标垫右下角已经起边了,翘起来两毫米,硌手。客服机器人吐出三行字:“您好,请确认是否已查阅《iOS 审核常见问题 V2.3.7(2024 年第二版)》第 4.1.2 条?” 我没点“是”,点了“人工”。等了三天。不是三个工作日,是连续七十二小时,窗外连着下了两场雨,第二场停在半夜三点十七分,我醒来看了一眼邮箱刷新界面,灰的。 我原以为备案和实名是入口门槛,结果它是个活扣——你刚绑完身份证,它就提示“当前主体下域名关联超限”,查了才知道去年代理悄悄用我执照注册了五个壳公司二级域名,全挂着“AI智能写作工具”备案号,其中两个早被墙了,但备案系统里还是绿的。我打电话给代理,对方说:“王工您别急,咱们换个壳再跑一遍就行。” 我说:“那安卓端的推送通道证书呢?” 他停了三秒,“啊……那个?我们转给新团队了,您找他们要吧。” —— 新团队?我压根没见过,钉钉群昵称叫“安卓支持-临时”,头像是一张模糊的麦当劳收据照片。 审核周期?iOS 是按“苹果心情+审核员当日咖啡因摄入量”浮动,Android 是按“厂商当天有没有排期”浮动。上周五下午四点我发版,安卓端两小时上线,iOS 审核队列显示“预计 2–5 个工作日”,到周三中午,状态变成“Processing”,我就知道它卡在了那个永远不报错的环节。后来问内部人,人家笑:“你们这代码里调了 NFC 的 stub 吧?哪怕没用,只要 import 了,就进不了‘轻量级审核池’。” 我翻了三百行 index.js,真没调。Stub 文件名是 nfc-utils.js,但我根本没 import,连 require 都没有——可人家就是卡住了。不信?你试试删掉整个文件夹再打个包,重新签名,重新上传,等。又等了两天。结果驳回理由写的是:“无法验证蓝牙模块兼容性”。蓝牙?我们压根没接蓝牙。我们连耳机孔都没留。 桌上的外卖凉了。酱汁凝成一块深褐色膜,盖在米饭上。我拿筷子戳了两下,没动。这时候安卓那边甩来一个截图:用户反馈点击“实名认证跳转”直接黑屏。我打开调试面板,发现是 WebView 加载了 H5 页,而那个 H5 页面用了 `document.fullscreenEnabled` 判断,但 Android Webview 默认禁掉这玩意儿——iOS 端却因为 WKWebView 某个私有 flag 开了,所以一直好好的。没人告诉我这个 flag 在安卓 WebView 里根本不存在。我改了二十分钟 JS,加了 try-catch 和降级 fallback,发版。安卓用户好了。iOS 用户开始集体投诉:“为什么实名页不能全屏?” —— 因为我把 fullscreen 删了。现在两边都在骂,而我的 PR 合并记录里写着:「修复实名页兼容」。没人敢点进去看 commit diff。
文章配图,仅供参考 快照备份要另外收费这事,我是在客户打来第十七个电话才搞懂的。他说:“王工,你们后台导出的‘数据快照’,为什么只有 JSON 结构没有图片资源链接?” 我说:“快照就是结构快照啊。” 他顿了一下:“哦……我以为跟云服务器那个‘全盘快照’一样。” 我去翻控制台,发现真有个按钮写着“一键创建应用级快照”,底下小字:“含静态资源需开通高级备份包(月付两百八)”。我点开订购页,页面顶部飘着横幅:“活动截止今晚24点”。我截图发群里,同事老陈回:“去年我买空间,充了五年,送三年,结果第三年平台跑路,我拿着发票找工商,人家问我:‘您这个主体,是北京的还是深圳的?’我说‘深圳’,他说‘哦,那归他们管’。我问‘他们’是谁,他说‘深圳市场监督管理局’。我又打深圳的,接线员说:‘对不起,我们只管实体商铺。’”实名认证弹窗在 iOS 端会触发两次。第一次是微信 SDK 自动唤起的 native 弹窗,第二次是我们自己的 H5 弹窗——因为微信那个弹窗关掉之后,`window.onblur` 被触发,而我们误判为用户主动退出,于是再拉一次 H5 版本。安卓不会。安卓不 blur。安卓压根不认这个事件。但我们为了应付 iOS 的多任务切换逻辑,硬加了 `visibilitychange` 监听,结果安卓 Chrome 89 以上又突然兼容了这个事件……现在两边都弹,只是弹的时机错开了两秒。用户录屏发微博,标题叫《实名认证之镜像地狱》。我没敢转发。转发了就得解释为什么同一个 click 事件,在 iOS 触发三次,在安卓触发一次半——那半次是用户快速双击导致的 touchcancel 冒泡异常,只出现在三星 S22 的某次系统更新之后。 我翻了旧邮箱,找出2012年买虚拟主机的付款记录,当时五块钱一年,送 phpMyAdmin,后台能直接改 `.htaccess`。现在?我现在得提三个工单、走四个审批流、签两份电子协议,才能把一个 404 页面的返回头从 `text/html` 改成 `application/json`。客服说:“王先生,这个涉及底层网关策略调整,需要架构评估。” 我说:“我就改一行 header。” 他说:“对,但这一行 header 会触发 CDN 缓存层的重签名机制。” —— 我信了。然后我看到他工单备注里写:“用户情绪稳定,非紧急。” 明年到期就迁走。不换厂商,换技术栈。Flutter 不行,React Native 不行,小程序不行。准备上 Tauri + 原生桥接。反正桌面端先跑通,移动端……让运营同学告诉用户,下周起 iOS 用户将享受“网页版专属功能优化”,安卓用户则同步上线“极速离线包下载通道”。同一套文案,两种实现。不解释。不对比。不埋点。让他们自己猜。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


iOS创业生死线:流量、合规、运营,缺一不可
iOS电商App数据可视化系统:用户行为实时说话
iOS 18云安全兼容性告急:97%移动APP防护失效
iOS 17下97% H5页面失真:13年UI测试工程师的兼容性突围
iOS转PHP:Xcode到Laravel的分布式调试实战