Реализация Instagram NSURL с быстрым

У меня есть приложение для редактирования фотографий в 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 ошибок и никакого способа визуального восстановления

Не используйте NSURL. Используйте URL.

rmaddy 10.04.2019 02:10

Это прямо с их страницы, я предполагаю, что это означает обычай. У вас есть пример, который будет работать только с URL-адресом?

Trenton Austin 10.04.2019 02:32

Чья страница? NSURL — это Swift 2 и Objective-C. Начиная со Swift 3 вы используете URL, а не NSURL. Но это все не имеет отношения к вашему вопросу. Я просто указываю на это.

rmaddy 10.04.2019 02:33

При редактировании по ошибке удалил ссылку, моя ошибка. instagram.com/developer/mobile-sharing/iphone-хуки

Trenton Austin 10.04.2019 02:36

Упс. Это код Objective-C, который вы скопировали в свой вопрос из документации. Сначала я упустил эту деталь.

rmaddy 10.04.2019 02:44

Итак, как бы я написал это в Swift или как бы я сделал это через obj-c? Видео, которые у них есть на эту тему, около 5 лет, и я все еще довольно новичок в Swift, поэтому моего понимания очевидной структуры функций еще нет. Я просто не понимаю, как инициировать и внешний вид с локальным URL-адресом

Trenton Austin 10.04.2019 02:52
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
293
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы просто ищете 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?

Trenton Austin 10.04.2019 03:01

Приведенный выше код предназначен для открытия страницы в приложении Instagram, вы не можете использовать его для обмена. Я обновлю свой ответ о том, как вы можете поделиться.

RomuloVitoi 10.04.2019 03:06

Отлично, тогда для этого потребуется, чтобы мой «yourIgoFile» был URL-адресом того, где он хранится в Интернете?

Trenton Austin 10.04.2019 03:19

Нет, вы не можете использовать удаленные URL-адреса в UIDocumentInteractionController, yourIgoFile будет файлом изображения, который вы сохранили локально в телефоне.

RomuloVitoi 10.04.2019 03:21

У меня в активе есть фото "test.igo". Кажется, меня не понимают, просто пишу в test.igo или test. Итак, я предполагаю, что мне нужно установить его в каком-то аспекте, как мне присвоить моей тестовой фотографии значение для прохождения?

Trenton Austin 10.04.2019 03:27

Он ожидает тип URL, если он есть в ваших активах, то это будет Bundle.main.url(forResource: "test", withExtension: "igo")

RomuloVitoi 10.04.2019 03:33

Не могли бы вы обновить свой главный комментарий с этой информацией? теперь он запрашивает разделители, и я думаю, что просто ввел их неправильно. Я заменил "url: yourIgoFile" фрагментом, который вы только что предоставили.

Trenton Austin 10.04.2019 03:43

"url:" является частью сигнатуры метода, я ее обновлю

RomuloVitoi 10.04.2019 03:48

Он хочет развернуть или принудительно прервать его в каком-то аспекте. Я получаю несколько ошибок в строке «let documentController». Это то, что мне нужно также установить в моем plist? это дает мне "Значение необязательного типа" URL? должны быть развернуты в значение типа «URL» и объединены с использованием «??» для предоставления значения по умолчанию, когда необязательное значение содержит «nil» и «Force-unwrap using '!' прервать выполнение, если необязательное значение содержит «ноль» —

Trenton Austin 10.04.2019 04:38

Если вы уверены, что файл существует, вы можете принудительно развернуть его с помощью !

RomuloVitoi 10.04.2019 04:48

Другие вопросы по теме