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

时间:2016-04-13 16:05:57

标签: ios iphone 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];

将WhatsApp更新到版本2.16.2

后,我遇到了这个问题

6 个答案:

答案 0 :(得分:20)

收到WhatsApp团队的回复

  

- WhatsApp支持 -

     

您好,

     

抱歉延误了!我们最近收到了很多电子邮件,而且我们收到了   我们最好回答所有问题。感谢您的耐心等待。

     

感谢您告知我们这个问题;它将被固定在一个   WhatsApp的未来版本。不幸的是,我们无法对任何评论   未来的时间表,抱歉。感谢您的耐心等待   支持WhatsApp。

     

干杯,汉斯

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

可能的解决方法=>

  • 直到那时可以使用UrlSchemes分享明文+网址。跟随 Spydy's answer
  • 可以创建UIActivity的子类 activityCategory as UIActivityCategoryShare with whatsapp icon。然后 当用户选择它时,将使用urlschemes共享文本。对于此用途JBWhatsAppActivity
  • 只需共享NSUrl对象即可共享网址。修复完成后,您可以恢复共享纯文本和网址。

答案 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
}

看看这个问题: Share image/text through WhatsApp in an iOS app