UIActivityViewController与微信共享图像无法正常工作

时间:2016-04-01 08:41:57

标签: ios objective-c iphone wechat

当我使用Apple的UIActivityViewController与WeChat(weixin)分享一些图片时。我发现有时它不起作用。大多数情况下,当我只选择1~3张图像时效果很好,但如果我共享9张图片(微信允许的最大数量),它肯定会失败,控制台会打印

  

2016-04-01 16:14:34.258 EverPhoto [5567:1981394]插件   com.tencent.xin.sharetimeline中断2016-04-01 16:14:34.258   EverPhoto [5567:1981394]插件com.tencent.xin.sharetimeline   无效

以下是代码:

__weak typeof(self) __weakSelf = self;
self.activityViewController = [[UIActivityViewController alloc] initWithActivityItems:self.shareItems applicationActivities:nil];
self.activityViewController.excludedActivityTypes = @[UIActivityTypePostToFacebook,
                                     UIActivityTypePostToTwitter,
                                     UIActivityTypePostToVimeo,
                                     UIActivityTypePostToTencentWeibo,
                                     UIActivityTypePrint,
                                     UIActivityTypeCopyToPasteboard,
                                     UIActivityTypeAssignToContact,
                                     UIActivityTypeSaveToCameraRoll,
                                     UIActivityTypeAddToReadingList,
                                     UIActivityTypePostToFlickr,
                                     ];
self.activityViewController.completionWithItemsHandler = ^(NSString * __nullable activityType, BOOL completed, NSArray * __nullable returnedItems, NSError * __nullable activityError){
    DLog(@"shareCompleted : %@", completed ? @"YES" : @"NO")
    __weakSelf.shareItems = nil;
    __weakSelf.activityViewController = nil;
};

[self.containerVc presentViewController:self.activityViewController animated:YES completion:nil];

ShareItems是实现协议UIActivityItemSource的自定义对象。

P.S。我尝试了APP Google Photo,发现它在共享功能方面做得很好。它可以使用UIActivityViewController向微信共享9张图像,甚至是原始高清尺寸的系统照片断言。 那么,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

由于App Extension的内存限制,微信的分享延期终止 根据Apple的App Extension Programming Guide:优化效率和绩效

  

运行应用扩展程序的内存限制明显低于对前台应用程序施加的内存限制。在这两个平台上,系统可能会积极地终止扩展,因为用户希望在主机应用程序中返回其主要目标。某些扩展可能具有比其他扩展更低的内存限制:例如,窗口小部件必须特别有效,因为用户可能同时打开多个窗口小部件。

1.我创建了9个非常小的图像,并成功与微信分享:

- (void)signOut {
  [[GPPSignIn sharedInstance] signOut];
}

2.您可以在与微信分享之前缩小图片,这里有一些Scale methods

答案 1 :(得分:0)

我有同样的问题。@ wj2061的答案是正确的但不是解决方案。我想你可能用UIImage设置了shareItem。如果您有图像的fileUrl,请将其设置为shareItem。如果没有,请尝试首先将UIImage保存到文件。 在您的shareItem类中,返回fileUrl。

- (nullable id)activityViewController:(UIActivityViewController*)activityViewController itemForActivityType:(NSString *)activityType{
    return _filePathUrl;
}

这对我有用。