Этот элемент нельзя использовать совместно. Выберите другой элемент. Сообщение об ошибке расширения общего доступа WhatsApp iOS

Эта ошибка исправлена ​​командой WhatsApp 23 мая 2016 года (номер сборки 2.16.4).

Невозможно поделиться объектом NSString с помощью UIActivityViewController в WhatsApp.

Я попытался поделиться, используя приведенный ниже код. Но как только контакт выбран из списка, он показывает предупреждение, отображающее "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.


person santhu    schedule 13.04.2016    source источник
comment
Вы разобрались? Потому что даже я столкнулся с той же проблемой, раньше он работал правильно до последнего обновления Whats App, но теперь это не так!   -  person Irshad Qureshi    schedule 15.04.2016
comment
Та же проблема здесь. Это очень расстраивает.   -  person pAkY88    schedule 15.04.2016
comment
Неа. Отправил письмо в службу поддержки WhatsApp по поводу проблемы с продуктом. Нет ответа уже 4 дня. Не знаю, что делать, но для временного исправления я просто разрешаю делиться ссылкой сейчас.   -  person santhu    schedule 16.04.2016
comment
Конечно, это из-за WhatsApp и их встроенной поддержки ActivityViewController?   -  person Mark Molina    schedule 18.04.2016
comment
После небольшой игры кажется, что WhatsApp не позволяет вам напрямую обмениваться текстом. Но он позволяет вам обмениваться URL-адресами, видео, изображениями и т. д. Итак (по крайней мере, в нашем случае) мы делились текстом со встроенным URL-адресом и заменили его на: @[NSURL(***), "share Text"];, чтобы WhatsApp принимал только URL-адрес, а остальные приложения — текст тоже.   -  person Eli Kohen    schedule 22.04.2016
comment
После моего тестирования я должен поблагодарить @EliKohen за информацию. Надеюсь, что это изменится в будущем :)   -  person Happiehappie    schedule 25.04.2016


Ответы (7)


Получил ответ от команды WhatsApp

- Поддержка WhatsApp -

Hi,

Извините за задержку! В последнее время мы получили много писем и стараемся ответить на все из них. Спасибо за терпеливость.

Спасибо, что сообщили нам о проблеме; это будет исправлено в будущей версии WhatsApp. К сожалению, мы не можем комментировать какие-либо будущие сроки, извините. Спасибо за ваше терпение и поддержку WhatsApp.

Привет, Ганс

Итак, они признают ошибку и исправят ее в следующем выпуске.

Возможные обходные пути =›

  • До тех пор можно использовать UrlSchemes для обмена открытым текстом + URL. Следуйте ответу Spydy.
    ИЛИ
  • Можно создать подкласс UIActivity с ActivityCategory как UIActivityCategoryShare со значком WhatsApp. Затем, когда пользователь выберет его, он будет использовать схемы URL-адресов для обмена текстом. Для этого используйте JBWhatsAppActivity
    ИЛИ
  • Просто поделитесь объектом NSUrl для обмена URL-адресом. Как только исправление будет выполнено, вы можете вернуться к обмену простым текстом и URL-адресом.
person santhu    schedule 26.04.2016
comment
если я использую JBWhatsAppActivity, как удалить оригинальный WhatsApp на первой полосе? - person Zaporozhchenko Oleksandr; 17.05.2016
comment
Вы пытались удалить исходную активность WhatsApp, зная ее строку ActivityType и указав ее в excludeActivityTypes. - person santhu; 17.05.2016
comment
как? в UIActivity.h нет UIActivityType для WhatsApp - person Zaporozhchenko Oleksandr; 17.05.2016

Вы можете попробовать поделиться локальным URL-адресом элемента, которым вы пытаетесь поделиться. Например, если вы хотите поделиться PDF-файлом, не пытайтесь поделиться его NSData или объектом Data, WhatsApp по-прежнему показывает эту ошибку для этого. Вместо этого, если вы поделитесь его локальным URL-адресом, WhatsApp распознает его и хорошо поделится им.

Я должен отметить, что многие приложения, включая нативную Mail, Gmail, Slack, GDrive и т. д., распознают PDF-файл, если вы пытаетесь поделиться объектом Data.

Например:

После загрузки 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])
    }

Затем вы можете просто поделиться URL-адресом файла:

let activityViewController = UIActivityViewController(            
      activityItems: [fileURL!],
      applicationActivities: nil
)

WhatsApp распознает PDF.

Надеюсь это поможет!

person Mert Kahraman    schedule 30.10.2017
comment
Я могу отправить PDF через WhatsApp с этим решением. Но с других устройств iOS этот pdf открывается, но не с Android. Есть идеи, почему? - person Soumen; 13.10.2019

Столкнулся с такой же проблемой после обновления WhatsApp. Даже если вы нажмете «отмена» в WhatsApp, блок завершения все еще показывает успех. я решил это, используя «WFActivitySpecificItemProvider» и «WFActivitySpecificItemProvider» при совместном использовании в WhatsApp, затем отклоните ActivityViewController и поделитесь через ur. Вы можете извлечь классы WFActivitySpecificItemProvider, activityViewController из https://github.com/wileywimberly/WFActivitySpecificItemProvider

вот мой код

- (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];
}
person Spydy    schedule 14.04.2016
comment
Ваш случай может быть другим, в моем случае я должен показать одну кнопку общего доступа для всех видов приложений для обмена, установленных на моем телефоне. поэтому приведенный выше код работает для моего случая. - person Spydy; 14.04.2016
comment
Я думаю в том же направлении. Я создам подкласс UIActivity с ActivityCategory как UIActivityCategoryShare со значком WhatsApp. Затем, когда пользователь выберет его, он будет использовать схемы URL-адресов для обмена текстом. Но я подожду, пока не получу ответ от команды разработчиков WhatsApp. - person santhu; 14.04.2016
comment
Пожалуйста, дайте мне знать, говорит команда WhatsApp. Спасибо - person pAkY88; 15.04.2016
comment
Мы столкнулись с той же проблемой, поэтому сообщите нам, как только получите ответ от WhatsApp. - person Iphone User; 16.04.2016

WhatsApp исправил эту ошибку в своем обновлении от 23 мая 2016 года (сборка № 2.16.4).

Официальные источники не сообщают об этом, но я проверил это в своем коде - работает нормально.

person Ulhas Mandrawadkar    schedule 25.05.2016
comment
С этим все еще есть проблемы: например, если вы используете 1Password и передаете пароль из своего хранилища WhatsApp, сообщение об ошибке появится, когда вы выберете человека, которому хотите его отправить. - person RichAppz; 31.05.2016

С последней версией WhatsApp теперь мы не можем одновременно обмениваться текстом и URL-адресом.

Я попробовал приведенный ниже код

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

С помощью этого кода я могу поделиться только URL-ссылкой, WhatsApp отфильтровал текст «someText».

но другие приложения для обмена (SMS и т. д.) могут обмениваться как текстом, так и URL-адресом.

надеюсь, что WhatsApp скоро исправит эту проблему.

person Avaan    schedule 01.05.2016
comment
Вы действительно думаете, что это отвечает на него, в то время как другие ответы не могут. Пожалуйста, ознакомьтесь с другими ответами, прежде чем публиковать другой ответ. - person santhu; 01.05.2016

Столкнулся с этой проблемой с пользовательским UIActivityItemSource, где я возвращал kUTTypeData, который понимает большинство провайдеров. для метода делегата dataTypeIdentifierForActivityType вместо kUTTypeText. Простые переопределения регистра исправили проблему в моем случае. Еще одна причина, по которой вышеприведенная ошибка может появиться, если кто-нибудь ее увидит.

open func activityViewController(_ activityViewController: UIActivityViewController, dataTypeIdentifierForActivityType activityType: UIActivityType?) -> String {
    switch activityType {
    case UIActivityType(rawValue: "net.whatsapp.WhatsApp.ShareExtension"):
        return kUTTypeText as String
    default:
        return kUTTypeData as String
    }
}
person Mark Thormann    schedule 10.05.2018

Я не уверен в вашем вопросе... Вы хотите просто отправить текст по WhatsApp? Если да, вам не нужно использовать UIActivityViewController. Просто используйте схемы URL.

Что-то такое:

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
}

Посмотрите этот вопрос: Поделиться изображением/текстом через WhatsApp в приложении для iOS

person Wagner Sales    schedule 13.04.2016
comment
Я знаю это. Но я не собираюсь использовать схемы URL. Потому что это три касания от обмена и выглядит длительным процессом. Меня больше беспокоит, почему родное расширение WhatsApp не работает так, как раньше. Пожалуйста, попробуйте один раз и дайте мне знать, работает ли это для вас. Ранее я использовал объект NSString для общего доступа к плоскому тексту, который содержит пользовательское сообщение и ссылку. Теперь он даже не поддерживает текстовые сообщения. - person santhu; 13.04.2016
comment
Хммм... Интересно. Я поищу о собственном расширении общего доступа WhatsApp. - person Wagner Sales; 13.04.2016
comment
Ваш код просто подтверждает, что этот URL-адрес, указанный в виде строкового объекта, может назначать NSURL. Это не относится к Whatsapp.. - person Onder OZCAN; 20.04.2016
comment
Это способ отправить WhatsApp msg ... Посмотрите схему URL. @ИннаКамозе - person Wagner Sales; 25.04.2016
comment
Это не решает проблему, вам нужно добавить строку в plist в виде массива LSApplicationQueriesSchemes и вставить строку в виде строки whatsapp вместо URL-схемы. - person Onder OZCAN; 26.04.2016
comment
Простое добавление WhatsApp в LSApplicationQueriesSchemes решило мою проблему обмена текстом. - person neowinston; 25.08.2016