iOS로 인스타그램에 어플 사진을 공유하다가 반했어요.
동작 환경, Xcode9.3+Swift4.1+iOS 11
URL 스키마를 사용하여 공유하는 방법
공식 페이지에 쓰여 있지 않습니다.그러나 레이아웃이라는 앱에서는 앱 내에서 가공한 사진을 선택해 인스타그램 투고 화면을 열 수 있어 숨겨진 것일 수 있다.
API를 사용하여 직접 투고하는 방법
기고문 API 없음
UIACtivity ViewController를 사용하여 공유하는 방법
간단해도 되지만 인스타그램 앱은 시작하지 않고 직접 자신의 앱에서 투고하는 형식이다.이용자들이 보기에 인스타그램 애플리케이션의 사진 가공은 사용할 수 없어 불편할 수 있다는 것이다.
@IBAction private func didTapShare() {
do {
// UIImageをactivityItemsにわたす
let activityViewController = UIActivityViewController(activityItems: [self.image], applicationActivities: nil)
present(activityViewController, animated: true)
} catch let error {
print(error)
}
}
표시된 공유 테이블인스타그램을 선택하면 자신의 앱에 투고 화면이 나온다.
U I D oc u ment Interaction Controller를 사용하여 공유하는 방법
이 방법은 정식 문서에도 기재되어 있다.설명에는 인스타그램 애플리케이션이 선택 대상이라고만 적혀 있었지만 실제로는 그렇지 않았다...과거에는 그랬을 수 있지만 iOS 11은 그렇지 않았다.또 몇 가지 반한 점이 있다.
@IBAction private func didTapShare() {
do {
// UIImageをDataに変換
guard let imageData = UIImageJPEGRepresentation(image, 1.0) else {
return
}
// テンポラリファイルとして保存。拡張子はigoにする
let imageURL = URL(fileURLWithPath: (NSTemporaryDirectory() as NSString).appendingPathComponent("image.igo"))
try imageData.write(to: imageURL, options: .atomicWrite)
// 必ずメンバ変数として保持すること。ローカル変数だと意図しないタイミングで破棄される
// 保存した画像ファイルのURLを渡す
self.documentInteractionController = UIDocumentInteractionController(url: imageURL)
self.documentInteractionController!.uti = "com.instagram.exclusivegram"
// shareButtonは押したボタン(UIBarButtonItem)
self.documentInteractionController!.presentOpenInMenu(from: shareButton, animated: true)
// よくこの方法が見られるけど、たいていはBarButtonItemから起動するのでは?iPadでは、ここきちんとやらないと変なとこからポップアップするので注意
// self.documentInteractionController!.presentOpenInMenu(from: self.view.bounds, in: self.view, animated: true)
} catch let error {
print(error)
}
}
객체를 구성원 변수로 저장하지 않으면 무의식중에 버려집니다.순식간에 시장 점유율이 나와 곧 닫혔다.오류 로그에 Invalid Operation 등이 표시됩니다.그리고 실제로 열린 공유표.
차트에 인스타그램만 있는 게 아니죠... 다른 앱도 igo 확장자에 맞나요?
다만 아까 UIACtivity Controller와 달리'인스타그램'이 아닌'인스타그램으로 복사'로, 선택하면 인스타그램이 시작되고 사진이 선택된 상태에서 투고 화면이 열린다.이렇게 하면 매우 편리하지만 공유표에서 선택할 수 있는 응용 소프트웨어가 제한되어 사용자가 보기에 매우 불편할 수 있다.트위터가 없네요. 역시... 슬랙과 클라스가 다 나왔네요.
따라서 다음과 같이 파일 확장자 및 UTI 지정을 변경합니다.
// 拡張子をjpg
let imageURL = URL(fileURLWithPath: (NSTemporaryDirectory() as NSString).appendingPathComponent("image.jpg"))
// utiをpublic.jpeg
documentInteractionController!.uti = "public.jpeg"
이 경우 표시된 공유 테이블은 다음과 같습니다.트위터도 있어요.그리고 인스타그램과 인스타그램에 복제된 콘텐츠를 표시한다.사용자 입장에서는 혼란이 생길 수 있지만 개인적으로는 이것이 가장 좋다고 생각한다.
인스타그램 공식 문서에는 이렇게 적혀 있지만 위와 같은 상황은 공유표에 표시된 애플리케이션, 인스타그램으로 복사를 선택했을 때의 행동과 다를 바 없다.서류 준비할 때랑 다르죠?
// 拡張子をig
let imageURL = URL(fileURLWithPath: (NSTemporaryDirectory() as NSString).appendingPathComponent("image.ig"))
// utiをcom.instagram.photo
documentInteractionController!.uti = "com.instagram.photo"
Reference
이 문제에 관하여(iOS로 인스타그램에 어플 사진을 공유하다가 반했어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/roba4coding/items/f4291b5d3a9fb6a58f78텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)