iOS 13 Instagramのみの写真共有が機能しない


8

iOS 12.4までは、Instagramフィードへの写真共有の実装(ドキュメントに従って)は適切に機能しましたが、iOS 13以降は機能しません。

現在の実装では- UIDocumentInteractionControllerのUTIはに設定され"com.instagram.exclusivegram"、ファイル拡張子は.igo-に設定されています。Instagramの共有オプションはまったく表示されません。ファイル拡張子をに変更する.igと、候補の中にInstagram共有オプションが表示されます。この方法でフィードを共有すると機能しますが、これは期待されるInstagramのみのソリューションではありません。

UTIをに設定し"com.instagram.photo"ても何も変わりません。

予想される動作は、追加の手順を実行せずに、「共有」ボタンを押したときに下に表示されるビューを表示することです。それはInstagramのバグでしょうか、それともiOS 13に実装する他の方法がありますか?

ここに画像の説明を入力してください


FWIW、私はまったく同じ問題と戦っています。iOSの11、12、13を実行しているデバイスに119.0バージョンのInstagramがインストールされていますが、問題はiOS 13を実行しているデバイスでのみ発生します。 Instagramアプリに。
Dave L

回答:


4

画像をフォトライブラリに追加してから、その画像をInstagramに直接共有する必要があります

まず最初に、NSPhotoLibraryAddUsageDescriptionとInstagramスキームをinfo.plistに追加することを忘れないでください。

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

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

12.4および13 iOSで正しく動作します

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") }
    }
}
}

結果 ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.