跳至内容
WebViewGold 从 Vibe Coding 到 App Store
中文
获取 WebViewGold

App Store 审核被拒

准则 2.5.4(后台模式):WebViewGold 项目中的音频、定位及其他能力

收到 2.5.4 拒审,意味着您的应用声明了某种后台模式(例如 Audio 或 Location updates),而审核人员找不到需要它的功能。要么删除这个模式,要么让相关功能正常运行并且便于测试。对 Web 封装应用来说,修复通常只需在 Xcode 里花十分钟,再修好音频播放器里的一个 bug。

每个平台一次性 $109 起,或由我们的团队全程代劳,$698 起。

  • 审核通过保证 – 否则 14 天内退款
  • 无需编程
  • 一次性付费,免费更新
  • 7×24 小时人工支持
  • 2014 年起德国出品 · ISO 27001

2.5.4 的规定

准则 2.5.4 允许多任务应用仅为其预期用途使用后台服务:VoIP、音频播放、定位、任务完成、本地通知等。Apple 会把 Info.plist 中的 UIBackgroundModes 条目(在 Xcode 中即 Signing & Capabilities 下的 Background Modes 能力)与应用的实际行为进行比对。声明了却没有使用的模式会导致拒审。把模式用于其他目的,例如播放无声音频让应用保持运行,则更加严重。

相邻的规则 2.5.1 涉及权限和用途说明文本,我们的未使用权限指南专门讲解这些。本页讨论的是后台模式本身。

拒审消息通常怎么说

措辞很具体:应用在 UIBackgroundModes 中声明支持某种模式(audio、location、voip、fetch 或 processing),但审核人员没有找到需要它的功能,或者无法让该功能在应用处于后台时持续运行。您会被要求要么添加该功能,要么删除这个键。对于定位,备注往往还会补充一句:应用必须说明为什么在未使用时也需要位置信息。

Web 封装应用可能声明的后台模式

后台模式(Xcode 中的名称)在 WebViewGold 应用中的正当用途审核人员检查什么以下情况请删除
Audio, AirPlay, and Picture in Picture通过 HTML Background Audio API 播放播客、电台、音乐、有声书或冥想音频;通过 startnativevideo:// 以画中画方式播放视频开始播放,离开应用,锁定手机,继续收听应用只有简短音效、嵌入的 YouTube 视频,或者根本没有音频
Location updates跑步或骑行轨迹记录、配送司机位置追踪、在工作现场签到,并将 backgroundlocation 设为 true寻找需要在应用关闭时获取位置的功能,并阅读用途说明文本您只在应用打开时需要位置(“附近”搜索、门店查找)
Remote notifications通过 OneSignal、Firebase 或 Pushwoosh 推送是否确实有推送功能您根本不使用推送
Background fetch、Background processing很少需要;文档仅在某些后台定位设置中提到 Background Processing哪个任务在后台运行没有任何功能安排后台工作
Voice over IP基于 CallKit 的原生通话应用,而不是使用 WebRTC 通话的 Web 应用应用关闭时是否能收到来电在 Web 封装应用中几乎总是应该删除

把 Web 应用转换成原生应用的绝佳方式!周转速度快,无需开发完整的原生应用就能把应用上架到应用商店!

Kevin Joling · FlightConnections & TrainConnections · Trustpilot

清理已声明的模式

先在 Xcode 中完成这一步;大多数 2.5.4 拒审到这里就解决了。

  1. 打开 Signing & Capabilities

    选中 WebViewGold target,找到 Background Modes 能力,记下每一个已勾选的选项。然后打开 Info.plist,查看“Required background modes”(UIBackgroundModes);它列出的项目应该与前者一致。

  2. 把每个模式对应到一个可以演示的功能

    Audio 需要一个在手机锁屏时仍能继续播放的播放器。Location updates 需要 backgroundlocation 以及一项用到它的功能。Remote notifications 需要推送服务商。没有对应功能的一律删除。

  3. 取消勾选其余的模式

    清除这些勾选框;如果一个都不剩,就删除整个能力。推送和定位教程有时会留下多余的勾选项,这是那些莫名其妙的 2.5.4 拒审最常见的来源。

  4. 删除对应的用途说明文本

    没有 Location updates 时,也要删除“始终”定位的用途说明;如果您的 Web 应用仍然调用 geolocation API,就只保留“使用期间”的那一条。无论如何都要保留跟踪用途说明,WebViewGold 文档将其标记为必需项。

  5. 重新构建并提高构建号

    能力是打包在二进制文件中的,所以这一步总是需要重新上传。在 Resolution Center 回复中列出已删除的模式。

播客、电台和音频课程的后台音频

音频应用是 Web 封装应用最有说服力的场景之一:内容放在您的服务器上,原生外壳则提供后台播放。HTML Background Audio API(文档中有一段简短的设置视频)能让 HTML 音频在用户切换应用或锁屏时继续播放。审核人员测试的正是这一点,所以您 Web 应用中的播放器必须配合。

大多数音频拒审由三个 Web 应用 bug 造成:播放器在 visibilitychange 或 pagehide 时自动暂停;单页应用在路由切换时卸载播放器组件,导致一跳转页面声音就停了;或者播放依赖自动播放,而不是由用户点按触发。请在 Web 应用中修复它们(代码见下文),并在真机上锁屏整整一分钟进行测试。

HTML Background Audio API 的文档针对的是 iOS。对于视频,Native Video API会在系统播放器中以画中画方式播放视频流,这同样依赖 Audio, AirPlay, and Picture in Picture 模式。Android 项目也有支持画中画的原生视频播放器。

让 Web 播放器在后台继续工作

适用于 React、Vue 或原生 JavaScript 播放器的典型修复。在整个会话期间只保留一个音频元素。

javascript
// 1) 从播放器组件中删除类似这样的自动暂停代码:
// document.addEventListener("visibilitychange", () => { if (document.hidden) audio.pause(); });

// 2) 在路由之外只保留一个音频元素(例如放在根布局中)
const audio = document.getElementById("global-player"); // <audio id="global-player" preload="none">

// 3) 由用户点按开始播放,绝不依赖自动播放
playButton.addEventListener("click", () => {
  audio.src = episode.url; // 直接的 MP3、AAC 或 HLS 地址
  audio.play();
});

// 4) 可选:锁屏元数据(请在您的构建版本上测试;支持情况取决于 iOS 版本)
if ("mediaSession" in navigator) {
  navigator.mediaSession.metadata = new MediaMetadata({
    title: episode.title,
    artist: show.name,
    artwork: [{ src: show.cover, sizes: "512x512", type: "image/png" }]
  });
}

后台定位:何时合理,以及如何展示

当用户在应用关闭时也能明确受益,后台定位就能通过审核:记录一次跑步、向等待中的顾客共享司机位置、技术人员到达现场时自动签到。在 WebViewGold 中,您需要在 Config.swift 中把 backgroundlocation 设为 true,并在 Background Modes 下添加 Location updates。根据您的 Web 应用,可能还需要 Background Processing,并在 Info.plist 的“Permitted background task scheduler identifiers”下填入您的 bundle ID。地理定位文档指出,这在审核时需要明确的理由。

审核人员不可能在审核期间出门跑一圈,所以要让这项功能清晰可见:一个明确的“开始追踪”按钮、追踪进行时的指示标志、一个停止按钮,再在审核备注中附上一段简短的屏幕录像,展示应用在后台时位置点不断传来。在系统对话框弹出之前,先在您自己的界面中解释应用为什么需要在关闭时获取位置,并在用途说明文本中使用同样的措辞。请亲自在真机上测试,并在服务器上确认位置点确实到达。

如果您只需要“附近”搜索,就彻底放弃后台定位,“使用期间”权限就足够了。地理定位功能页面介绍了前台定位的设置方法。

Resolution Center 回复模板

要么您已删除该模式,要么您说明如何测试它。同一个模式不要两者混用。模板保留英文,因为 Apple 审核人员阅读的是英文。

Resolution Center 回复(选择方案 A 或 B)
Hello App Review team,

Thank you for reviewing [App name] [version] ([build]).

[Option A: mode removed]
We removed the [audio / location / fetch / processing / voip] background mode. It was declared by mistake and no feature depends on it. The new build [number] declares only: [remaining modes, e.g. remote-notification for push notifications].

[Option B: mode in use]
The app uses the [audio] background mode for [continuous podcast playback]. To test:
1. Log in with the demo account from App Review Information.
2. Open [Library] and tap Play on any episode.
3. Lock the device or switch to another app. Playback continues.
[Location: 1. Tap Start tracking on the [Track] tab. 2. Put the app in the background. 3. The route keeps recording. A screen recording is attached to the review notes.]

Best regards,
[Name], [email], [phone]

检查清单

  • 每个已勾选的后台模式都对应一个您能在一分钟内演示的功能。
  • Info.plist 中的 UIBackgroundModes 与能力设置一致,没有残留项。
  • 锁屏时以及在应用内跳转页面时,音频都能持续播放。
  • 只有在 backgroundlocation 设为 true、有开始和停止控件,并且用途说明文本写明了具体功能时,才使用后台定位。
  • 已删除未使用的定位用途说明文本;保留了跟踪用途说明。
  • 审核备注说明了如何测试每个模式,对于无法在办公桌前重现的功能附有屏幕录像。
  • 已上传构建号更高的新构建版本(参见TestFlight 测试)。

常见问题

推送通知要能送达,需要后台模式吗?

无论您的应用是否在运行,通知都由 iOS 负责送达。Remote notifications 模式允许应用在后台被唤醒,OneSignal 等推送服务商会在设置过程中要求您启用它。开启推送时保留它;不使用推送时删除它。

我的应用会播放视频。需要音频模式吗?

只有当视频或其声音需要在应用处于后台时继续播放,或者您使用了画中画时才需要。用户离开应用时就停止的视频不需要任何后台模式。

我可以播放无声音频,让 Web 应用在后台保持运行吗?

不可以。把音频模式用于可听播放以外的任何用途,正是 2.5.4 所禁止的,审核人员会将其视为滥用。请改用推送通知把用户带回来。

Google Play 也有同样的规定吗?

不是作为审核准则,但 Android 有自己的门槛:后台定位需要单独的权限,并要在 Play Console 中进行声明,前台服务也必须声明其类型。原则是一样的:只声明可见功能所需要的内容。

删除后台模式会让现有用户的应用出问题吗?

只会影响依赖它的那项功能。如果没有任何功能使用该模式,没人会察觉。如果以后添加后台音频或追踪功能,请在那次更新中把模式加回来,并在审核备注中加以说明。

让您的应用上架商店的三种方式

结果相同,只是您需要投入的工作量不同。三种方式都附带审核通过保证和 7×24 小时人工支持。

自己动手

$109 每个平台,一次性付费

WebViewGold 许可证:一个现成的 Xcode 或 Android Studio 项目。粘贴您的 URL,设置名称和图标,开启所需功能,构建并提交。永久免费更新。

在主页查看方案

Cloud Builder

$349 每个许可证,一次性附加购买

无需 Mac、Xcode 或 Android Studio:在浏览器中完成配置,我们在云端构建两个应用,并将其交付到 App Store Connect 和 Play Console。

Cloud Builder 如何运作 试用免费演示

Full Service

$698 每个平台 $798

把您的 URL 和图标发给我们。我们的团队在 72 小时内完成配置、构建并交付您的应用,白标,附源码项目。两个平台共 $1,158。

Full Service 详情 服务提供方: WeSetupYourWebViewApp

冬季特惠价格有效期至 2026年12月31日。

准备好发布您的应用了吗?

App Store & Google Play 审核通过保证 – 否则 14 天内退款

想直接交给我们?Full Service:我们在 72 小时内完成配置、构建并交付,每个平台 $698 起。有疑问?通过 7×24 小时在线聊天联系我们。

退款依据我们 FAQ 中列出的条件:应用因非内容原因被 Apple 和/或 Google 拒审,并在购买后 14 天内提出申请。