我使用UIActivityViewController
使用户能够在社交媒体上分享图片。但是,几秒钟之后,Facebook的共享对话框在iOS 11中崩溃,并显示以下日志:
[core] SLRemoteComposeViewController: (this may be harmless) viewServiceDidTerminateWithError: Error Domain=_UIViewServiceErrorDomain Code=1 "(null)" UserInfo={Terminated=disconnect method}
[core] SLComposeViewController remoteViewController: <SLRemoteComposeViewController: 0x1040b7e00> didTerminateWithError: Error Domain=_UIViewServiceErrorDomain Code=1 "(null)" UserInfo={Terminated=disconnect method}
虽然图像需要几秒钟才会显示,但iOS 10中不会出现错误。
知道造成这个问题的原因是什么吗?我是否必须等待Facebook解决这个问题?
答案 0 :(得分:1)
Facebook不再集成在iOS 11中。您可以集成本机Facebook SDK并使用此代码:
FBSDKSharePhoto *photo = [[FBSDKSharePhoto alloc] init];
photo.image = _image;
photo.userGenerated = YES;
FBSDKSharePhotoContent *content = [[FBSDKSharePhotoContent alloc] init];
content.photos = @[photo];
[FBSDKShareDialog showFromViewController:self withContent:content delegate:self];
仅当本地Facebook应用程序安装在设备上时才有效(iOS 10及之前没有应用程序),您可以查看它:
BOOL isInstalledFBApp = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fbshareextension://"]];
答案 1 :(得分:1)
Karen Hovhannisyan的答案是正确的。比例大于1.0的图像将同时使Twitter和Facebook崩溃。缩放图像可以解决问题。但是,它并不是很理想。 我试图通过增加尺寸以使其与分辨率匹配来规范化图像,但这也导致了崩溃。可能是因为图像太大。
func shareableImage(image: UIImage) -> UIImage {
guard let cgImage = image.cgImage else { return image }
let size: CGSize = CGSize(width: CGFloat(cgImage.width) / image.scale, height: CGFloat(cgImage.height) / image.scale)
defer {
UIGraphicsEndImageContext()
}
UIGraphicsBeginImageContextWithOptions(size, false, 1)
image.draw(in: CGRect(origin: .zero, size: size))
return UIGraphicsGetImageFromCurrentImageContext() ?? image
}
答案 2 :(得分:0)
在向Whatsapp分享图片时,我遇到了同样的问题,共享对话框在几秒钟后自动关闭。 感谢@Mike Demidov,我意识到由于我保存图像的方式,要分享的图像有问题,如下所示。
if let testImage = UIImageJPEGRepresentation(self.testImageView.image!, 0.5) {
let destinationUrl = DocumentHelper.getDocumentsDirectory().appendingPathComponent(identifier + "_test.png")
try? testImage.write(to: destinationUrl)
}
原因是因为我使用UIImageJPEGRepresentation
来转换图像,但我将图像名称/文件格式设置为.png。
我解决问题的方法是将其更改为.jpeg,如下所示。
if let testImage = UIImageJPEGRepresentation(self.testImageView.image!, 0.5) {
let destinationUrl = DocumentHelper.getDocumentsDirectory().appendingPathComponent(identifier + "_test.jpeg")
try? testImage.write(to: destinationUrl)
}
希望它有所帮助!
答案 3 :(得分:0)
在Facebook,Twitter和Whatsapp共享扩展名可能崩溃的情况下,因为共享图像比例属性大于1.0