iOS 16 剪切板弹窗如何应对

2022 年 6 月 6 日,WWDC 2022 苹果发布的 iOS 16 中,新增了剪切板权限隐私特性

在 iOS 14 引入的剪切板提示上进行强化,将 3 秒的悬浮窗改为用户主动授权弹窗,当 APP 主动读取剪剪切板中新内容时,会触发授权申请弹窗,需要用户点击“允许”后,应用程序方可进行读取。

优化建议方案

移除非必要剪切板读取

当排查确定某一组件、场景读取剪切板的需求为非必要时,建议自行移除去除读取剪切板功能。

判断剪切板类型降低读取频次

iOS 提供了多个探测剪切板内容的API,允许App在读取剪切板前通过API探测剪切板内容是否满足相应规则,如果不满足规则则不进行读取,如果满足规则才进行读取并弹出浮窗提示。

预读取剪切板,确认是否包含所需要的内容,此方法不会出现剪切板的提示弹窗。

同时,iOS 14 及以上版本提供了探测剪切板内容是否包含数字、URL、链接、邮箱等多种类型的API,通过剪切板内容与类型探测 API 的适配,可在读取剪切板前过滤大部分非必须读取的内容,降低弹窗频次。

使用UIPasteControl 组件按钮消除权限弹窗

UIPasteControl | Apple Developer Documentation在 iOS16 中提供了一个新的UIKIT组件UIPasteControl,使用此组件可以在用户主动点击触发剪切板读取的场景下,去除权限弹窗的弹出。如 APP 存在收货地址等页面可添加此组件按钮,由用户主动触发剪切板读取。

j2UhBn
let textView = UITextView(frame: view.bounds)
view.addSubview(textView)

let configuration = UIPasteControl.Configuration()
configuration.baseBackgroundColor = .red
configuration.baseForegroundColor = .magenta
configuration.cornerStyle = .capsule
configuration.displayMode = .iconAndLabel
                    
let pasteButton = UIPasteControl(configuration: configuration)
pasteButton.frame = CGRect(x: view.bounds.width/2.0, y: view.bounds.height/2.0, width: 150, height: 60)
textView.addSubview(pasteButton)

pasteButton.target = textView

给予用户关闭权利

通过 API 过滤降低读取剪切板频次仍有可能将非必要的剪切板内容读取并触发浮窗提示。因此可以在端侧为用户提供关闭读取剪切板的功能,给予用户选择权,保障用户相关权益。

2022 年 10 月 25 日,iOS 16.1 发布更新新增针对单个 APP 的剪切板开关选项,APP 首次弹出剪切板授权弹窗后,用户可在设置中选择永久关闭剪切板。

pX6p7B