Ce problème a été résolu par l'équipe de WhatsApp le 23 mai 2016 (version n ° 2.16.4).
Impossible de partager un objet NSString avec UIActivityViewController
à WhatsApp.
J'ai essayé de partager en utilisant le code ci-dessous. Mais une fois que le contact est sélectionné dans la liste, il affiche une alerte avec "This item cannot be shared. Please select a different item.
"
CODE
NSString *shareText = @"Temp text to share";
NSArray *itemsToShare = @[shareText];
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare applicationActivities:nil];
Je suis confronté à ce problème après la mise à jour de WhatsApp vers la version 2.16.2
A reçu une réponse de l'équipe WhatsApp
- Assistance WhatsApp -
Salut,
Désolé pour le retard! Nous avons récemment reçu de nombreux courriels et nous le faisons notre meilleur pour répondre à tous. Merci pour votre patience.
Merci de nous informer sur le problème; il sera corrigé dans un future version de WhatsApp. Malheureusement, nous ne pouvons commenter aucune les délais futurs, désolé. Merci pour votre patience continue et soutien de WhatsApp.
Cordialement, Hans
Donc, ils reconnaissent le bogue et le corrigeront dans la prochaine version.
Solutions possibles =>
Vous pouvez essayer de partager l'URL locale de l'élément que vous essayez de partager. Par exemple, si vous souhaitez partager un fichier PDF, n'essayez pas de partager son objet NSData ou Data, WhatsApp affiche toujours cette erreur pour cela. Au lieu de cela, si vous partagez l'URL locale de celui-ci, WhatsApp le reconnaît et le partage bien.
Je dois noter que de nombreuses applications, notamment Mail, Gmail, Slack, GDrive, etc., reconnaissent le pdf si vous essayez de partager l'objet Data.
Par exemple:
Après avoir téléchargé un fichier PDF, liez son URL dans une variable appelée 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])
}
Ensuite, vous pouvez simplement partager le fileURL à la place:
let activityViewController = UIActivityViewController(
activityItems: [fileURL!],
applicationActivities: nil
)
WhatsApp reconnaîtra le PDF.
J'espère que cela t'aides!
ont fait face au même problème après la mise à jour de WhatsApp. Même si vous appuyez sur "cancel" sur WhatsApp, le bloc d'achèvement affiche toujours le succès . Je l'ai résolu en utilisant "WFActivitySpecificItemProvider" et "WFActivitySpecificItemProvider" lors du partage sur WhatsApp, puis supprimez activityViewController et partagez via ur. Vous pouvez extraire les classes WFActivitySpecificItemProvider, activityViewController de https://github.com/wileywimberly/WFActivitySpecificItemProvider
voici mon code
- (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 a corrigé ce bogue dans la mise à jour du 23 mai 2016 (n ° de construction 2.16.4).
Cela n'a pas été rapporté par des sources officielles, mais je l'ai testé dans mon code - fonctionne bien.
Avec la dernière version de WhatsApp, nous ne pouvons plus partager le texte et l’URL en même temps.
J'ai essayé le code ci-dessous
NSArray *activityItems= @[someText,[NSURL URLWithString:@"http://www.google.com"]];
Avec ce code, je ne peux partager que le lien URL, le WhatsApp a filtré le texte "someText".
mais les autres partagent des applications (SMS, etc.) capables de partager du texte et des URL.
espérons que WhatsApp corrige ce problème bientôt.
Couru dans ce problème avec un UIActivityItemSource personnalisé où je transmettais kUTTypeData
que la plupart des fournisseurs comprennent pour la méthode de délégué dataTypeIdentifierForActivityType
au lieu de kUTTypeText
. Un cas simple remplace le problème résolu dans mon cas. Juste une autre raison pour laquelle l'erreur ci-dessus pourrait apparaître si quelqu'un la voit.
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
}
}