Reputation: 81
When I use Apple's UIActivityViewController
to share a few images to WeChat (weixin). I find that sometimes it doesn't work. Most of the time it works well when I select only 1~3 images, but if I share 9 images (largest number allowed by WeChat), it will certainly fail, and the console will print
2016-04-01 16:14:34.258 EverPhoto[5567:1981394] plugin com.tencent.xin.sharetimeline interrupted 2016-04-01 16:14:34.258 EverPhoto[5567:1981394] plugin com.tencent.xin.sharetimeline invalidated
Here is the code:
__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
is the custom object that implemented the protocol UIActivityItemSource
.
P.S. I tried APP Google Photo and found it has done very well in its share function. It can share 9 images with even original HD size of system photo asserts to WeChat using UIActivityViewController
.
So, how should I solve this problem?
Upvotes: 8
Views: 1759
Reputation: 1
I have the same problem.@wj2061's answer is right but not the solution. I think you probably set shareItem with UIImage. If you have the image's fileUrl, set it to shareItem. If not, try save the UIImage to file first. in your shareItem class, return the fileUrl.
- (nullable id)activityViewController:(UIActivityViewController*)activityViewController itemForActivityType:(NSString *)activityType{
return _filePathUrl;
}
It's work for me.
Upvotes: 0
Reputation: 6885
WeChat's Share Extension is Terminated due to App Extension's Memory Limit.
According to Apple's App Extension Programming Guide: Optimize Efficiency and Performance
Memory limits for running app extensions are significantly lower than the memory limits imposed on a foreground app. On both platforms, the system may aggressively terminate extensions because users want to return to their main goal in the host app. Some extensions may have lower memory limits than others: For example, widgets must be especially efficient because users are likely to have several widgets open at the same time.
1.I created 9 very small images,and shared with WeChat successfully:
- (UIImage *)imageWithColor:(UIColor *)color
{
CGRect rect = CGRectMake(0, 0, 1, 1);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
2.You can scale down your images before sharing them with WeChat,here is some Scale methods
Upvotes: 5