此错误由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];
将WhatsApp更新到版本2.16.2
后,我遇到了这个问题答案 0 :(得分:20)
收到WhatsApp团队的回复
- WhatsApp支持 -
您好,
抱歉延误了!我们最近收到了很多电子邮件,而且我们收到了 我们最好回答所有问题。感谢您的耐心等待。
感谢您告知我们这个问题;它将被固定在一个 WhatsApp的未来版本。不幸的是,我们无法对任何评论 未来的时间表,抱歉。感谢您的耐心等待 支持WhatsApp。
干杯,汉斯
所以,他们承认这个错误并将在下一个版本中解决这个问题。
可能的解决方法=>
答案 1 :(得分:8)
在更新whatsapp后面临同样的问题。即使您按下" 取消"在whatsapp仍然完成块显示成功。 我已经使用" WFActivitySpecificItemProvider "解决了这个问题。和" WFActivitySpecificItemProvider "在whatsapp上共享时,请关闭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];
}
答案 2 :(得分:8)
您可能想尝试共享您尝试共享的项目的本地网址。例如,如果您想共享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])
}
然后你可以简单地共享fileURL:
let activityViewController = UIActivityViewController(
activityItems: [fileURL!],
applicationActivities: nil
)
WhatsApp将识别PDF。
希望这有帮助!
答案 3 :(得分:2)
WhatsApp已在2016年5月23日的更新中修复了此错误(版本号2.16.4)。
官方消息来源尚未对此进行报道,但我已在我的代码中对其进行了测试 - 工作正常。
答案 4 :(得分:0)
使用最新版本的whatsapp,现在我们无法同时共享文本和网址。
我尝试了以下代码
NSArray *activityItems= @[someText,[NSURL URLWithString:@"http://www.google.com"]];
使用此代码,我只能共享URL链接,whatsApp过滤掉了" someText"文本。
但其他共享应用程序(SMS等)能够共享文本和网址。
希望WhatsApp很快解决这个问题。
答案 5 :(得分:-1)
我不确定你的问题......你想要通过whatsapp发送短信吗?如果是,则不需要使用 UIActivityViewController 。只需使用 urlschemes 。
类似的东西:
NSString *string = @"whatsapp://send?text=<YOUR MESSAGE>";
NSURL *url = [NSURL URLWithString:[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL: ];
您还可以检查用户是否安装了whatsapp
if ([[UIApplication sharedApplication] canOpenURL: url]) {
// wahtsapp installed
} else {
// whatsapp not installed
}