앞선 포스팅에 이어서 작성된다.
앞선 블로그(https://wlgusdn700.tistory.com/28) 에 가면 iOS에서 화면 캡처하는 것을 알 수 있고 그 캡처된 이미지를 UIImage로 불러올 수 있다.
나는 이 캡처된 UIImage를 인스타 스토리에 공유할 것이다!
당연히 카카오/구글/페북 developer 사이트에 방법은 나와있다!
developers.facebook.com/docs/instagram/sharing-to-stories 이곳에 가면 있다.
근데 왜 적냐? 코드가 Objective-C 다.... 안드로이드는 java -> kotlin 이 사실상 문법이 비슷비슷해서 이해할 수 있겠는데...
Ob-C를 내가 어떻게 아냐고....ㅜ
사실 Ob-C를 볼줄이라도 아는 사람들은 곧바로 Swift로 변환이 가능할 것이다. 나도 Objective-C 문법 블로그를 찾아 보면서 변환했다.
func backgroundImage(backgroundImage: UIImage) {
if let urlScheme = URL(string: "instagram-stories://share") {
if UIApplication.shared.canOpenURL(urlScheme) {
let pasteboardItems = [["com.instagram.sharedSticker.stickerImage": backgroundImage.pngData(),
"com.instagram.sharedSticker.backgroundImage": backgroundImage.pngData()]]
let pasteboardOptions = [UIPasteboard.OptionsKey.expirationDate: Date().addingTimeInterval(60 * 5)]
UIPasteboard.general.setItems(pasteboardItems, options: pasteboardOptions)
UIApplication.shared.open(urlScheme as URL, options: [:], completionHandler: nil)
} else {
print("인스타 앱이 깔려있지 않습니다.")
}
}
}
코드는 굉장히 간단하다
url로 인스타 앱 중 스토리로 공유하는 화면?을 열것이다.
우선 해당 url을 iOS App에서 열수 있는지 확인을 한다. 인스타 앱이 안깔려있어도 못 여는 것 같다.
pasteboardItems 에는 좀 요상한 자료구조가 담긴다. Array(Dictionary) 이런 형태다.
그리고 문자열에서 유추할 수 있듯, sticker와 background가 있는데, 말그래도 배경과 스티커라고 생각하면 된다.
pasteboardOptions 등 외의 코드는 는 이번주내로 다시 알아볼 것이다.
중요한 점!
Instagram의 맞춤 URL 스키마를 허용 리스트에 등록
앱에서 Instagram의 맞춤 URL 스키마를 사용하려면 허용 리스트에 추가해야 합니다. 이를 위해서는 앱의 Info.plist에 있는 LSApplicationQueriesSchemes 키에 instagram-stories를 추가합니다.
라고 Facebook Developer 에 적혀있다. 따라하면 된다.
Info.plist 에 들어가서 LSApplicationQueriesSchemes를 추가하고 해당 value에 "instagram-stories"를 넣으면 된다.
** value는 Array형태로 넣어야한다
안드로이드에서는 manifest에 Internet만 허용해주면 대부분의 url에는 접근이 가능했던 것 같은데, iOS는 따로따로 지정해줘야하나보다... 확실히 apple이 보안/정보 측면에서 강도 높게 설정하고 유지하고 있다고 다시 생각하게 되었다.
'iOS > SwiftUI' 카테고리의 다른 글
[iOS] SwiftUI 에서 Screen Capture 후 Share (2) | 2021.01.13 |
---|