From 6f10d231ada87d4ab369d487cd49dbe7dd40d657 Mon Sep 17 00:00:00 2001 From: joywayer Date: Wed, 24 Jun 2026 01:58:02 +0800 Subject: [PATCH] =?UTF-8?q?3.E=20=E4=BC=98=E5=8C=96=EF=BC=9A=E6=9D=83?= =?UTF-8?q?=E9=99=90=E8=A2=AB=E6=8B=92=E7=BB=9D=E6=97=B6=E7=9A=84=20Alert?= =?UTF-8?q?=20=E5=A2=9E=E5=8A=A0"=E5=8E=BB=E6=8E=88=E6=9D=83"=E8=B7=B3?= =?UTF-8?q?=E8=BD=AC=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit iOS 行为约束:用户在系统权限对话框选择"拒绝"后,再次调 requestRecordPermission 不会再弹对话框、直接返回 false。唯一恢复路径 是用户手动去「设置 → app → 麦克风」开启。 原 Alert 只有"确定"按钮(对齐 daoqi),用户被拒绝后需要自己摸索路径 去设置。优化为两按钮: - "取消":关闭 Alert - "去授权":UIApplication.open(openSettingsURLString) 直接跳本 app 的设置页 文案保留 daoqi NewRootVC.m:316 的引导语("需要访问您的麦克风,请启用 麦克风-设置/隐私/麦克风!")。 属于 UX 改进,对 H5 不可见,不影响契约(按钮属于 native 内部 UI, 原则 B 范畴)。 --- .../Bridge/Handlers/RemoteAudioHandler.swift | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/ylgamehall/Source/Bridge/Handlers/RemoteAudioHandler.swift b/ylgamehall/Source/Bridge/Handlers/RemoteAudioHandler.swift index ff35b3f..3432ba8 100644 --- a/ylgamehall/Source/Bridge/Handlers/RemoteAudioHandler.swift +++ b/ylgamehall/Source/Bridge/Handlers/RemoteAudioHandler.swift @@ -338,13 +338,25 @@ public enum RemoteAudioHandler { @MainActor private static func showMicrophonePermissionAlert(on hostVC: UIViewController?) { - // 对齐 daoqi NewRootVC.m:316 文案("{gamehallname}需要访问您的麦克风...") + // 用户已拒绝麦克风权限时调用。iOS 不允许再次主动弹系统权限对话框 + // (requestRecordPermission 在 .denied 状态下不再弹窗、直接返回 false), + // 唯一恢复路径是用户手动去「设置 → app → 麦克风」开启。 + // + // 文案保留 daoqi NewRootVC.m:316 的引导语;按钮提供「去授权」直接跳 + // app 设置页(比 daoqi 仅"确定"更易用),「取消」关闭 Alert。 let alert = UIAlertController( title: nil, message: "需要访问您的麦克风,请启用麦克风-设置/隐私/麦克风!", preferredStyle: .alert ) - alert.addAction(UIAlertAction(title: "确定", style: .default)) + alert.addAction(UIAlertAction(title: "取消", style: .cancel)) + alert.addAction(UIAlertAction(title: "去授权", style: .default) { _ in + // 跳转到本 app 在「设置」中的页面。用户在此页打开麦克风开关后回到 + // app,状态自动变为 .authorized,下次 prepareaudio 走正常分支。 + if let url = URL(string: UIApplication.openSettingsURLString) { + UIApplication.shared.open(url) + } + }) hostVC?.present(alert, animated: true) } }