[안드로이드]YouTube Player API를 사용하면 안되는 3가지이유

피알앤디컴퍼니

YouTube Player API는 공식 라이브러리임에도 불구하고 androidx를 사용하면 사용할 수 없습니다. PRND에서 만든 YouTubePlayerView를 사용하면 모든 것이 해결됩니다.

안드로이드 앱안에서 YouTube영상📺을 재생하고 싶을때 YouTube Player API를 사용합니다.

특히 YouTube를 재생하는 View와 다른 View들을 조합해서 사용하고 싶을때 많이 사용될 것입니다.

(헤이딜러 - 차량판매과정 안내 팝업)

YouTube Player API는 너무 오래되었습니다

이 YouTube Player API는 고인물입니다👴🏻

2015년 이후 업데이트 된적이 없습니다. (2016년이후는 코드보다는 약관이 변경된 것들)

실제 라이브러리 jar파일도 2015년 이후 건드린적도 없구요

그때만해도 YouTube가 이렇게 잘될지 몰랐다?

그땐 그랬다고 치더라도 지금에 와서는 좀 최신화 해줘야 하는거 아닐까요..?

YouTube Player API를 사용하면 안되는 이유

그럼에도 불구하고 앱에서 유튜브영상을 재생하려면 YouTube Player API를 사용해야 합니다. 그렇지 않으면 스토어에서 앱이 짤리기 때문입니다. (자기네꺼 사용안했다고 까임..)

하지만 YouTube Player API를 사용하면서 발생하는 문제점(혹은 불편함) 3가지가 있습니다.

1. Jar파일🙅🏼‍♂️

라이브러리를 사용하려면 무조건 Jar파일을 가져와서 사용해야 합니다. (시대가 어느 시대인데..)

물론 implementation xxxx 와 같이 사용하는 방법이 jar파일을 가져와서 사용하는 방법보다 무조건 좋다는것은 아닙니다.

하지만 버전관리나 여러가지 라이브러리를 활용함에 있어서 implementation xxxx 와 같이 사용하는 패턴이 익숙하고 편합니다.

이런 옛날 방식때문에 라이브러리를 관리하는데 어려움을 야기시킵니다.

2. Fragment 스타일 🤦🏼‍♂️

만약 YouTube Player를 다른 뷰와 함께 보여주고 싶다면 YouTubePlayerFragment 을 사용해야만 합니다.

(YouTube와 다른 View들이 함께 보여지는 팝업)

물론 Fragemnt를 사용하는게 문제는 아니지만 YouTubePlayerFragment 를 사용해서 실제 코드를 작성한다면 아래와 같은 코드로 작성되어야 합니다.

xml

코드

val youtubePlayerFragment = YouTubePlayerSupportFragment()
fragmentManager.beginTransaction()
    .replace(binding.youtubePlayerContainer.id, youtubePlayerFragment)
    .commitAllowingStateLoss()
youtubePlayerFragment.initialize(...)

xml코드에 Fragment를 넣어주기 위한 FrameLayout을 만들어야 하고 이 위치에 Fragment를 코드로 넣어주어야 합니다.

이 방법은 귀찮습니다.

실제로는 View라는 개념으로 YouTubePlayer를 사용하게 되지만 현실적으로는 그렇지 않은 코드패턴으로 사용해야 하는 불편함이 있습니다.

YouTubeBaseActivity을 써도 되지 않나요? 만약 YouTubePlayerFragment 를 사용하지 않고 구현하고 싶다면 Activity가 무조건 YouTubeBaseActivity 를 상속받아야 합니다. 하지만 대부분의 앱에서는 BaseActivity, LibraryActivity 등으로 자신들만의 공통 Activity를 구현해서 상속받아서 사용하고 있기 때문에 YouTubeBaseActivity 를 상속받는다는건 현실적으로 힘든 일입니다.

3. androidx 에서는 사용할 수 없음❌

위의 1,2번은 사실 문제는 아닙니다. 불편하지만 꾸역꾸역 쓰면 되긴합니다.

하지만 androidx를 사용한다면 이때부터는 문제가 커집니다. androidx 를 사용한다면 YouTubePlayerFragment를 사용할 수 없습니다.

androidx.fragment.app.FragmentManager 는 androidx.fragment.app.Fragment가 필요합니다. 하지만 YouTubePlayerFragment 는android.app.Fragment 입니다.

그러므로 androidx를 사용하는 프로젝트에서는 YouTubePlayerFragment를 사용할 수 없게 됩니다.

안드로이드 스튜디오에서 기본 프로젝트를 만들어도 androidx로 만들어지는 이 시국에 정말 문제가 아닐 수 없습니다.

그래서 요즘 StackOverFlow에는 이와 같은 이슈질문들이 끊임없이 올라오고 있습니다.

Youtube player support fragment no longer working on Android studio 3.2 (androidx)

YoutubeAndroidPlayerAPI error after migrating to AndroidX in Android Studio

그래서 저희는 YouTubePlayerView를 만들었습니다.

PRND컴퍼니에서 만든 YouTubePlayerView를 이용하면 YouTube Player API를 킹왕짱 쉽게 사용할 수 있습니다.🎉🎉

PRNDcompany/YouTubePlayerView Super easy Youtube Player View, not Fragment. Contribute to PRNDcompany/YouTubePlayerView development by creating an…github.com

원래 있었던 View인것마냥 xml에 선언만 해주시면 끝납니다. 물론 코드로도 실행할 수 있습니다. youTubePlayerView.play(VIDEO_ID)

YouTubePlayerView는 위에서 언급했던 3가지 문제(불편함)를 모두 해결하였습니다.

Jar파일방식이 아니며

Fragment가 아닌 View를 활용하여 심플하며

androidx 패키지에서도 문제없이 실행가능합니다.

기존에 YouTubeAPI를 사용하고 계신 프로젝트가 있다면 지금 바로 YouTubePlayerView를 사용해보세요

얼마나 획기적으로 코드량이 줄고 사용방법이 간편해졌는지 느끼실 수 있을겁니다.

라이브러리를 배포하고 관리하는것은 상당히 어렵고 귀찮은 일입니다.

하지만 대인배 Google형님들이라면 요즘 대세 YouTube를 잘 보여줄 수 있도록 공식 YouTubeAPI 라이브러리를 관리해주시길 기대합니다.

그날이 오기 전까지 YouTubeAPI는 저희 라이브러리가 담당하고 있겠습니다.🙋🏼‍♂️

저희와 함께 헤이딜러 서비스를 발전 시켜나가실 분들을 기다리고 있습니다. http://bit.ly/prnd-hiring 위의 채용링크로 많은 지원부탁드립니다.

감사합니다.

기업문화 엿볼 때, 더팀스

로그인

/