Как открыть приложение YouTube с идентификатором YouTube по нажатию кнопки в iOS
Я создаю приложение, в котором у меня будет UIButton
названный Watch Video
при нажатии на кнопку должно быть открыто приложение / веб-сайт YouTube с соответствующим идентификатором YouTube.
Я видел код для вставки видео YouTube в iOS, но я не нашел ничего подобного. Любые идеи будут действительно полезны.
5 ответов
Таким образом, вы сначала проверяете, установлено ли приложение YouTube на устройстве, затем открываете приложение или оно переходит в Safari.
let youtubeId = "SxTYjptEzZs"
var youtubeUrl = NSURL(string:"youtube://\(youtubeId)")!
if UIApplication.sharedApplication().canOpenURL(url){
UIApplication.sharedApplication().openURL(url)
} else{
youtubeUrl = NSURL(string:"https://www.youtube.com/watch?v=\(youtubeId)")!
UIApplication.sharedApplication().openURL(url)
}
ОбновлениеSwift 4 (со снятой принудительной разверткой):
func playInYoutube(youtubeId: String) {
if let youtubeURL = URL(string: "youtube://\(youtubeId)"),
UIApplication.shared.canOpenURL(youtubeURL) {
// redirect to app
UIApplication.shared.open(youtubeURL, options: [:], completionHandler: nil)
} else if let youtubeURL = URL(string: "https://www.youtube.com/watch?v=\(youtubeId)") {
// redirect through safari
UIApplication.shared.open(youtubeURL, options: [:], completionHandler: nil)
}
}
Не забудьте добавить youtube
схема к LSApplicationQueriesSchemes
в Info.plist
(иначе canOpenURL
всегда подведет)
<key>LSApplicationQueriesSchemes</key>
<array>
<string>youtube</string>
</array>
Примечание:
Если пользователь включил приложение Safari для открытия приложения Youtube раньше, вам не нужно проходить через youtube://
Схема и второй URL тоже откроет приложение Youtube. Однако вы не можете это контролировать, и если пользователь отказался от Safari, чтобы открыть Youtube, то вам все равно придется попробовать эту схему напрямую - поэтому я считаю, что лучше использовать решение, которое я изложил выше, с обеими условными ветками.
При нажатии кнопки события напишите этот код
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.youtube.com/watch?v=videoId"]];
Это откроет видео в приложении YouTube, если оно присутствует, иначе оно приведет пользователя на сайт.
В быстром
UIApplication.sharedApplication().openURL(NSURL(string:"http://www.youtube.com/watch?v=videoId")!)
На самом деле, вам не нужна схема YouTube. Он работает, как и ожидалось, если вы знаете, как переключаться между двумя различными режимами поведения пользователя! iOS 10 позволяет пользователю выбирать. Если приложение звонит openURL()
с URL YouTube система использует последнее выбранное поведение.
Пользователь может решить использовать приложение YouTube, нажав "Открыть" справа от верхнего баннера с надписью "Открыть в приложении" (или около того) - приложение откроется, и iOS запомнит этот параметр. С другой стороны, если приложение открывается автоматически, справа от строки состояния появляется крошечная ссылка (да, я на самом деле имею в виду строку состояния!) С надписью "youtube.com >" (также с этим шевроном). Нажав на эту ссылку, вы решите открыть URL-адреса YouTube в Safari в будущем.
Другими словами, если пользователь решил открыть URL-адреса YouTube в Safari, у вас нет шансов открыть приложение YouTube программно на iOS 10.
Вы можете использовать URLSchemes для этой цели. Нам нужен URLSchemeIdentifier приложения YouTube. URLSchemeIdentifier YouTube является youtube://
, Для приложений по умолчанию вы можете легко получить URLSchemeIdentifiers, выполнив поиск в Интернете.
Теперь используйте приведенный ниже код в действии кнопки, чтобы открыть приложение YouTube.
let url = NSURL(string:"youtube://AnyParameterYouWant")!
if UIApplication.sharedApplication().canOpenURL(url){
UIApplication.sharedApplication().openURL(url)
} else{
youtubeUrl = NSURL(string:"https://www.youtube.com/watch?v=ID")!
UIApplication.sharedApplication().openURL(url)
}
Примечание. Обратите внимание, что canOpenURL выдаст значение false, если вы не внесете белый список в схему URL. Исключение только для распространенных приложений.