Я просмотрел несколько вопросов SO (например, , этот , или , этот ), чтобы найти способ поделиться изображением непосредственно с WhatsApp. Кажется, что все они следуют инструкциям официальной документации , и поэтому я получил такой метод:
extension WhatsAppInviter {
func shareImageViaWhatsapp(image: UIImage, onView: UIView) {
let urlWhats = "whatsapp://app"
if let urlString = urlWhats.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) {
if let whatsappURL = URL(string: urlString) {
if UIApplication.shared.canOpenURL(whatsappURL as URL) {
guard let imageData = image.pngData() else { debugPrint("Cannot convert image to data!")
return }
let tempFile = URL(fileURLWithPath: NSHomeDirectory()).appendingPathComponent("Documents/image.wai")
do {
try imageData.write(to: tempFile, options: .atomic)
documentInteractionController = UIDocumentInteractionController(url: tempFile)
documentInteractionController?.uti = "net.whatsapp.image"
documentInteractionController?.presentOpenInMenu(from: CGRect.zero, in: onView, animated: true)
} catch {
UIAlertController.presentAlertWith(title: "Error", message: "There was an error while processing.", actions: [UIAlertAction(title: "OK", style: .default, handler: nil)])
return
}
} else {
UIAlertController.presentAlertWith(title: "Error", message: "Cannot open Whatsapp, make sure Whatsapp is installed on your device.", actions: [UIAlertAction(title: "OK", style: .default, handler: nil)])
}
}
}
}
}
В официальной документации прямо говорится:
В качестве альтернативы, если вы хотите, чтобы в списке приложений отображался только WhatsApp (вместо WhatsApp и любых других общедоступных / * - соответствующих приложений), вы можете указать файл одного из вышеупомянутых типов, сохраненный с расширением, которое является эксклюзивным для WhatsApp:
images - «.wai» типа net .whatsapp.image
videos - «.wam» типа net .whatsapp.mov ie
аудиофайлы - «.waa» типа net .whatsapp.audio
При запуске WhatsApp немедленно предоставляет пользователю экран выбора контакта / группы. Носитель будет автоматически отправлен выбранному контакту / группе.
Однако при выполнении этого кода я продолжаю получать контроллер взаимодействия с документами, как вы можете видеть здесь:

Я что-то не так делаю или что-то изменилось с iOS 13? Как я могу пропустить это меню или хотя бы показать там только WhatsApp?