У меня есть приложение для редактирования фотографий в Swift, которому нужна возможность напрямую делиться с Instagram.
Instagram дает ссылку на хуки iphone здесь, но реализация оказалась сложной
В идеале класс страниц имеет кнопку, которая должна отправлять изображение, сохраненное как pic.igo (.igo гарантирует только instagram), и направляет пользователя прямо на его страницу публикации в instagram с уже выбранным «pic.igo».
Вот что дает вам хуки, и я не могу найти какие-либо современные варианты использования. Полная страница по ссылке ниже
NSURL *instagramURL = [NSURL URLWithString:@"instagram://location?id=1"];
if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) {
[[UIApplication sharedApplication] openURL:instagramURL];
}
Итак, как мне поместить это в эту функцию
@IBAction func Button(_ sender: Any) {
}
Документация по хукам для айфона
https://www.instagram.com/developer/mobile-sharing/iphone-hooks/
Примечания - проверка, установлено ли приложение уже, может помочь, но мне просто нужно найти способ заставить эту функцию работать, а остальное я, возможно, нащупаю.
"media?id=MEDIA_ID" из документации Я предполагаю, что это заменяет часть местоположения в их данном фрагменте, но тогда как я могу получить изображение, которое будет назначено MEDIA_ID
вырезание и вставка оставляет мне около 80 ошибок и никакого способа визуального восстановления
Это прямо с их страницы, я предполагаю, что это означает обычай. У вас есть пример, который будет работать только с URL-адресом?
Чья страница? NSURL
— это Swift 2 и Objective-C. Начиная со Swift 3 вы используете URL
, а не NSURL
. Но это все не имеет отношения к вашему вопросу. Я просто указываю на это.
При редактировании по ошибке удалил ссылку, моя ошибка. instagram.com/developer/mobile-sharing/iphone-хуки
Упс. Это код Objective-C, который вы скопировали в свой вопрос из документации. Сначала я упустил эту деталь.
Итак, как бы я написал это в Swift или как бы я сделал это через obj-c? Видео, которые у них есть на эту тему, около 5 лет, и я все еще довольно новичок в Swift, поэтому моего понимания очевидной структуры функций еще нет. Я просто не понимаю, как инициировать и внешний вид с локальным URL-адресом
Если вы просто ищете Swift-перевод кода ObjC, который они предоставляют, вот результат:
@IBAction func Button(_ sender: Any) {
if let instagramURL = URL(string: "instagram://location?id=1"),
UIApplication.shared.canOpenURL(instagramURL) {
UIApplication.shared.open(instagramURL)
}
}
Если у вас возникли проблемы с преобразованием кода из ObjC, вы можете попробовать некоторые онлайн-конвертеры, вот несколько вариантов:
Но вышеперечисленное не для публикации в Instagram, если вы хотите поделиться, вот что вам нужно сделать:
guard let instagramURL = URL(string: "instagram://app"),
UIApplication.shared.canOpenURL(instagramURL) else {
print("Instagram app is not installed")
return
}
let yourIgoFile = Bundle.main.url(forResource: "test", withExtension: "igo")!
let documentController = UIDocumentInteractionController(url: yourIgoFile)
documentController.uti = "com.instagram.exclusivegram"
documentController.presentOpenInMenu(from: view.bounds, in: view, animated: true)
Сначала я даже не знал, что это в obj-c. Спасибо. Итак, в идеале «instagram://location?id=1» становится «instagram://media?id=MEDIA_ID», где я бы установил свое текущее изображение как MEDIA_ID?
Приведенный выше код предназначен для открытия страницы в приложении Instagram, вы не можете использовать его для обмена. Я обновлю свой ответ о том, как вы можете поделиться.
Отлично, тогда для этого потребуется, чтобы мой «yourIgoFile» был URL-адресом того, где он хранится в Интернете?
Нет, вы не можете использовать удаленные URL-адреса в UIDocumentInteractionController, yourIgoFile будет файлом изображения, который вы сохранили локально в телефоне.
У меня в активе есть фото "test.igo". Кажется, меня не понимают, просто пишу в test.igo или test. Итак, я предполагаю, что мне нужно установить его в каком-то аспекте, как мне присвоить моей тестовой фотографии значение для прохождения?
Он ожидает тип URL
, если он есть в ваших активах, то это будет Bundle.main.url(forResource: "test", withExtension: "igo")
Не могли бы вы обновить свой главный комментарий с этой информацией? теперь он запрашивает разделители, и я думаю, что просто ввел их неправильно. Я заменил "url: yourIgoFile" фрагментом, который вы только что предоставили.
"url:" является частью сигнатуры метода, я ее обновлю
Он хочет развернуть или принудительно прервать его в каком-то аспекте. Я получаю несколько ошибок в строке «let documentController». Это то, что мне нужно также установить в моем plist? это дает мне "Значение необязательного типа" URL? должны быть развернуты в значение типа «URL» и объединены с использованием «??» для предоставления значения по умолчанию, когда необязательное значение содержит «nil» и «Force-unwrap using '!' прервать выполнение, если необязательное значение содержит «ноль» —
Если вы уверены, что файл существует, вы можете принудительно развернуть его с помощью !
Не используйте
NSURL
. ИспользуйтеURL
.