我正在使用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解决此问题吗?
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和PIROT NOWENG APP)时才起作用,您可以检查它:
BOOL isInstalledFBApp = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fbshareextension://"]];
有关更多信息:https://developers.facebook.com/docs/sharing/ios/
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
}
我在将图像分享到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)
}
希望它有帮助!
在5月的情况下,Facebook,Twitter和WhatsApp共享扩展崩溃,因为共享图像量表属性> 1.0