web-dev-qa-db-fra.com

Partage de l'image sur Whatsapp et Facebook

Je suis déjà en mesure de partager des photos sur Whatsapp, mais je le fais en fournissant l’option Whatsapp dans une UIActivityViewController, puis en affichant une UIDocumentInteractionController.

À partir de cette UIDocumentInteractionController, j'ai choisi l'option Whatsapp qui redirige l'utilisateur vers Whatsapp et lui permet de partager la photo.

Jusqu'ici mon code est comme ceci:

if ([activityType isEqualToString:@"whatsappSharing"]) {
    if ([[UIApplication sharedApplication] canOpenURL: [NSURL URLWithString:@"whatsapp://app"]]) {
        NSString *savePath  = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/whatsAppTmp.wai"];

        [UIImageJPEGRepresentation(finalImage, 1.0) writeToFile:savePath atomically:YES];

        weakDocumentInteraction = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:savePath]];
        weakDocumentInteraction.UTI = @"net.whatsapp.image";
        weakDocumentInteraction.delegate = weakSelf;

        [weakDocumentInteraction presentOpenInMenuFromRect:CGRectZero inView:weakSelf.view animated:YES];
    }
}

Je veux pouvoir sélectionner l'option dans une UIActivityViewController et afficher directement Whatsapp. 

Existe-t-il un moyen de sauter cette deuxième partie de la présentation de la UIDocumentInteractionController et de la sélection de l'option de l'application Whatsapp par programme?

Actuellement, l'utilisateur doit sélectionner l'option Whatsapp deux fois pour partager l'image.

PS: J'utilise UIActivityViewController parce que j'utilise aussi d'autres activités.

12
Lucas Domene

Donc, en gros, vous voulez partager une image via Facebook ou Whatsapp, en plus de fournir une option pour enregistrer l'image.

Eh bien ... Permet de décomposer cela lentement pour les 2 voies les plus rapides.


Facebook + Whatsapp

Via UIActivityViewController

Si vous partagez une image viaUIActivityViewControllerthen, afin de fournir l'option Whatsapp, vous devez créer une UIActivity personnalisée. ( Voir la question Stackoverflow )

Les problèmes avec ceci sont:

  1. Whatsapp n'a pas fourni de schéma d'URL permettant de transmettre un objet image (encore).
    Regardez JBWhatsAppActivity si vous êtes curieux à ce sujet en général.

Via UIDocumentInteractionController

Si vous partagez une image viaUIDocumentInteractionControllerthen, pour pouvoir utiliser l'option Facebook, vous devez spécifier l'UTI sous la forme public.image.

Les problèmes avec ceci sont:

  1. Le public.image UTI remplira votre UIDocumentInteractionController avec beaucoup plus d’options que juste Facebook et Whatsapp.
  2. Pour l'option Save, plutôt que
    • Utilisation de la méthode -presentOpenInMenuFromRect:inView:animated: qui affiche uniquement les applications qui ouvrent ce type de fichier ...
    • Vous devrez utiliser la méthode -presentOptionsMenuFromRect:inView:animated: pour afficher l'option Save to Album. Mais ceci inclura d’autres options telles que Mail etc.

Résumé:

Si vous utilisez uniquement UIDocumentInteractionController, vous devez accepter le fait que vous ne pouvez pas afficher seulement Facebook + Whatsapp + Save (pour les raisons mentionnées ci-dessus).

Si vous utilisez UIActivityViewController et que vous ne voulez pas créer une UIActivity personnalisée pour Whatsapp, vous êtes bloqué mais ... si vous décidez d'utiliser une UIActivity personnalisée, vous êtes toujours bloqué car il n'y a pas de disposition partager un objet image avec Whatsapp à l'aide de UIActivityViewController.

Conclusion:

Il ne semble pas y avoir de moyen facile d’avoir l’option juste Facebook + Whatsapp + Save. 

La chose qui la complique est Whatsapp qui vous oblige à utiliser UIDocumentInteractionController qui semble être le seul moyen de partager une image sur Whatsapp (actuellement) et en raison de son schéma d'URL limité, il n'y a pas point en le fournissant dans UIActivityViewController.

De plus, utiliser UIDocumentInteractionController à tour de rôle vous conduit à fournir plus d'options que vous ne le souhaiteriez.

Honnêtement, cela semble plutôt sombre en ce moment.

20
staticVoidMan

Eh bien, si je comprends la question correctement, il existe une option pour la partager facilement via 1 UIDocumentInteractionController, veuillez consulter mon ancienne question & réponse: https://stackoverflow.com/a/20887254/849616 .

1
Vive