VocĂŞ pode discutir por um longo perĂodo sobre se vale a pena dar Ă s crianças pequenas acesso a tablets e smartphones. AlguĂ©m diz que Ă© prejudicial aos olhos ou Ă psique, alguĂ©m - os pais brincarem e lerem com os filhos, e nĂŁo tentar cercá-los com aparelhos. O que Ă© caracterĂstico, na maioria das vezes isso Ă© dito por pessoas que nĂŁo tĂŞm seus prĂłprios filhos. E eles nĂŁo sabem que felicidade Ă© essa: quando a criança fica em silĂŞncio por pelo menos meia hora, deixa de arruinar tudo ao seu redor, deita calmamente no sofá e assiste desenhos animados. Há mais um argumento: as crianças repetem sensivelmente tudo depois dos pais; se os pais estĂŁo constantemente sentados com as mĂŁos no telefone, Ă© muito difĂcil explicar Ă s crianças por que os pais podem ou nĂŁo.

Em geral, você pode me jogar tomates podres, mas meu filho, que agora está sem dois dias por três anos, ocasionalmente fica com um tablet no sofá e assiste desenhos animados no YouTube.
Infelizmente, rapidamente percebi que o YouTube infantil Ă© apenas um lixo infernal. Sobre isso, mesmo em HabrĂ©, já havia uma tradução do artigo . Os canais infantis sĂŁo algum tipo de fossas sem fundo cheias de vĂdeos vyrviglaznymi como "implantar cem surpresas", "rimas estĂşpidas com gráficos 3D miseráveis ​​com mĂşsica barulhenta" e "dirigir carros no Beam NG para comentários estĂşpidos". Por alguma razĂŁo, tudo isso Ă© muito atraente para crianças pequenas que se apressam a clicar nesses vĂdeos assim que os veem nos vĂdeos recomendados. E o YouTube nĂŁo permite que vocĂŞ gerencie recomendações. Mesmo dando ao meu filho um tablet com os desenhos "normais" ativados, depois de alguns minutos, vejo como ele encontra esses malditos ovos de chocolate novamente em dois cliques nas recomendações e começa a grudá-los novamente.
Isso Ă© o suficiente para mim, eu decidi. E ele começou a ver seu aplicativo para assistir ao YouTube, permitindo selecionar uma lista de canais e mostrar apenas vĂdeos desses canais. Como eu fiz isso - sob o corte.
Aqui está um exemplo de um vĂdeo thrash com o qual lutaremos. Shitty fez animação 3D sem sentido para mĂşsica estĂşpida - e 142 milhões de visualizações. Por alguma razĂŁo, esses vĂdeos de crianças sĂŁo simplesmente zumbificados; eles estĂŁo prontos para revisá-los e revisá-los.
Para comparação, o vĂdeo mais legal em que Chris Hadfield canta em uma guitarra na ISS tem apenas 40 milhões de visualizações, e o maravilhoso clipe OK GO com gravidade zero real (sem cabos e chromakey, apenas gravidade zero honesta a bordo de um aviĂŁo especial) - apenas 12 milhões, dez vezes menos.
A propĂłsito, os anunciantes do YouTube nĂŁo estĂŁo felizes com a popularidade dos canais infantis , pois exibir anĂşncios neles Ă© um desperdĂcio de orçamento. As crianças assistem a anĂşncios, Ă s vezes atĂ© clicam, mas nĂŁo compram nada, e milhões de visualizações gastam rapidamente o orçamento.
Declaração do problema
Devo dizer imediatamente que nĂŁo estabeleci a tarefa de fazer uma aplicação impenetrável para crianças. Tais tentativas já existem, inclusive aqui no hub - tudo Ă© cortado ali seguidas, para que a criança nĂŁo possa sair do aplicativo, comprar algo, abrir um navegador etc. Existem opções com bloqueios de hardware, portas desativadas, shells personalizados do Android e outras dificuldades (por exemplo, aqui está um artigo para 2012, o projeto parece ainda estar vivo). Mas tudo isso faz sentido para crianças mais velhas que já estĂŁo explorando as possibilidades de seus gadgets. Para crianças de 2 a 3 anos de idade, nenhuma proteção especial Ă© necessária, eles ficam felizes em assistir a vĂdeos e, de tempos em tempos, aparecem nas visualizações de outros vĂdeos. O principal Ă© que esses vĂdeos sejam o que vocĂŞ precisa, e nĂŁo o que o YouTube oferecerá (e ele oferecerá infinitos ovos de chocolate e dedos de bebĂŞ).
Disto veio a lista de requisitos:
- Lista de canais personalizados
- Protegendo-o de mudanças (antes, de acidentais, porque filhos adultos astutos já têm várias maneiras de identificar as senhas de seus pais)
- O aplicativo em si Ă© semelhante ao YouTube, reproduz vĂdeo Ă esquerda, Ă direita há uma coluna de visualizações nas quais vocĂŞ pode clicar
- O principal caso de uso Ă© o exame aleatĂłrio do vĂdeo, a criança, em geral, nĂŁo se importa com o que assistir
Ao mesmo tempo, o aplicativo consiste em duas partes principais: pesquisar e configurar canais usando a API de dados do YouTube e depois reproduzir o vĂdeo. AlĂ©m disso, no momento, encontrei duas opções para reproduzir vĂdeo em meu prĂłprio aplicativo:
API do player do YouTube para Android
https://developers.google.com/youtube/android/player/
Esta Ă© a maneira oficial de reproduzir vĂdeos em seu aplicativo Android. Para que ele funcione no dispositivo do usuário, o aplicativo oficial do YouTube já deve estar instalado, o que em sua composição inclui um determinado serviço que pode ser usado em outros aplicativos. Portanto, essa API do Player Ă© uma pequena biblioteca que interage com um aplicativo instalado separadamente.
No começo, eu o usei, mas depois de algum tempo de uso, descobriu-se que ele tinha um problema crĂtico. VocĂŞ nĂŁo pode realmente personalizar a aparĂŞncia do jogador, em particular, controlar os botões (vocĂŞ pode ocultar a coisa toda, mas tambĂ©m perderá o botĂŁo do modo de tela cheia). E no painel de controle do player, há um botĂŁo "ir para exibição no YouTube" que abre o aplicativo oficial (que deve estar no dispositivo), no qual nĂŁo há mais filtragem. E as crianças clicam com facilidade (por acidente ou nĂŁo), acessam o aplicativo nĂŁo filtrado e, depois de alguns minutos, já ouço “dedo do bebĂŞ, dedo do bebĂŞ onde está você” novamente e vejo algum tipo de trianyanimação nos olhos retorcidos na tela.
Um pouco mais de lixo que as crianças encontram em alguns cliques. Mais de 900 milhões de visualizações!
Portanto, recusei o jogador oficial, encontrando-o como substituto na forma da seguinte biblioteca.
Android YouTube Player
https://github.com/PierfrancescoSoffritti/android-youtube-player
A biblioteca parece ser um invĂłlucro em torno do WebView que controla o web player por meio de sua API JavaScript. Dos benefĂcios - a capacidade de personalizar totalmente a interface.
A inicialização do player é um pouco óbvia, especialmente depois de mudar da biblioteca oficial:
- Obtenha nossa visĂŁo da classe com.pierfrancescosoffritti.androidyoutubeplayer.player.YouTubePlayerView
- Ligue para ela initialize (), passando o ouvinte
- O método onInitSuccess (@Nonnull final YouTubePlayer youTubePlayer) é chamado no ouvinte, que recebe uma instância do objeto player. Esta é a única maneira de obtê-lo. Até esse momento, o processo de inicialização era idêntico ao do cliente oficial
- Chamamos o método addListener () no player, passando outro ouvinte para ele (mais ouvintes ao deus do ouvinte!)
- O mĂ©todo onReady () Ă© chamado neste ouvinte - somente apĂłs esse momento vocĂŞ pode baixar e exibir o vĂdeo e usar o player. Se vocĂŞ tentar carregar algo por engano no onInitSuccess, a biblioteca começará a gerar erros estranhos.
Você pode controlar o ciclo de vida do player (interromper a reprodução na onPause () e tudo mais) manualmente, ou pode registrar nossa visualização como um Lifecycle Observer (para o qual nossa atividade deve ser herdada do AppCompatActivity). Nesse caso, a biblioteca assumirá toda a rotina.
Outra nuance estranha da biblioteca Ă© a falta de suporte de tela cheia pronto para uso. Por padrĂŁo, há um botĂŁo no player, mas ele nĂŁo faz nada. Na verdade, vocĂŞ precisa fazer o modo de tela cheia manualmente - ocultar o cara, maximizar a janela do player para tela cheia e restaurar tudo de volta. Isso pode ser bastante trivial se vocĂŞ tiver algum tipo de interface complicada em torno do player. Eu sĂł tinha uma lista de vĂdeos lá, que Ă© facilmente oculta manualmente.
Nas amostras da biblioteca, há uma classe FullScreenHelper, da qual você pode obter o código desejado. Seu uso é mais ou menos assim:
youTubePlayerView.addFullScreenListener(new YouTubePlayerFullScreenListener() {
private final View rootLayout = findViewById(R.id.rootLayout);
@Override
public void onYouTubePlayerEnterFullScreen() {
fullScreenHelper.enterFullScreen();
rootLayout.setPadding(0, 0, 0, 0);
}
@Override
public void onYouTubePlayerExitFullScreen() {
fullScreenHelper.exitFullScreen();
rootLayout.setPadding(8, 8, 8, 8);
youTubePlayerView.getLayoutParams().height = LinearLayout.LayoutParams.MATCH_PARENT;
}
});
FullScreenHelper . ( , ) - , .
- , — . " YouTube", :
youTubePlayerView.getPlayerUIController().showFullscreenButton(true);
youTubePlayerView.getPlayerUIController().showYouTubeButton(false);
, , View .. — .
youTubePlayer.loadVideo(url, startTime);
, YouTube Data API
URL - . YouTube API, . Developer Console .
: . - , "Peppa Pig". id ( id) snippet : , -, .
YouTube.Search.List searchListByKeywordRequest = youTube.search().list("snippet,id");
searchListByKeywordRequest.setMaxResults(10L);
searchListByKeywordRequest.setQ("Peppa Pig");
searchListByKeywordRequest.setType("channel,playlist");
searchListByKeywordRequest.setKey("<api key>");
SearchListResponse response = searchListByKeywordRequest.execute();
( snippet id) . YouTube API : , . - ( , ), . , . .. 5 ( 2 sinppet id). , 6 , 13. 10 , 21 . , .
:
YouTube.Search.List request = youTube.search().list("snippet,id");
request.setChannelId("<channel id>");
request.setType("video");
request.setMaxResults(50L);
request.setKey("<api key>");
SearchListResponse response = request.execute();
, , nextPageToken, — , .
if (response.getNextPageToken() != null) {
request.setPageToken(response.getNextPageToken());
response = request.execute();
}
API , , ..
, , . , Google Play . :
- . . " " ("" " "), - .
- — . , " ", , .
- . , , — .
- . " ", , .
- .
- Pinned Mode — , .
- — https://play.google.com/store/apps/details?id=ru.sundogs.youtubekiosk , — . — . , , .
, , , - ( ), . — , . .
UPD: , . — , . Play Market ""
UPD2: , . , , .
UPD3: , : https://channelwhitelist.tilda.ws. , !