videos - "Este artículo no puede ser compartido. Seleccione un elemento diferente. "WhatsApp iOS comparte el mensaje de falla de extensión
porque no puedo enviar videos por whatsapp (7)
El equipo de WhatsApp solucionó este error el 23 de mayo de 2016 (versión de compilación 2.16.4).
No se puede compartir el objeto UIActivityViewController
usando UIActivityViewController
a WhatsApp.
Traté de compartir usando el código a continuación. Pero una vez que se selecciona el contacto de la lista, muestra una alerta que muestra " This item cannot be shared. Please select a different item.
" This item cannot be shared. Please select a different item.
CÓDIGO
NSString *shareText = @"Temp text to share";
NSArray *itemsToShare = @[shareText];
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare applicationActivities:nil];
Me enfrento a este problema después de actualizar WhatsApp a la versión 2.16.2
Con la última versión de WhatsApp, ahora no podemos compartir el texto y la URL al mismo tiempo.
Probé el código siguiente
NSArray *activityItems= @[someText,[NSURL URLWithString:@"http://www.google.com"]];
Con este código puedo compartir solo el enlace URL, el archivo whatsApp filtra el texto "someText".
pero el otro comparte aplicaciones (SMS, etc.) que pueden compartir texto y url.
Espero que WhatsApp corrija este problema pronto.
Me UIActivityItemSource con este problema con un UIActivityItemSource personalizado donde estaba transmitiendo kUTTypeData
que la mayoría de los proveedores entienden para el método de delegado dataTypeIdentifierForActivityType
en lugar de kUTTypeText
. Las anulaciones simples de casos corrigieron el problema en mi caso. Solo otra razón por la que el error anterior podría estar apareciendo si alguien lo ve.
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
}
}
No estoy seguro de tu pregunta ... ¿Quieres simplemente enviar un mensaje de texto de WhatsApp? Si es así, no necesita usar UIActivityViewController . Solo usa urlschemes .
Algo como eso:
NSString *string = @"whatsapp://send?text=<YOUR MESSAGE>";
NSURL *url = [NSURL URLWithString:[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL: ];
También puedes verificar si el usuario tiene WhatsApp instalado
if ([[UIApplication sharedApplication] canOpenURL: url]) {
// wahtsapp installed
} else {
// whatsapp not installed
}
Mira esta pregunta: comparte imagen / texto a través de WhatsApp en una aplicación de iOS
Puede intentar compartir la URL local del artículo que intenta compartir. Por ejemplo, si desea compartir un pdf, no intente compartir su objeto NSData o Data, WhatsApp todavía muestra ese error. En cambio, si comparte su URL local, WhatsApp lo reconoce y lo comparte bien.
Debo señalar que muchas aplicaciones, incluyendo Mail nativo, Gmail, Slack, GDrive, etc. reconocen el pdf si intentas compartir el objeto Data.
Por ejemplo:
Después de descargar un PDF, enlace su URL a una variable llamada 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])
}
Entonces simplemente puedes compartir el archivo URL en su lugar:
let activityViewController = UIActivityViewController(
activityItems: [fileURL!],
applicationActivities: nil
)
WhatsApp reconocerá el PDF.
¡Espero que esto ayude!
Recibí una respuesta del equipo de WhatsApp
- Soporte de WhatsApp -
Hola,
¡Perdón por el retraso! Recientemente hemos recibido muchos correos electrónicos y hacemos todo lo posible para responderlos todos. Gracias por su paciencia.
Gracias por informarnos sobre el problema; se solucionará en una versión futura de WhatsApp. Lamentablemente, no podemos comentar sobre los plazos futuros, lo siento. Gracias por su continua paciencia y apoyo de WhatsApp.
Saludos, Hans
Por lo tanto, reconocen el error y lo arreglarán en la próxima versión.
Posibles soluciones provisionales =>
- Hasta entonces, uno puede usar UrlSchemes para compartir texto sin formato + url. Sigue la respuesta de Spydy .
O - Uno puede crear la subclase de UIActivity con activityCategory como UIActivityCategoryShare con el icono de whatsapp. Luego, cuando el usuario lo seleccione, usará urlschemes para compartir el texto. Para este uso JBWhatsAppActivity
O - Simplemente comparte el objeto NSUrl para compartir la URL. Una vez que haya solucionado el problema, puede volver a compartir texto sin formato y url.
WhatsApp ha corregido este error en su actualización del 23 de mayo de 2016 (versión de compilación 2.16.4).
No ha sido informado por fuentes oficiales, pero lo he probado en mi código, funciona bien.
se han enfrentado al mismo problema después de actualizar WhatsApp. Incluso usted presiona " cancelar " en el bloque de completación de WhatsApp que muestra el éxito. Lo resolví utilizando " WFActivitySpecificItemProvider " y " WFActivitySpecificItemProvider " cuando lo comparto en whatsapp, luego rechazo activityViewController y lo comparto a través de ur. Puede extraer las clases WFActivitySpecificItemProvider , activityViewController de https://github.com/wileywimberly/WFActivitySpecificItemProvider
aquí está mi código
- (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];
}