iOS 9 - Xcode 7 - SFSafariViewController - 图片上传 - 相机黑屏

13

我正在使用SFSafariViewController,并遇到以下问题:用户会看到一个上传图片按钮,点击后设备会正确地显示多个选项之一是相机。当用户选择相机时,它加载相机但屏幕是黑色的,并且操作按钮被禁用。但是如果用户选择库,则所选图像将被正确上传。

我确实验证了应用程序已经开启了相机权限。

我尝试实施这里这里找到的解决方案,但没有效果。

还有其他人遇到此问题吗?

代码:

import UIKit
import SafariServices

class ViewController: UIViewController, SFSafariViewControllerDelegate
{
    private var urlString:String = "https://example.com"

    override func viewDidLoad()
    {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func viewDidAppear(animated: Bool)
    {
        super.viewDidAppear(animated)

        let svc = SFSafariViewController(URL: NSURL(string: self.urlString)!)

        svc.delegate = self

        self.presentViewController(svc, animated: true, completion: nil)
    }

    func safariViewControllerDidFinish(controller: SFSafariViewController) {
        super.dismissViewControllerAnimated(true, completion: nil)
    }

    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

-----更新 #1-----

在重置隐私设置并尝试直接从相机上传图像后,我没有看到“SafariViewService Would Like to Access The Camera”的提示,这可能是问题所在。因为在我接受之后,屏幕仍然是黑色的,我想知道为什么它没有显示我的应用程序名称,比如“FooBar Would Like Access……”也许这种不一致性是导致相机屏幕黑屏的原因。只是不确定该如何改变它。

-----更新 #2-----

这似乎是一个SFSafariViewController问题,因为我实现了WKWebView,相机可以正常工作。


上传图片按钮是出现在SFSafariViewController中还是作为底部工具栏的选项?我尝试了上面的代码,但没有显示任何上传图片按钮。 - Manish Verma
你是用两个 viewControllers 还是只有一个来实现这个功能呢?我相信你已经知道,但是:与 Safari 本身不同,SFSafariViewController UI 是专门为显示单个页面而设计的,具有一个“Done”按钮,使用户可以返回到你的应用程序中之前离开的地方。如果你的应用程序显示 Web 内容,但没有自定义该内容,请考虑使用 SFSafariViewController 替换 WKWebView 或 UIWebView 浏览器。你可能会引导你自己/用户进入一个尚不存在的页面。 - Lukesivi
@ManishVerma:该按钮并非原生IOS,而是来自Webview的文件上传按钮。 - Mike Purcell
@lukesIvi:我正在尝试升级我们的应用程序,以便图像上传器能够正常工作,因为对于升级到IOS9+的用户来说,它是无法使用的。我只想要一个简单的Webview包装器,因为我们的网站是移动友好的。 - Mike Purcell
1个回答

3

编辑iOS 11.3: 感谢Rihards的评论并指出这个问题已经被修复。

这显然是SFSafariViewController的已知bug(我提交了一个被关闭的radar)。我遇到了同样的问题,我们的移动网站无法从设备中获取任何内容,无论是拍摄照片的相机还是相机胶卷中的照片。这在Safari和SFSafariViewController中都持续存在,因此我们最终通过本地VC和Parse重新完成了整个上传过程。但是,在做所有这些之前,我从技术支持那里得到了一些建议,他们告诉我尝试以下操作:

  1. 请使用第二个设备进行检查。有时候这可能是一个仅在一个设备上发生的错误,由于权限设置错误。使用第二个设备进行检查应该排除安装过程中出现问题的可能性。
  2. 在“设置”中检查应用程序的权限。他们告诉我,有时候如果用户拒绝使用相机的权限,就会出现空白屏幕。要检查是否是这种情况,请打开设置,向下滚动到底部,选择您的应用程序。在这里,您应该看到一个ON/OFF切换按钮,两个都应该指向开启状态。如下面的截图所示。 screenshot

然而,我的建议是:

  1. 考虑使用UIWebview或WKWebview。您说您的网站是移动友好的,那么您可以考虑将UIWebview拖入您的storyboard中,并设置它指向您的网站。这里是一个关于UIWebviews的好教程。另一个更明显的选择是使用WKWebview。在您的更新中,您已经指出您已经这样做了,所以我不会给您链接任何教程。

否则,除了向苹果Bug Reporter提交另一个radar之外,现在没有太多事情可以做。最后,您可以提交技术支持工单,但我不会浪费其中的任何一个,因为您每年只有2个支持机会。

希望这能帮到您,Julian


非常有帮助,感谢您的回应。此时我将使用wkwebview来利用改进的JavaScript引擎。 - Mike Purcell
好的。是的,WKWebView比UIWebView快得多。很高兴我能帮到你! - Julian E.
这个问题终于在iOS 11.3中得到解决。引自发布说明:“保存在主屏幕上的Web应用程序和SFSafariViewController中的网页现在可以使用相机来捕捉图像。(35542231)” - Rihards

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接