Share audio file to whatsapp with a direct opening

Hello,

I am trying to share an audio file from my ios app to whatsapp, but with a direct opening of whatsapp, and not an opening of the sharing menu with all the tiles. Here is what i have now:

    // Getting the original file
    let fileName = #MY FILE NAME# 
    let filePath = Bundle.main.path(forResource: fileName, ofType: "mp3")!  
    let urlData = URL.init(fileURLWithPath: filePath)    let nsData = NSData(contentsOf: urlData


    if (nsData != nil){


        // Creating the temporary file to share in the accessible ressources
        let newFileName = "file.mp3"
        let newFilePath = "\(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])/\(newFileName)"
        nsData?.write(toFile: newFilePath, atomically: true) 
        let newUrlData = URL.init(fileURLWithPath: newFilePath) 


        // Sharing the file to whatsapp
        // Possibility 1 (does not work yet) 
//      let documentController = UIDocumentInteractionController(url: newUrlData)
//      documentController.uti = "net.whatsapp.audio"
//      documentController.presentOpenInMenu(from: CGRect.zero, in: self.view, animated: true)


        // Possibility 2 (works only with the sharing menu)
        let activityVC = UIActivityViewController(activityItems: [NSURL(fileURLWithPath: newFilePath)], applicationActivities: nil)
        self.present(activityVC, animated: true, completion: nil)
    }

As I do this, sharing an audio file to whatsapp works, but it first open the sharing menu, with the messenger tile, message tile, notes tile, ... (and it doesn't works for the messenger app).

In the end I would like to be able to share on messenger AND whatsapp. As explicated here in the whatsapp documentation, I want to open directly the whatsapp application when I try to share the file:

> Alternatively, if you want to show only WhatsApp in the application list (instead of WhatsApp plus any other public/*-conforming apps) you can specify a file of one of aforementioned types saved with the extension that is exclusive to WhatsApp:

>

> - images - «.wai» which is of type net.whatsapp.image

> - videos - «.wam» which is of type net.whatsapp.movie

> - audio files - «.waa» which is of type net.whatsapp.audio

>

> When triggered, WhatsApp will immediately present the user with the contact/group picker screen. The media will be automatically sent to a selected contact/group.

So I tried to change the line :

    let newFileName = "file.mp3"

To one of these :

    let newFileName = "file.mp3.waa"
    let newFileName = "file.waa"
    let newFileName = "file.waa.mp3"

But it still shows the same sharing menu (and can't read the audiofile if it ends with the .waa extension).

  1. Is it possible to do what I want to do ?
  2. If not, is there a way to share to messenger & whatsapp with the same code keeping one sharing menu
  3. If not, is there a way to reduce the sharing menu to only one tile depending on different calling event, so there is no confusing choosing of tiles

Thanks, Antoine