El uso compartido de fotos solo en Instagram de iOS 13 no funciona

8

Hasta iOS 12.4, la implementación de compartir fotos en el feed de Instagram (siguiendo la documentación ) funcionó correctamente, pero desde iOS 13 ya no funciona.

Con la implementación actual, UIDocumentInteractionControllerla UTI está configurada en "com.instagram.exclusivegram"y la extensión de archivo en .igo, no hay ninguna opción para compartir en Instagram visible en absoluto. Cuando cambio la extensión del archivo a .igPuedo ver la opción de compartir Instagram entre sugerencias. De esta manera, compartir para alimentar funciona, pero esa no es la solución esperada solo para Instagram.

Establecer UTI en "com.instagram.photo"no cambia nada.

El comportamiento esperado es ver la vista visible a continuación cuando presiono el botón "compartir", sin pasos adicionales. ¿Podría ser un error de Instagram o hay alguna otra forma de implementarlo para iOS 13?

ingrese la descripción de la imagen aquí

Bastek
fuente
FWIW, estoy luchando exactamente el mismo problema. Tengo la versión 119.0 de Instagram instalada en dispositivos con iOS 11, 12 y 13, y el problema solo ocurre en el dispositivo con iOS 13. Supongo que eso significa que se ha roto en iOS 13 y no es específico. a la aplicación de Instagram.
Dave L

Respuestas:

4

debe agregar su imagen a la biblioteca de fotos y luego compartirla directamente a Instagram

en primer lugar, no olvide agregar NSPhotoLibraryAddUsageDescription y el esquema de instagram a su info.plist:

<key>NSPhotoLibraryAddUsageDescription</key>
<string>$(PRODUCT_NAME) wants to save pictures to your library</string>

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>instagram</string>
</array>

Funciona correctamente para iOS 12.4 y 13

import UIKit
import Photos

class TestViewController: UIViewController, UIDocumentInteractionControllerDelegate {

override func viewDidLoad() {
    super.viewDidLoad()
    postImageToInstagram(UIImage(named: "bigImage")!)
}

func postImageToInstagram(_ image: UIImage) {
    // Check if we have instagarm app
    if UIApplication.shared.canOpenURL(URL(string: "instagram://app")!) {
        // Requesting authorization to photo library in order to save image there
        PHPhotoLibrary.requestAuthorization { status in
            if status == .authorized {
                UIImageWriteToSavedPhotosAlbum(image, self, #selector(self.image(_:didFinishSavingWithError:contextInfo:)), nil)
            } else { print("wrong status \(status)") }
        }
    } else { print("Please install the Instagram application") }
}

@objc func image(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) {
    if let error = error {
        print(error)
        return
    }
    let fetchOptions = PHFetchOptions()
    // add sorting to take correct element from fetchResult
    fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
    fetchOptions.fetchLimit = 1
    // taking our image local Identifier in photo library to share it
    let fetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions)
    if let lastAsset = fetchResult.firstObject {
        let url = URL(string: "instagram://library?LocalIdentifier=\(lastAsset.localIdentifier)")!
        if UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url) }
        else { print("Please install the Instagram application") }
    }
}
}

Resultado ingrese la descripción de la imagen aquí

Nikita
fuente