"此商品无法共享.请选择其他商品." WhatsApp iOS共享扩展失败消息

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的持续耐心和支持.

干杯,汉斯

因此,他们承认这个错误,并将在下一个版本中解决这个问题.

可能的解决方法=>

  • 然后可以使用UrlSchemes分享明文+网址.按照 Spydy的回答.
    要么
  • 可以使用activityCategory创建UIActivity的子类作为UIActivityCategoryShare和whatsapp图标.然后,当用户选择它时,将使用urlschemes共享文本.为此使用JBWhatsAppActivity
    OR
  • 只需共享NSUrl对象即可共享网址.修复完成后,您可以恢复共享纯文本和网址.


Spy*_*ydy 8

更新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)

  • 我在想同样的思路.我将使用activityCategory创建UIActivity的子类作为UIActivityCategoryShare和whatsapp图标.然后,当用户选择它时,将使用urlschemes共享文本.但我会等待一段时间,直到得到whatsapp产品团队的回复. (2认同)
  • 请让我知道Whatsapp团队说.谢谢 (2认同)

Mer*_*man 8

您可能想尝试共享您尝试共享的项目的本地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.

希望这可以帮助!