Gənc uşaqlara planşet və smartfonlara girişin olub-olmaması barədə uzun müddət mübahisə etmək olar. Bəziləri bunun gözə və ya psixikaya zərərli olduğunu, bəziləri deyir ki, valideynlər özləri övladları ilə oynayıb oxumalıdırlar, qadjetlərlə özlərini onlardan təcrid etməyə çalışmamalıdırlar. Tipik olaraq, bunu ən çox öz uşaqları olmayan insanlar deyir. Bir uşağın ən azı yarım saat susması, ətrafındakı hər şeyi məhv etməyi dayandırması, divanda sakitcə uzanması və cizgi filmlərinə baxması xoşbəxtliyin nə olduğunu bilmir. Başqa bir arqument var - uşaqlar valideynlərindən sonra hər şeyi diqqətlə təkrarlayırlar, əgər valideynlər daim başlarını telefona basdırıb otururlarsa, o zaman uşaqlara valideynlərə niyə icazə verildiyini izah etmək çox çətindir, amma icazə vermirlər.

Ümumiyyətlə, üstümə çürük pomidor atmaq olar, amma indi üç yaşı tamam olan oğlum vaxtaşırı divanda planşetlə uzanıb “Youtube”da cizgi filmlərinə baxır.
Təəssüf ki, mən çox tez başa düşdüm ki, uşaq YouTube sadəcə CƏHƏNNƏM zibildir. Artıq Habré-də bu barədə söhbət var. . Uşaq kanalları “yüz Kinder sürprizinin açılması”, “yüksək musiqinin müşayiəti ilə zəif 3D qrafika ilə axmaq qafiyələr” və “beam NG-də axmaq şərhlərlə müşayiət olunan yarış avtomobilləri” kimi geniş gözlü videolarla dolu dibsiz çuxurlardır. Bütün bunlar nədənsə azyaşlı uşaqlar üçün çox cəlbedicidir, onlar tövsiyə olunan videolarda belə videoları görən kimi onları tıklamağa tələsirlər. Və YouTube tövsiyələri idarə etməyə icazə vermir. Oğluma “normal” cizgi filmləri olan planşet verdikdən sonra belə, bir neçə dəqiqədən sonra tövsiyələrə iki kliklə necə yenidən o lənətə gəlmiş şokolad yumurtalarını tapdığını və yenidən onlara yapışmağa başladığına baxıram.
Budur, bəs etdim, qərar verdim. Və o, YouTube-a baxmaq üçün öz tətbiqini yaratmağa başladı ki, bu da kanalların siyahısını seçməyə imkan verir və yalnız bu kanallardan videoları göstərir. Bunu necə etdim, kəsik altındadır.
Mübarizə aparacağımız zibil videolarının bir nümunəsidir. Axmaq musiqi ilə zəif hazırlanmış, mənasız 3D animasiya - və 142 milyon baxış. Uşaqlar nədənsə bu cür videolara sadəcə olaraq zombi olunurlar, onları təkrar-təkrar izləməyə hazırdırlar.

Tərəziləri müqayisə etmək üçün - ISS-də gitara ilə oxuduğu Kris Hadfildin cəmi 40 milyon baxışı var və real çəkisizliklə (kabel və ya xromakey yoxdur, yalnız xüsusi təyyarənin göyərtəsində dürüst çəkisizlik) - cəmi 12 milyon, on dəfə az.
Yeri gəlmişkən, YouTube-da reklam verənlər , çünki onlarda reklam göstərmək büdcə itkisidir. Uşaqlar reklamlara baxır, bəzən hətta klikləyirlər, lakin heç nə almırlar və milyonlarla baxış tez bir zamanda büdcəni sərf edir.
Problem problemi
Dərhal deyim ki, mən uşaqlar üçün keçilməz bir tətbiq etmək fikrinə düşməmişəm. Artıq belə cəhdlər var, o cümlədən Habré-də - onlar hər şeyi ardıcıl olaraq kəsirlər ki, uşaq proqramdan çıxa bilməyəcək, bir şey ala bilməyəcək, brauzer aça bilməyəcək və s. Avadanlıq kilidləri, əlil portlar, xüsusi Android qabıqları və digər çətinliklərlə (məsələn,) seçimlər də var. 2012-ci il üçün layihə hələ də canlı görünür). Lakin bütün bunlar artıq öz gadgetlarının imkanlarını tam şəkildə araşdıran yaşlı uşaqlar üçün məna kəsb edir. 2-3 yaşlı uşaqlar üçün xüsusi qorunma tələb olunmur, onlar vaxtaşırı videolara baxmaqdan və digər videoların miniatürlərinə baxmaqdan olduqca məmnundurlar. Əsas odur ki, bu videolar YouTube-un təklif edəcəyi deyil (və o, sonsuz şokolad yumurtaları və körpə barmaqları təklif edəcək) onlara lazım olan şey olmalıdır.
Bundan tələblərin siyahısı yarandı:
- Fərdiləşdirilə bilən kanal siyahısı
- Onu dəyişikliklərdən qorumaq (təsadüfi olanlardan daha çox, çünki hiyləgər yetkin uşaqların valideynlərinin parollarını tapmaq üçün artıq bir çox yolu var)
- Tətbiqin özü YouTube-a bənzəyir, video solda oynayır, sağda klikləyə biləcəyiniz kiçik şəkillər sütunu
- Əsas istifadə vəziyyəti təsadüfi olaraq bir videoya baxır; uşaq, ümumiyyətlə, tam olaraq nəyə baxacağına əhəmiyyət vermir.
Eyni zamanda, tətbiqin işləməsi iki əsas hissədən ibarətdir: istifadə edərək kanalların axtarışı və qurulması və sonra videonu oynatın. Bundan əlavə, hazırda öz tətbiqimdə videoları oynamaq üçün iki seçim tapdım:
YouTube Android Player API
Bu, Android tətbiqinizdə videoları oynatmağın rəsmi yoludur. Bunun işləməsi üçün rəsmi YouTube tətbiqi artıq istifadəçinin cihazında quraşdırılmalıdır ki, bu da digər tətbiqlərdən istifadə edilə bilən müəyyən bir xidmətdir. Beləliklə, bu Player API ayrıca quraşdırılmış proqramla qarşılıqlı əlaqədə olan kiçik bir kitabxanadır.
Əvvəlcə istifadə etdim, amma bir müddət istifadə etdikdən sonra kritik problem olduğu ortaya çıxdı. Bu, həqiqətən oyunçunun görünüşünü fərdiləşdirə bilməzsiniz, xüsusən də düymələri idarə edə bilərsiniz (yalnız hər şeyi gizlədə bilərsiniz, lakin sonra tam ekran rejimi düyməsini itirəcəksiniz). Pleyerin idarəetmə panelində artıq heç bir filtrləmə olmayan rəsmi tətbiqi (cihazda olmalıdır) açan "YouTube-da baxmağa get" pis düyməsi var. Uşaqlar isə asanlıqla (təsadüfən və ya olmasın) üzərinə klikləyirlər, süzülməmiş proqrama daxil olurlar və bir neçə dəqiqədən sonra mən yenidən “körpə barmaq, körpə barmaq haradasan” sözlərini eşidirəm və ekranda göz oxşayan zibil animasiyalarını görürəm.
Uşaqların bir neçə kliklə tapdıqları bir az daha çox zibil. 900 milyondan çox baxış!

Buna görə də, aşağıdakı kitabxana şəklində onun əvəzini taparaq rəsmi oyunçudan imtina etdim.
Android-YouTube-Player
Kitabxana JavaScript API vasitəsilə veb pleyerə nəzarət edən WebView ətrafında sarğı kimi görünür. Üstünlüklərdən biri interfeysi tamamilə fərdiləşdirmək imkanıdır.
Oyunçunun işə salınması bir az aydın deyil, xüsusən də rəsmi kitabxanadan keçdikdən sonra:
- com.pierfrancescosoffritti.androidyoutubeplayer.player.YouTubePlayerView sinfinə baxışımızı əldə edirik
- Biz onu dinləyicidən ötürərək initialize() adlandırırıq
- Dinləyici oyunçu obyektinin nümunəsini qəbul edən onInitSuccess(@Nonnull final YouTubePlayer youTubePlayer) metodunu çağırır. Bunu əldə etməyin yeganə yolu budur. Bu nöqtəyə qədər başlatma prosesi rəsmi müştəri ilə eyni idi
- Biz pleyerdə addListener() metodunu çağırırıq və ona başqa bir dinləyici ötürürük (dinləyicilərin tanrısı üçün daha çox dinləyici!)
- Bu dinləyici onReady() metodunu çağırır - yalnız bu andan sonra siz videonu yükləyə və göstərə və pleyerdən istifadə edə bilərsiniz. Əgər səhvən onInitSuccess-ə nəsə yükləməyə cəhd etsəniz, kitabxana qəribə səhvlər buraxmağa başlayacaq.
Siz pleyerin həyat dövrünü (onPause()-da oxutmanı dayandırmaq və buna bənzər şeyləri) əl ilə idarə edə bilərsiniz və ya baxışımızı Həyat Dövrü Müşahidəçisi kimi qeydiyyatdan keçirə bilərsiniz (bunun üçün Fəaliyyətimiz AppCompatActivity-dən miras alınmalıdır). Bu halda, kitabxana bütün gündəlik işlərlə məşğul olacaq.
Kitabxananın digər qəribə nüansı qutudan kənarda tam ekran rejiminə dəstəyin olmamasıdır. Varsayılan olaraq pleyerdə bunun üçün bir düymə var, lakin heç nə etmir. Əslində, tam ekran rejimi əl ilə həyata keçirilməlidir - videonu gizlədin, pleyer pəncərəsini tam ekrana genişləndirin və sonra hər şeyi bərpa edin. Oyunçu ətrafında bir növ mürəkkəb interfeysiniz varsa, bu, olduqca qeyri-ciddi ola bilər. Orada sadəcə əl ilə asanlıqla gizlənə bilən videoların siyahısı var idi.
Kitabxana nümunələri lazımi kodu götürə biləcəyiniz FullScreenHelper sinfini ehtiva edir. Onun istifadəsi belə görünür:
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 əlavə interfeysi gizlədir və ekran görüntüsü bayraqlarını təyin edir. Mən də girintilərin parametrlərini dəyişməli oldum (koddakı sabitlər pisdir, bilirəm) və nədənsə tam ekrandan çıxanda hündürlük əl ilə düzəldilməyibsə itirildi.
Ümumiyyətlə, bu kitabxananın bir növ mənfi cəhətləri var, lakin hər şey əsas üstünlüklə əhatə olunur - oyunçu interfeysini fərdiləşdirmək imkanı. Tam ekran rejimini qoruyarkən “YouTube-da göstər” düyməsini gizlətmək mənim üçün kifayət idi:
youTubePlayerView.getPlayerUIController().showFullscreenButton(true);
youTubePlayerView.getPlayerUIController().showYouTubeButton(false);Ümumiyyətlə, orada bütün düymələri idarə edə bilərsiniz, cari vaxtı göstərə bilərsiniz, öz Görünüşünüzü əlavə edə bilərsiniz və s. — nəticədə fərdiləşdirmə imkanları baxımından bu kitabxana rəsmi rəqibini xeyli geridə qoyur.
Yaxşı, pleyerin qurulması üzərində işlədikdən sonra yeni video sadəcə olaraq youTubePlayer.loadVideo(url, startTime) kimi yüklənir;
Videoların siyahılarının əldə edilməsi, YouTube Data API ilə işləmək
Video URL başqa yerdən əldə edilməlidir. Xoşbəxtlikdən, YouTube hər cür axtarış sorğularını etməyə və kanallar haqqında məlumat əldə etməyə imkan verən zəngin API-yə malikdir. İstifadəyə başlamaq üçün sizə lazımdır Tərtibatçı Konsolunuzda və açarı əldə edin.
Tətbiqin işləməsi üçün bizə iki funksiya lazımdır: kanalları axtarmaq və verilmiş kanal üçün videoların siyahısını əldə etmək. Axtarış belə görünür, biz "Peppa Pig" sorğusu üçün kanallar və pleylistlər axtarmaq istəyirik. Bizi id (kanal üçün videoların siyahısını daha sonra onun id-si ilə endirmək üçün) maraqlandırırıq və fraqmentdə obyekt haqqında əsas məlumatlar var: başlıq, ön baxış şəkli, təsvir.
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();Almaq istədiyimiz obyektin hissələrinin (bu halda, parça və id) siyahısını düzgün müəyyən etmək vacibdir. YouTube API sorğuları məhdudlaşdırmaq üçün kifayət qədər mürəkkəb sistemdən istifadə edir: standart olaraq, gündəlik kvota bir milyon vahiddir, lakin bir sorğu bir çox vahidi istehlak edə bilər. Ən çox istehlak edilən sorğular nəyisə yazan sorğulardır (videoların yüklənməsi və ya pleylistlərin dəyişdirilməsi), lakin sorğuların oxunması da çox sərf edə bilər. Məlumatın oxunması sorğuları tək başına bir kvota vahidi, üstəgəl hər bir məlumat üçün iki kvota vahidi istehlak edir. Bunlar. məsələn, yuxarıda sadalanan bu sorğu 5 vahid (sorğunun özü üçün biri və sinppet və id fraqmentləri üçün hər biri üçün 2) istehlak edir. Və 6 fraqmenti olan bir kanal haqqında bütün məlumat üçün tam sorğu 13-ü yeyəcək. Video üçün 10 fraqment mövcuddur, buna görə də tam sorğu 21 kvota vahidini yeyəcək. Buna görə də yalnız sizə lazım olanı tələb etmək məntiqlidir.
Kanaldan videoların siyahısını əldə etmək sorğusu belə görünür:
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();Cavab bir qədər anlaşılmaz şəkildə səhifələrə bölünür: cavab səhifə nömrəsini və nəticələrin sayını açıq şəkildə göstərmək əvəzinə, nextPageToken parametrini ehtiva edə bilər; əgər varsa, bu o deməkdir ki, qarşıda hələ səhifələr var, siz yerləşdirməlisiniz. sorğu obyektində bu parametri təyin edin və sorğunu yenidən icra edin.
if (response.getNextPageToken() != null) {
request.setPageToken(response.getNextPageToken());
response = request.execute();
}Ümumiyyətlə, API yaxşı sənədləşdirilmişdir, bir çox dillərdə hazır kod nümunələri, brauzerdə işləmək üçün nümunə sorğuları və s.
İstifadəçi təcrübəsi
İlk versiya hazır olduqdan sonra testlər başladı. Əvvəlcə ailəm haqqında, sonra Google Play-də yerləşdirdim və istifadəçilərdən rəy toplamağa başladım. Nüanslar dərhal aydın oldu:
- Kanallarla yanaşı, pleylistlər də lazım idi. Çünki bir kanalda normal videolar çox vaxt cəhənnəm zibilləri ilə birləşdirilirdi. Məsələn, "Teremok TV" də şahzadə haqqında yaxşı cizgi filmləri və hər cür göz oxşayan cəfəngiyatlar ("Bibika" və ya "Doktor Mashinkova") var, ona görə də bütün kanalı əlavə etmək istəmədim.
- Və sonra ayrıca videolar da var. Məsələn, “bir videoda cizgi serialının bütün epizodları” kimi seçimlərin olduğu kanallar var və siz yenə bütün kanalı deyil, ayrı-ayrı videoları seçmək istəyirsiniz.
- Əvvəlki videoya qayıtmaq lazımdır. Çünki təsadüfən növbəti videoya barmağını göstərən və indi baxdığına artıq qayıda bilməyən uşağın isteriyası zarafat deyil.
- İndi başa düşdüm ki, axtarış da lazımdır. Çünki “Maşınlar və kabuslar haqqında cizgi filmi istəyirəm”, amma tətbiqdə hələ axtarış yoxdur və bu lənətə gəlmiş cizgi filminin təsadüfən ortaya çıxacağı ümidi ilə barmağınızı göstərərək uzun müddət sərf edə bilərsiniz.
- Artıq yuxarıda YouTube-da baxış düyməsini söndürmək haqqında yazmışdım.
- Mən həmçinin bərkidilmiş rejimi aktivləşdirmək istəyirəm - Android XNUMX-dən başlayaraq siz bunu elə edə bilərsiniz ki, tətbiqi minimuma endirmək üçün eyni anda bir neçə düyməni basıb saxlayın.
Kiminsə ideyası xoşuna gəlirsə - Pulsuz versiyada yalnız üç kanal əlavə edə bilərsiniz, şəxsi mesajda yazın və mən sizə məhdudiyyəti aradan qaldırmaq üçün açar verəcəyəm. Yaxşı, inkişafa dəstək olmaq istəyən hər kəs proqramın özündə bir kilidi ala bilər. Bu arada, istəklər əsasında yavaş-yavaş yeni funksiyaları tamamlayıram və şadam ki, indi oğlumun baxdığı şeylərin keyfiyyətinə əmin ola bilərəm.
Yox, o, bütün günü planşet qarşısında oturmur, əksinə, gəzintilərə və aktiv oyunlara üstünlük verir, gizlənqaç və hər şeyə (divar kağızından tutmuş oyuncaqlara qədər) rəsm çəkməyə üstünlük verir, axşam isə qulaq asmağı xoşlayır. nağıllar. Planşet və cizgi filmləri uşağı əyləndirmək üçün mümkün vasitələrdən yalnız biridir, lakin eyni zamanda idarə olunması ən çətin vasitələrdən biridir. Tətbiqim qismən bununla mübarizə aparmaq üçün nəzərdə tutulmuşdur.
DUP: Çox adam açar istədi, mən təsadüfən qarışdırıb bir açarı bir neçə nəfərə göndərə bilərdim. Beləliklə, əgər açarın artıq istifadə müddəti bitib və ya tapılmadığını söyləyirsə, mənə yazın, mən sizə yenisini göndərəcəyəm. Açar "Təqdimat kodları" bölməsində Play Marketə daxil edilməlidir
UPD2: Şərhlərdə mənə xəbərdarlıq edildiyi kimi, Google mənim tətbiqimi və tərtibatçı hesabımı öldürdü. Habré-də yazılanlara əsasən şikayət etmək və ya Google-da nəyin səhv olduğunu anlamağa çalışmaq tamamilə faydasızdır.
UPD3: Tətbiqi Google API-lərdən ayırdınız, indi apk-ni buradan endirə bilərsiniz: . Özünüzü silin, Google!
Mənbə: www.habr.com
