Mund të diskutohet për një kohë të gjatë nëse ia vlen t'u jepet fëmijëve të vegjël akses në tableta dhe telefona inteligjentë. Disa thonë se kjo është e dëmshme për sytë ose psikikën, të tjerë thonë se prindërit duhet të luajnë dhe të lexojnë vetë me fëmijët e tyre dhe të mos përpiqen të izolohen prej tyre me pajisje. Në mënyrë tipike, kjo thuhet më shpesh nga njerëz që nuk kanë fëmijë të tyre. Dhe kush nuk e di se çfarë lumturie është kur një fëmijë hesht për të paktën gjysmë ore, ndalon së shkatërruari gjithçka rreth tij, shtrihet i qetë në divan dhe shikon filma vizatimorë. Ekziston një argument tjetër - fëmijët përsërisin me kujdes gjithçka pas prindërve të tyre, nëse prindërit ulen vazhdimisht me kokën e varrosur në telefon, atëherë është shumë e vështirë t'u shpjegosh fëmijëve pse prindërit lejohen, por nuk lejohen.

Në përgjithësi, mund të më hedhësh domate të kalbura, por djali im, i cili tani është tre vjeç, herë pas here shtrihet me një tabletë në divan dhe shikon filma vizatimorë në YouTube.
Fatkeqësisht, kuptova shumë shpejt se YouTube për fëmijë është thjesht Plehra e Ferrit. Madje tashmë flitet për këtë në Habré. . Kanalet e fëmijëve janë një lloj grope pa fund të mbushura me video me sy të hapur si "zbërthimi i njëqind surprizave Kinder", "rima budallaqe me grafikë të dobët 3D të shoqëruara me muzikë të lartë" dhe "makina garash në Beam NG të shoqëruara nga komente budallaqe". Për disa arsye, e gjithë kjo është shumë tërheqëse për fëmijët e vegjël, të cilët nxitojnë të klikojnë video të tilla sapo i shohin në ato të rekomanduara. Dhe YouTube nuk ju lejon të menaxhoni rekomandimet. Edhe pasi i dhashë djalit tim një tabletë me filma vizatimorë “normalë” të ndezur, pas nja dy minutash shikoj sesi, me dy klikime mbi rekomandimet, ai gjen sërish ato vezët e mallkuar me çokollatë dhe fillon të ngecë përsëri në to.
Kaq, m'u ngop, vendosa. Dhe ai filloi të krijojë aplikacionin e tij për shikimin e YouTube, i cili ju lejon të zgjidhni një listë të kanaleve dhe të shfaqni vetëm video nga këto kanale. Si e bëra është nën prerje.
Këtu është një shembull i videove të mbeturinave që ne do të luftojmë. Një animacion 3D i bërë keq, i pakuptimtë me muzikë të trashë - dhe 142 milionë shikime. Për disa arsye, fëmijët thjesht zombohen nga video të tilla; ata janë gati t'i shikojnë ato përsëri dhe përsëri.

Për të krahasuar shkallët - ku Chris Hadfield këndon me kitarë në ISS ka vetëm 40 milionë shikime, dhe me papeshë të vërtetë (pa kabllo ose kromakey, vetëm pa peshë të sinqertë në bordin e një avioni special) - vetëm 12 milionë, dhjetë herë më pak.
Nga rruga, reklamuesit në YouTube , pasi shfaqja e reklamave në to është humbje buxheti. Fëmijët shikojnë reklama, ndonjëherë edhe klikojnë, por nuk blejnë asgjë dhe miliona shikime konsumojnë shpejt buxhetin.
Formulimi i problemit
Do të them menjëherë se nuk u nisa të bëja një aplikim që ishte i padepërtueshëm për fëmijët. Tashmë ka përpjekje të tilla, përfshirë këtu në Habré - ata prenë gjithçka me radhë në mënyrë që një fëmijë të mos mund të dalë nga aplikacioni, të blejë diçka, të hapë një shfletues, etj. Ekzistojnë gjithashtu opsione me bravë harduerike, porta me aftësi të kufizuara, predha të personalizuara Android dhe vështirësi të tjera (për shembull për vitin 2012, projekti duket se është ende gjallë). Por e gjithë kjo ka kuptim për fëmijët më të rritur që tashmë po eksplorojnë plotësisht aftësitë e veglave të tyre. Për fëmijët 2-3 vjeç, nuk nevojitet mbrojtje e veçantë; ata janë mjaft të kënaqur me shikimin e videove dhe duke u futur herë pas here në miniaturat e videove të tjera. Gjëja kryesore është që këto video duhet të jenë ato që u duhen, dhe jo ajo që do të ofrojë YouTube (dhe do të ofrojë pafund vezë çokollate dhe gishta bebesh).
Nga kjo lindi një listë e kërkesave:
- Lista e personalizueshme e kanaleve
- Duke e mbrojtur atë nga ndryshimet (më tepër nga ato aksidentale, pasi fëmijët e rritur dinakë tashmë kanë shumë mënyra për të gjetur fjalëkalimet e prindërve të tyre)
- Vetë aplikacioni është i ngjashëm me YouTube, një video luhet në të majtë, një kolonë me miniaturë në të djathtë që mund të klikoni.
- Rasti kryesor i përdorimit është goditja e rastësishme në një video; një fëmijë, në përgjithësi, nuk i intereson se çfarë saktësisht të shikojë
Në të njëjtën kohë, funksionimi i aplikacionit përbëhet nga dy pjesë kryesore: kërkimi dhe konfigurimi i kanaleve duke përdorur dhe më pas luani videon. Për më tepër, aktualisht kam gjetur dy opsione për të luajtur video brenda aplikacionit tim:
YouTube Android API-ja e lojtarit
Kjo është mënyra zyrtare për të luajtur video në aplikacionin tuaj Android. Që ai të funksionojë, aplikacioni zyrtar YouTube duhet të instalohet tashmë në pajisjen e përdoruesit, i cili përfshin një shërbim të caktuar që mund të përdoret nga aplikacione të tjera. Pra, pikërisht kjo API e Player është një bibliotekë e vogël që ndërvepron me një aplikacion të instaluar veçmas.
E kam përdorur në fillim, por pasi e kam përdorur për një kohë, doli se kishte një problem kritik. Në të, nuk mund të personalizoni vërtet pamjen e luajtësit, në veçanti, të kontrolloni butonat (mund ta fshehni vetëm të gjithë, por më pas do të humbni butonin e modalitetit të ekranit të plotë). Dhe në panelin e kontrollit të luajtësit ka një buton të keq "shkoni për të parë në YouTube", i cili hap aplikacionin zyrtar (i cili duhet të jetë në pajisje), në të cilin nuk ka më asnjë filtrim. Dhe fëmijët me lehtësi (rastësisht ose jo) klikojnë mbi të, shkojnë te aplikacioni i pafiltruar dhe pas disa minutash dëgjoj përsëri "gishti i vogël, gishti i vogël ku je" dhe shoh disa animacione plehrash që rrëmbejnë syrin në ekran.
Pak më shumë plehra që fëmijët gjejnë me disa klikime. Më shumë se 900 milionë shikime!

Prandaj, e braktisa lojtarin zyrtar, duke gjetur një zëvendësim për të në formën e bibliotekës së mëposhtme.
Android-Lojtari i YouTube-it
Biblioteka duket të jetë një mbështjellës rreth WebView që kontrollon luajtësin e uebit përmes API-së së tij JavaScript. Një nga avantazhet është aftësia për të personalizuar plotësisht ndërfaqen.
Inicializimi i lojtarit është pak i paqartë, veçanërisht pas kalimit nga biblioteka zyrtare:
- Ne marrim pikëpamjen tonë për klasën com.pierfrancescosoffritti.androidyoutubeplayer.player.YouTubePlayerView
- Ne e quajmë atë inicialize(), duke i kaluar dëgjuesit
- Dëgjuesi thërret metodën onInitSuccess(@Nonnull final YouTubePlayer youTubePlayer), e cila merr një shembull të objektit të luajtësit. Kjo është mënyra e vetme për ta marrë atë. Deri në këtë pikë, procesi i inicializimit ishte identik me atë të klientit zyrtar
- Ne e quajmë metodën addListener() në luajtës, duke i kaluar atij një dëgjues tjetër (më shumë dëgjues për zotin e dëgjuesve!)
- Ky dëgjues thërret metodën onReady() - vetëm pas këtij momenti mund të shkarkoni dhe shfaqni videon dhe të përdorni luajtësin. Nëse gabimisht provoni të ngarkoni diçka në onInitSuccess, biblioteka do të fillojë të nxjerrë gabime të çuditshme.
Ju mund ta menaxhoni ciklin e jetës së luajtësit (ndërprerja e riprodhimit në onPause() dhe gjëra të tilla) me dorë, ose mund ta regjistroni pamjen tonë si një vëzhgues i ciklit jetësor (për të cilin Aktiviteti ynë duhet të trashëgohet nga AppCompatActivity). Në këtë rast, biblioteka do të kujdeset për të gjithë rutinën.
Një nuancë tjetër e çuditshme e bibliotekës është mungesa e mbështetjes për modalitetin e ekranit të plotë jashtë kutisë. Ekziston një buton për të në luajtës si parazgjedhje, por nuk bën asgjë. Në fakt, modaliteti i ekranit të plotë duhet të bëhet manualisht - fshihni videon, zgjeroni dritaren e luajtësit në ekran të plotë dhe më pas rivendosni gjithçka përsëri. Kjo mund të jetë mjaft e parëndësishme nëse keni një lloj ndërfaqe komplekse rreth luajtësit. Aty kisha vetëm një listë videosh, të cilat mund të fshihen lehtësisht manualisht.
Mostrat e bibliotekës përmbajnë klasën FullScreenHelper, nga e cila mund të merrni kodin e nevojshëm. Përdorimi i tij duket diçka si kjo:
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 fsheh ndërfaqen shtesë dhe vendos flamujt e shfaqjes së ekranit. Më duhej gjithashtu të rregulloja cilësimin e dhëmbëzimit (konstantet në kod janë të këqija, e di) dhe për disa arsye lartësia kur dilte nga ekrani i plotë humbi nëse nuk korrigjohej manualisht.
Në përgjithësi, kjo bibliotekë ka disi shumë disavantazhe, por gjithçka mbulohet nga avantazhi kryesor - aftësia për të personalizuar ndërfaqen e luajtësit. Mjaftoi të fshihja butonin "shfaq në YouTube" duke ruajtur modalitetin e ekranit të plotë:
youTubePlayerView.getPlayerUIController().showFullscreenButton(true);
youTubePlayerView.getPlayerUIController().showYouTubeButton(false);Në përgjithësi, atje mund të kontrolloni të gjithë butonat, të shfaqni kohën aktuale, mund të shtoni pamjen tuaj, etj. — si rezultat, për sa i përket aftësive të personalizimit, kjo bibliotekë e lë shumë prapa konkurrencën e saj zyrtare.
Epo, pasi punohet për konfigurimin e luajtësit, videoja e re ngarkohet thjesht si youTubePlayer.loadVideo(url, startTime);
Marrja e listave të videove, puna me YouTube Data API
URL-ja e videos duhet të merret nga diku tjetër. Për fat të mirë, YouTube ka një API të pasur që ju lejon të bëni të gjitha llojet e pyetjeve të kërkimit dhe të merrni informacione rreth kanaleve. Për të filluar përdorimin e tij ju duhet në Developer Console dhe merrni çelësin.
Që aplikacioni të funksionojë, na duhen dy funksione: kërkimi i kanaleve dhe marrja e një liste videosh për një kanal të caktuar. Kërkimi duket diçka si kjo, ne duam të kërkojmë kanale dhe lista dëgjimi për pyetjen "Peppa Pig". Ne jemi të interesuar për ID-në (në mënyrë që të shkarkojmë më vonë listën e videove për kanalin sipas ID-së së tij) dhe fragmenti përmban të dhëna bazë për entitetin: titullin, imazhin paraprak, përshkrimin.
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();Është e rëndësishme të specifikoni saktë listën e atyre pjesëve të objektit (në këtë rast, fragment dhe id) që duam të marrim. API-ja e YouTube përdor një sistem mjaft kompleks për kufizimin e kërkesave: si parazgjedhje, kuota ditore është një milion njësi, por një kërkesë mund të konsumojë shumë njësi. Pyetjet më të konsumuara janë ato që regjistrojnë diçka (ngarkimi i videove ose ndryshimi i listave për luajtje), por leximi i pyetjeve gjithashtu mund të konsumojë shumë. Kërkesat për leximin e të dhënave konsumojnë një njësi kuotë më vete, plus dy njësi kuotë për një pjesë të të dhënave. Ato. për shembull, kjo kërkesë e renditur më sipër konsumon 5 njësi (një për vetë kërkesën dhe 2 për fragmentet sinppet dhe id). Dhe një kërkesë e plotë për të gjitha të dhënat në lidhje me një kanal që ka 6 fragmente do të hante 13. Për video, ka 10 fragmente të disponueshme, kështu që një kërkesë e plotë do të hante 21 njësi kuotë. Pra, ka kuptim të kërkoni vetëm atë që ju nevojitet.
Një kërkesë për të marrë një listë videosh nga një kanal duket si kjo:
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();Përgjigja ndahet në faqe në një mënyrë disi të padukshme: në vend që të tregojë në mënyrë eksplicite numrin e faqes dhe numrin e rezultateve, përgjigja mund të përmbajë parametrin nextPageToken; nëse është i pranishëm, do të thotë se ka ende faqe përpara, duhet të vendosni këtë parametër në objektin e kërkesës dhe ekzekutoni sërish kërkesën.
if (response.getNextPageToken() != null) {
request.setPageToken(response.getNextPageToken());
response = request.execute();
}Në përgjithësi, API është i dokumentuar mirë, ka shembuj kodesh të gatshëm në shumë gjuhë, shembuj të kërkesave për t'u ekzekutuar në shfletues, etj.
Eksperienca e perdoruesit
Pasi versioni i parë ishte gati, filloi testimi. Së pari në familjen time, më pas e postova në Google Play dhe fillova të mbledh komente nga përdoruesit. Nuancat u bënë të qarta menjëherë:
- Përveç kanaleve, nevojiteshin edhe lista për luajtje. Sepse në një kanal, videot normale shpesh kombinoheshin me plehra djallëzore. Për shembull, në "Teremok TV" ka karikatura të mira për princeshën dhe lloj-lloj katrahurash që bien në sy ("Bibika" ose "Doktor Mashinkova"), për shkak të të cilave nuk doja të shtoja të gjithë kanalin.
- Dhe pastaj ka edhe video të veçanta. Për shembull, ka kanale ku ka zgjedhje si "të gjitha episodet e serialit të animuar në një video" dhe përsëri ju dëshironi të zgjidhni video individuale dhe jo të gjithë kanalin.
- Nevojitet të kthehemi te videoja e mëparshme. Sepse histeria e një fëmije që drejtoi aksidentalisht gishtin në videon tjetër dhe nuk mund të kthehet më tek ajo që sapo pa, nuk është shaka.
- Tani kuptova se duhet edhe një kërkim. Sepse "Unë dua një karikaturë për makinat dhe një fantazmë", por nuk ka ende kërkim në aplikacion dhe mund të kaloni një kohë të gjatë duke treguar gishtin me shpresën se ky film vizatimor i mallkuar do të shfaqet rastësisht.
- Unë kam shkruar tashmë më lart për çaktivizimin e butonit të shikimit në YouTube.
- Dua gjithashtu të aktivizoj modalitetin e gozhduar - duke filluar nga Android XNUMX, mund ta bëni atë në mënyrë që për të minimizuar aplikacionin duhet të shtypni dhe mbani disa butona njëherësh.
Nëse dikujt i pëlqen ideja - Në versionin falas mund të shtoni vetëm tre kanale, shkruani në një mesazh personal dhe unë do t'ju jap çelësin për të hequr kufizimin. Epo, kushdo që dëshiron të mbështesë zhvillimin mund të blejë një zhbllokim në vetë aplikacionin. Ndërkohë, po përfundoj ngadalë veçoritë e reja bazuar në kërkesat dhe jam i kënaqur që tani mund të jem i sigurt për cilësinë e asaj që shikon djali im.
Dhe jo, ai nuk ulet gjatë gjithë ditës para një tableti, por preferon shëtitjet dhe lojërat aktive, fshehjen dhe vizatimin në gjithçka (nga letër-muri te lodrat), dhe në mbrëmje i pëlqen të dëgjojë. perralla. Tableti dhe filmat vizatimorë janë vetëm një nga mjetet e mundshme për të argëtuar një fëmijë, por në të njëjtën kohë një nga më të vështirat për t'u menaxhuar. Kjo është pjesërisht ajo që aplikacioni im është krijuar për të luftuar.
DUP: Shumë njerëz kërkuan çelësa, unë mund të kisha ngatërruar aksidentalisht dhe t'ua dërgoja një çelës disa njerëzve. Pra, nëse ju thotë se çelësi tashmë ka skaduar ose nuk është gjetur, më shkruani dhe unë do t'ju dërgoj një të ri. Çelësi duhet të futet në Play Market në seksionin "Kodet Promocionale".
UPD2: Siç u paralajmërova në komente, Google vrau aplikacionin tim dhe llogarinë time të zhvilluesit. Duke gjykuar nga ajo që ishte shkruar në Habré, të ankohesh ose të përpiqesh të kuptojmë se çfarë nuk shkon në rastin e Google është absolutisht e padobishme.
UPD3: E shkëputur aplikacionin nga API-të e Google, tani mund ta shkarkoni apk-në këtu: . Fshije veten, Google!
Burimi: www.habr.com
