Facebook共享扩展在iOS 11中崩溃

时间:2017-09-26 13:11:26

标签: facebook uikit ios11 ios8-share-extension

我使用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解决这个问题?

4 个答案:

答案 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://"]];

有关详细信息:https://developers.facebook.com/docs/sharing/ios/

答案 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