美文网首页程序员
iOS12 使用相机或相册导致同一个控制器中的WKWebView

iOS12 使用相机或相册导致同一个控制器中的WKWebView

作者: 敌敌味丶 | 来源:发表于2018-10-30 16:32 被阅读0次

最近在项目中遇到一个让人头痛的bug,查遍网上都没找到,因为本项目中必须用到交互和上传相片,最后只能自己挨着挨着的排除测试。

出现问题的场景:

在同一个控制器中的WKWebView页面中使用相机或者相册后,所有的交互便失效了。回退后的web页面也同样失效。当退出再重新进入控制器,即创建了新的WKWebView页面,其他的交互又才可以用。

排除的问题及解决办法:

  1. 相机相册的使用权限问题
    ① 检查info.plist中是否添加以下两条权限
    相机 Privacy - Photo Library Usage Description
    相册 Privacy - Camera Usage Description
    ② 在访问时,权限是否生效,若未生效,则通过<Photos/Photos.h>中的PHAuthorizationStatus类来手动设置
  PHAuthorizationStatus authorizationStatus = [PHPhotoLibrary authorizationStatus];
        if (authorizationStatus == PHAuthorizationStatusAuthorized) {
            //从相册中读取照片
            [self readImageFromAlbum];
            
        } else {
            if (authorizationStatus == PHAuthorizationStatusNotDetermined) {
                [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { //弹出访问权限提示框
                    if (status == PHAuthorizationStatusAuthorized) {
                        //从相册中读取照片
                        [self readImageFromAlbum];
                    } else {
                        //显示无权限的提示
                    }
                }];
            } else {
                //显示无权限的提示
            }
            
        }

同样,此方法也用于解决此错误:
[discovery] errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled};
在网上看到很多人通过设置环境变量OS_ACTIVITY_MODE为disable来解决此打印问题,但个人觉得这并没有真正的解决问题,只是屏蔽打印而已。

  1. 经测试发现不管是通过原生的UIImagePickerController还是H5的input来调用相机或相册,只要进入相机或相册,就会导致与WKWebView的交互失效。
    最后换成UIWebView测试,终于发觉使用相机或相册不影响UIWebView的交互了,虽然UIWebView的性能没有WKWebView好,但为了解决此问题暂时退而求其次。

总结:

ios12使用相机或相册的系统类与WKWebView的交互类有冲突。

若找到更好解决办法,我会在后面更新;若你也遇到同样的问题,或有更好的解决方法,也希望可以留言相互交流学习。

相关文章

网友评论

    本文标题:iOS12 使用相机或相册导致同一个控制器中的WKWebView

    本文链接:https://www.haomeiwen.com/subject/lljgtqtx.html