Partager une image sur Instagram avec iOS Swift

Nov 9, 2019 07:33 · 830 words · 4 minute read ios ios13 ios14 swift

Aujourd'hui, nous allons voir comment partager une image sur Instagram à partir de votre application iOS et en utilisant le langage de programmation Swift. Rien de très complexe mais juste quelques pièges et différentes documentations à parcourir. J'espère que les lignes suivantes vous aideront dans le processus. Nous commencerons par examiner les deux concepts suivants:

  • Schémas d'URL personnalisés (Custom URL Schemes) Instagram
  • API iOS d'interaction avec les documents (Document Interaction API)

puis nous écrirons du code Swift pour partager une image sur Instagram.

Au travail!

Schémas d'URL personnalisés (Custom URL Schemes) Instagram

Les schémas d'URL personnalisés permettent des interactions simples avec l'API Instagram à partir de votre application iOS. Vous pouvez par exemple ouvrir l'application Instagram, démarrer la caméra, accéder à un compte utilisateur spécifique sur Instagram, etc.

Un schéma d'URL personnalisé a deux composants principaux:

  • le schéma lui-même qui référence instagram, c'est-à-dire instagram://
  • le ou les paramètres du schéma qui spécifient l'action personnalisée que vous souhaitez effectuer, par exemple, app,camera, user?username=USERNAME, etc.

Pour pouvoir utiliser des schémas d'URL personnalisés à partir de votre application, la toute première chose que vous devez faire est de l'ajouter à votre fichier Info.plist. Si vous ne l'avez pas déjà, ajoutez une nouvelle clé nommée LSApplicationQueriesSchemes de typeArray et deux nouveaux éléments de type String et de valeur instagram-stories (pour les stories Instagram) et instagram:// (pour le feed Instagram). Les clés n'ont pas d'importance.

Vous pouvez maintenant commencer à utiliser des schémas d'URL Instagram personnalisés! Le plus simple est celle utilisée pour ouvrir l'application Instagram. Vous pouvez l'utiliser pour simplement ouvrir l'application Instagram ou pour tester que l'application Instagram est installée sur l'appareil de l'utilisateur.

func partagerDansFeedInstagram(image: UIImage) {
    guard let instagramUrl = URL(string: "instagram://app") else {
        return
    }

    if UIApplication.shared.canOpenURL(instagramUrl) {
        // partager quelque chose sur Instagram
    } else {
        // L'application Instagram n'est pas installée ou ne peut pas être démarrée, afficher une alerte
    }
}

API iOS d'interaction avec les documents (Document Interaction API)

L'API Document Interaction vous permet d'interagir avec des documents (images dans notre exemple) qui sont déjà sur l'appareil de l'utilisateur (vous pouvez créer le fichier avant d'interagir avec celui-ci). Voyonz comment!

// NOTE: vous avez ajouté UIDocumentInteractionControllerDelegate à votre view controller

func partagerFichierSurInstagram(fileUrl: URL) {
    let documentController = UIDocumentInteractionController(url: fileUrl)
    // l'UTI est défini par Instagram
    documentController.uti = "com.instagram.photo"

    // ouvre Document Interaction view pour partager sur Instagram
    documentController.presentOpenInMenu(from: self.view.frame, in: self.view, animated: true)
}

Rien de très sophistiqué ici. Cela ouvre un menu de partage qui permet à l'utilisateur de partager une image existante à l'emplacement fileUrl vers son flux Instagram. Cette solution affiche également d'autres options de partage, mais vous pouvez restreindre à Instagram uniquement en utilisant l'extension .igo pour le fichier et l'UTI com.instagram.exclusivegram.

Partager une image sur Instagram

Instagram a deux options pour partager des images actuellement:

  • Fil Instagram (Feed)
  • Histoires Instagram (Stories)

Voyons d'abord le partage sur le feed Instagram.

Veuillez noter qu'Instagram ne permet plus de spécifier la légende texte dans votre application, donc le code suivant ouvrira une nouvelle fenêtre Instagram où l'utilisateur peut lui-même ajouter la légende.

func partagerDansFeedInstagram(image: UIImage) {
    // construire le schéma d'URL personnalisé
    guard let instagramUrl = URL(string: "instagram://app") else {
        return
    }

    // vérifier que Instagram a démarré
    if UIApplication.shared.canOpenURL(instagramUrl) {
        // construire le contenu de l'image depuis l'UIImage
        guard let imageData = UIImageJPEGRepresentation(image, 100) else {
            return
        }

        // construire le fichier URL
        let path = (NSTemporaryDirectory() as NSString).appendingPathComponent("instagram.ig")
        let fileUrl = URL(fileURLWithPath: path)

        // écrire le contenu de l'image vers le fichier URL
        do {
            try imageData.write(to: fileUrl, options: .atomic)
        } catch {
            // erreur lors de l'écriture de l'image
            return
        }

        // créer une nouvelle instance d'un UIDocumentInteractionController (une instance par fichier)
        let documentController = UIDocumentInteractionController(url: fileUrl)
        documentController.delegate = self
        // donné par Instagram
        documentController.uti = "com.instagram.photo"

        // ouvrir la view pour l'intéraction avec le document afin de partager dans le Feed Instagram
        documentController.presentOpenInMenu(from: self.view.frame, in: self.view, animated: true)
    } else {
        // L'application Instagram n'est pas installée ou ne peut pas être démarrée, afficher une alerte
    }
}

Comme vous pouvez le voir, cela réutilise les deux concepts dont nous avons parlé ci-dessus, les schémas d'URL personnalisés et l'API d'interaction de documents.

Le partage sur les Stories Instagram est encore plus simple. Nous utiliserons un UIPasteboard qui est un simple objet pour partager des données avec une autre application.

func shareToInstagramStories(image: UIImage) {
    // NOTE: pour les Stories le schéma est instagram-stories, ajoutez-le dans votre fichier Info.plist!
    guard let instagramUrl = URL(string: "instagram-stories://share") else {
        return
    }

    if UIApplication.shared.canOpenURL(instagramUrl) {
        let pasterboardItems = [["com.instagram.sharedSticker.backgroundImage": image as Any]]
        UIPasteboard.general.setItems(pasterboardItems)
        UIApplication.shared.open(instagramUrl)
    } else {
        // L'application Instagram n'est pas installée ou ne peut pas être démarrée, afficher une alerte
    }
}

Et … c'est tout ! Cela ouvre l'écran de personnalisation pour les Stories Instagram avec votre image passée en tant que paramètre! L'utilisateur peut ajouter plus d'autocollants, de texte, d'animations, etc. au-dessus de votre image d'arrière-plan.

J'espère que ce post vous a été utile. :)

Références

tweet Share