san*_*thu 35 iphone ios whatsapp ios8-share-extension
这个错误由WhatsApp团队于2016年5月23日修复(版本号2.16.4).
无法UIActivityViewController
与WhatsApp 共享NSString对象.
我尝试使用下面的代码分享.但是,一旦从列表中选择了联系人,它就会显示一条警告,显示" This item cannot be shared. Please select a different item.
"
码
NSString *shareText = @"Temp text to share";
NSArray *itemsToShare = @[shareText];
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare applicationActivities:nil];
Run Code Online (Sandbox Code Playgroud)
将WhatsApp更新到版本2.16.2后,我遇到了这个问题
san*_*thu 21
收到了WhatsApp团队的回复
- WhatsApp支持 -
嗨,
抱歉耽搁了!我们最近收到了很多电子邮件,我们会尽力回答这些问题.感谢您的耐心等待.
感谢您告知我们这个问题; 它将在WhatsApp的未来版本中修复.不幸的是,我们无法评论任何未来的时间表,抱歉.感谢您对WhatsApp的持续耐心和支持.
干杯,汉斯
因此,他们承认这个错误,并将在下一个版本中解决这个问题.
可能的解决方法=>
更新whatsapp后面临同样的问题.即使你在whatsapp上按" 取消 "仍然完成块显示成功.我在whatsapp上共享时使用" WFActivitySpecificItemProvider "和" WFActivitySpecificItemProvider " 解决了它,然后解析activityViewController并通过ur共享.您可以从https://github.com/wileywimberly/WFActivitySpecificItemProvider中提取 WFActivitySpecificItemProvider,activityViewController类
这是我的代码
- (void)share{
NSString *defaultMessage = @"your message may contain url";
// Use a dictionary
WFActivitySpecificItemProvider *provider1 =
[[WFActivitySpecificItemProvider alloc]
initWithPlaceholderItem:@""
items:@{
WFActivitySpecificItemProviderTypeDefault : defaultMessage,
UIActivityTypePostToFacebook : defaultMessage,
UIActivityTypeMail : defaultMessage,
UIActivityTypeMessage : defaultMessage,
@"com.linkedin.LinkedIn.ShareExtension":defaultMessage,
UIActivityTypePostToTwitter : defaultMessage
}];
// Use a block
WFActivitySpecificItemProvider *provider2 =
[[WFActivitySpecificItemProvider alloc]
initWithPlaceholderItem:@""
block:^(NSString *activityType){
if ([activityType isEqualToString:@"net.whatsapp.WhatsApp.ShareExtension"]) {
[avc dismissViewControllerAnimated:NO completion:nil];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
NSString *string = [NSString stringWithFormat:@"whatsapp://send?text=%@",defaultMessage];
NSURL *url = [NSURL URLWithString:[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL: url];
});
}
return defaultMessage;
}];
avc = [[UIActivityViewController alloc]
initWithActivityItems:@[provider1, provider2]
applicationActivities:nil];
[avc dismissViewControllerAnimated:YES completion:nil];
[avc setValue:sharingHeader forKey:@"subject"];
[avc setCompletionHandler:^(NSString *activityType, BOOL completed) {
if (activityType) {
NSLog(@"activity: %@ completed: %@",activityType,completed ? @"YES" : @"NO");
} else {
NSLog(@"No activity was selected. (Cancel)");
}
}];
[self presentViewController:avc animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
您可能想尝试共享您尝试共享的项目的本地URL.例如,如果您想共享pdf,请不要尝试共享它的NSData或Data对象,WhatsApp仍然会显示该错误.相反,如果您共享它的本地URL,WhatsApp会识别它并分享它.
我必须注意,如果您尝试共享Data对象,许多应用程序(包括本机Mail,Gmail,Slack,GDrive等)都会识别pdf.
例如:
下载PDF后,将其URL绑定到名为fileURL的变量中:
var fileURL = URL(string: url)
let destination: DownloadRequest.DownloadFileDestination = { _, _ in
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
fileURL = documentsURL.appendingPathComponent("AWESOME_PDF.pdf")
return (fileURL!, [.removePreviousFile, .createIntermediateDirectories])
}
Run Code Online (Sandbox Code Playgroud)
然后你可以简单地共享fileURL:
let activityViewController = UIActivityViewController(
activityItems: [fileURL!],
applicationActivities: nil
)
Run Code Online (Sandbox Code Playgroud)
WhatsApp将识别PDF.
希望这可以帮助!