“这个项目不能共享。 请select其他项目。“WhatsApp iOS共享扩展失败消息

WhatsApp团队于2016年5月23日解决了这个错误(build no。2.16.4)。

无法使用UIActivityViewController共享NSString对象到WhatsApp。

我试图分享使用下面的代码。 但是,一旦从列表中select了联系人,它将显示一个警报,显示“ 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后,我遇到了这个问题

收到了WhatsApp团队的回复

– WhatsApp支持 –

嗨,

抱歉耽搁了! 我们最近收到很多邮件,我们尽全力回答。 感谢您的耐心等待。

感谢您通知我们这个问题; 它将在未来版本的WhatsApp中被修复。 不幸的是,我们不能评论任何未来的时间表,抱歉。 感谢您持续的耐心和WhatsApp的支持。

干杯,汉斯

所以,他们承认这个错误,并将在下一个版本中解决这个问题。

可能的解决方法=>

  • 那么可以使用UrlSchemes共享明文+url。 按照Spydy的答案 。
    要么
  • 可以使用activityCategory创build具有whatsapp图标的UIActivity子类作为UIActivityCategoryShare。 然后当用户select它,将使用urlschemes共享文本。 为此使用JBWhatsAppActivity
    要么
  • 只分享NSUrl对象分享url。 一旦修复完成,您可以恢复为分享纯文本和url。

在更新whatsapp后面临同样的问题。 即使你按“ 取消 ”在WhatsApp仍完成块显示成功。 我已经通过使用“ WFActivitySpecificItemProvider ”和“ WFActivitySpecificItemProvider ”在共享WhatsApp的时候解决它,然后解散activityViewController和通过你的共享。 您可以从https://github.com/wileywimberly/WFActivitySpecificItemProvider中提取WFActivitySpecificItemProvideractivityViewController

这是我的代码

 - (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]; } 

WhatsApp在2016年5月23日的更新中修正了这个错误(build no。2.16.4)。

官方消息来源没有报道,但我已经在我的代码中进行了testing – 工作正常。

使用最新版本的whatsapp,现在我们不能同时共享文本和URL。

我试了下面的代码

 NSArray *activityItems= @[someText,[NSURL URLWithString:@"http://www.google.com"]]; 

有了这个代码,我只能分享URL链接,whatsApp过滤掉了“someText”文本。

但其他共享应用程序(短信等)能够共享文本和url。

希望WhatsApp尽快解决这个问题。

您可能想尝试分享您尝试分享的项目的本地url。 例如,如果你想分享一个pdf,不要试图分享它的NSData或Data对象,WhatsApp仍然会显示那个错误。 相反,如果你分享它的本地URL,WhatsApp会识别它并且分享它。

我必须注意到,如果您尝试共享数据对象,包括本地邮件,Gmail,Slack,GDrive等在内的许多应用程序都会识别PDF。

例如:

下载PDF后,将其URL绑定到名为fileURL的variables中:

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。

希望这可以帮助!

我不确定你的问题…你想通过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 } 

看看这个问题: 通过iOS应用程序中的WhatsApp分享图片/文字