iOS 上授予权限后,Expo imagepicker 会弹出两次

问题描述 投票:0回答:1

我目前正在使用 Expo 图像选择器,它在 Android 手机上运行良好。但是,在 iOS 上选择“选择照片”选项时,在授予权限并选择照片后,会再次弹出照片库。仅在选择第二张照片时才会实际上传照片。

我尝试遵循此处的解决方案: presentationStyle 对象属性添加

该 prop 不再接受 0 作为有效参数,并且枚举不会对照片选择器 UI 产生任何有意义的更改。无论我列出什么选项,该错误仍然存在。看来这可能是 iOS 上 UIImagePickerController 的问题。我也不知道我的博览会应用程序有什么可以替代 expo-image-picker 的方法。

当用户选择“允许访问所有照片”时,该选择工作完美。当使用“选择照片”而不是“允许访问所有照片”时,我是否可以绕过双重弹出窗口?我正在考虑使用不同的包,但我真的不知道如何让双弹出窗口消失。

ios react-native mobile expo uiimagepickercontroller
1个回答
0
投票

事实证明,这个错误是一个功能。自 iOS 14 起,在请求照片权限时出现了一个附加选项,即“选择照片...”。

本期讨论的是 PHPickerViewController,expo-image-picker 使用 PHPickerViewController 作为其基于 IOS SDK 的构建是正确的。然而,图像库模式显示两次的行为是苹果上新 PHPicker 的预期行为。这是用户首先选择应用程序应有权访问的照片。第二种模式是他们选择要上传的照片。这是违反直觉的,因为即使在用户“限制访问”之后,应用程序仍会继续显示整个照片库。这也是有意的行为,甚至更加违反直觉。这是因为在 iOS 14 之后,苹果表示,如果我们只是访问照片,则不再需要请求照片库权限。这是因为照片选择器在主进程之外运行,仅将选定的图像传递给应用程序,这意味着应用程序从技术上讲从未访问过照片库。

Apple 的“选择照片”功能限制对 IOS SDK 中的 PhotoKit (PHAssets) 的资源访问。 PhotoKit 用于实现非破坏性图像编辑的应用程序,例如需要对照片库进行写访问的应用程序。

我发现了许多支持这一主张的好资源:

https://developer.apple.com/forums/thread/652819(如果您不想观看整个视频,1:10 和 12:00 是他们讨论此问题的时间戳)

https://developer.apple.com/videos/play/wwdc2020/10641/讨论了我们何时需要请求权限

https://developer.apple.com/forums/thread/652819关于这种令人困惑的行为的讨论线程

https://developer.apple.com/forums/thread/653414这里有一句话非常引人注目。 “在呈现 UIImagePickerController 之前强制用户向您的应用授予完整的照片库访问权限可能会被视为反模式。”

https://github.com/expo/expo/issues/11625 github上的一些人也对此感到困惑。

https://github.com/react-native-image-picker/react-native-image-picker/issues/1952关于react-native-image-picker repo的讨论 所以我认为这个问题的解决方案是,谢天谢地,不要构建一个新的照片选择器,而是关闭 iOS 14 及更高版本上的 expo-image-picker 的权限提示。

太棒了;我能够摆脱在与界面交互之前没有明确请求应预先定义的权限的情况。

© www.soinside.com 2019 - 2024. All rights reserved.