Вызов open (_: options: завершениюHandler :) на URL с префиксом «podcast: //» приводит к тому, что приложение iOS Podcasts добавляет «http: //» к исходному URL - PullRequest
2 голосов
/ 12 января 2020

Context

Я работаю над приложением Swift iOS в Xcode (iOS 13 и Xcode 11.3).

Цель

По сути, изнутри мое приложение, я хочу иметь возможность открыть URL-адрес частного канала подкастов в приложении iOS Podcasts (чтобы добавить его в качестве новой подписки).

Что я делаю

My понимание состоит в том, что это можно сделать, используя метод open (_: options: завершениеHandler:) , определенный для класса UIApplication, и предварительно исправив мой URL с помощью podcast://. Вот пример:

// My URL
let url = URL(string: "podcast://https://username:password@example.com/private-podcast-feed")!

// From inside a `UIViewController` method...
UIApplication.shared.open(url, options: [:]) { (success: Bool) in
   // ... handle the result
}

Проблема

Приведенный выше код открывает приложение iOS Podcasts и вызывает окно оповещения Add a Show by URL... с предварительно заполненным вводом, но оригиналом URL теперь имеет префикс http://; то есть http://https://username:password@example.com/private-podcast-feed (см. прикрепленный снимок экрана внизу для примера).

С точки зрения "взаимодействия с пользователем", это поведение ужасно, так как большинство людей не заметят, и операция не удастся.

Потенциальным способом решения этой проблемы было бы пропустить протокол https:// в моем приложении и использовать предварительно заполненный http:// и иметь на своем сервере 301 Redirect (я не пробовал его видеть хотя Podcasts следует перенаправлениям), но это не очень хорошо для моего варианта использования, так как мой URL содержит учетные данные.

Мой вопрос

Кто-нибудь знает об этом?

enter image description here

1 Ответ

0 голосов
/ 20 января 2020

Оказывается, я не использовал правильный синтаксис при определении моего URL экземпляра в моем приложении. Вместо использования podcast://https... я должен был бы использовать podcast:https..., без двух косых черт .

Итак, вот рабочий пример (т.е. пример, который откроет приложение Podcasts и не предваряйте http к уже существующей схеме https):

// My URL
let url = URL(string: "podcast:https://username:password@example.com/private-podcast-feed")!

// From inside a `UIViewController` method...
UIApplication.shared.open(url, options: [:]) { (success: Bool) in
   // ... handle the result
}

Что меня изначально смутило, так это то, что при создании гиперссылки для открытия гиперссылки требуется синтаксис "double forward sla sh" приложением, использующим схемы URL в iOS. Например, если я делюсь ссылкой внутри письма, мне нужно указать podcast://{my-url}. Но если я хочу открыть приложение с использованием одной из его схем URL изнутри и другого приложения, то мне нужно исключить эти две косые черты, иначе команда может запутать целевое приложение (примечание: у меня нет документации для этого, но это то, что я наблюдал для этого конкретного сценария).

Я действительно просто наткнулся на ответ, работая над противоположной проблемой: я пытался определить свои собственные схемы URL для одного из моих приложений iOS, и я говорю синтаксис, используемый в документации (см. Определение пользовательской схемы URL для вашего приложения ).

...