如何保护您的孩子免受YouTube上的垃圾的干扰,并使用白名单频道制作自定义播放器

您可以就是否值得让幼儿使用平板电脑和智能手机这一问题争论很长时间。 有人说这对眼睛或心灵有害,对某些人来说,父母应该自己和孩子一起玩耍并阅读,而不要试图用小玩意儿挡住他们。 有什么特点,通常是那些没有自己的孩子的人说的。 而且他们不知道这是多么幸福-当孩子沉默至少半小时,不再破坏周围的一切,从容地躺在沙发上看动画片时。 还有一个论点-孩子们在父母之后重复地重复所有的事情,如果父母不断地用手坐在电话上,很难向孩子们解释为什么父母可以而不是他们。



通常,您可以给我扔烂番茄,但我儿子已经三年没来了两天,他偶尔会躺在平板电脑上,在YouTube上看动画片。


不幸的是,我很快意识到孩子们的YouTube只是“ HELLY TRASH”。 关于它,甚至在哈布雷(Habré)上, 已经翻译了该文章 。 儿童频道是某种无底的污水处理池,里面充满了vyrviglaznymi视频,例如“部署一百个同类产品惊奇”,“带有可怜的3D图形的愚蠢的韵律到嘈杂的音乐”和“在Beam NG中驾驶汽车的愚蠢的注释”。 由于某些原因,这一切对于年幼的孩子非常有吸引力,他们希望在推荐的视频中尽快看到这些视频。 而且YouTube不允许您管理推荐。 几分钟后,甚至给我儿子打开了装有“正常”漫画的平板电脑,我看着他两次点击建议,又如何找到这些该死的朱古力蛋,然后又开始粘在它们上。


我决定,这对我来说足够了。 他开始看到自己的应用程序,用于观看YouTube,可以让您选择频道列表并仅显示这些频道中的视频。 我是怎么做到的?


这是我们将与之搏斗的视频的一个示例。 Shitty将愚蠢的音乐制作成无意义的3D动画-观看次数达到1.42亿次。 出于某种原因,此类儿童视频被简单地僵化了;他们准备对其进行审查和修订。



相比之下,克里斯·哈德菲尔德(Chris Hadfield)在国际空间站上的吉他上唱歌的最酷的视频只有4,000万次观看,而精彩的OK GO剪辑具有真正的零重力(没有电缆和抠像,在特殊飞机上只有诚实的零重力)–只有1200万次,十倍更少。


顺便说一下,YouTube上的广告商自己对儿童频道的受欢迎程度并不满意 ,因为在儿童频道上展示广告会浪费预算。 孩子们观看广告,有时他们甚至点击,但他们什么也没买,而且数百万的观看次数很快就花费了预算。


问题陈述


我必须马上说,我没有设定为孩子制作难以理解的应用程序的任务。 这样的尝试已经存在,包括在集线器上的位置-一切都被连续剪切了,这样孩子就不能退出应用程序,买东西,打开浏览器等。 有带有硬件锁,禁用端口,自定义android shell和其他困难的选项(例如, 这是 2012年的文章 ,该项目似乎仍然有效)。 但是,这对于已经在探索小工具的可能性的大一点的孩子来说是有意义的。 对于2-3岁的儿童,不需要特殊的保护,他们非常乐意观看视频,并且不时查看其他视频的预览。 最主要的是,这些视频应该是您所需要的,而不是YouTube所提供的(他将提供无尽的朱古力蛋和婴儿手指)。


需求清单由此产生:


  • 自定义频道列表
  • 保护它免受更改(而不是偶然的更改,因为狡猾的成年子女已经有了很多识别父母密码的方法)
  • 该应用程序本身类似于YouTube,它在左侧播放视频,在右侧播放一列缩略图,您可以单击
  • 主要用例是通过视频随机戳,孩子通常不关心看什么

同时,该应用程序包含两个主要部分:使用YouTube数据API搜索和设置频道,然后播放视频。 此外,目前,我发现了两个在自己的应用程序中播放视频的选项:


YouTube Android Player API


https://developers.google.com/youtube/android/player/


这是在Android应用程序中播放视频的官方方式。 要使其在用户设备上运行,必须已经安装了官方的YouTube应用程序,该应用程序的组成部分包括可以从其他应用程序使用的某些服务。 因此,此Player API只是一个小型库,可与单独安装的应用程序进行交互。


最初我使用它,但是经过一段时间的使用,结果证明他有一个严重的问题。 您不能真正在其中自定义播放器的外观,特别是要控制按钮(您只能完全隐藏整个东西,但同时也会丢失全屏模式按钮)。 播放器的控制面板上有一个错误的按钮“可以在YouTube上观看”,它会打开官方应用程序(必须在设备上),该应用程序已不再过滤。 孩子们很容易地(无论是偶然的还是偶然的)单击它,转到未过滤的应用程序,几分钟后,我已经再次听到“婴儿手指,婴儿手指在哪里”的声音,并且在屏幕上看到了某种扭曲的眼睛。


点击几下,孩子就会发现更多的垃圾。 超过9亿的观看次数!



因此,我拒绝了官方球员,以以下库的形式找到了他的替补球员。


Android YouTube播放器


https://github.com/PierfrancescoSoffritti/android-youtube-player


该库似乎是WebView的包装,该WebView通过其JavaScript API控制Web播放器。 好处-完全自定义界面的能力。


播放器的初始化不太明显,尤其是在从官方库切换之后:


  1. 了解com.pierfrancescosoffritti.androidyoutubeplayer.player.YouTubePlayerView类的视图
  2. 调用她的initialize(),传递监听器
  3. 在监听器上调用onInitSuccess方法(@Nonnull,最终的YouTubePlayer youTubePlayer),监听器将接收播放器对象的实例。 这是获得它的唯一方法。 至此,初始化过程与官方客户端的初始化过程相同
  4. 我们在播放器上调用addListener()方法,将另一个侦听器传递给它(更多的侦听器给侦听器!)
  5. 在此侦听器上调用onReady()方法-仅在此刻之后,您才能下载和显示视频并使用播放器。 如果您错误地尝试将某些内容加载到onInitSuccess中,则该库将开始吐出奇怪的错误。

您可以手动控制播放器的生命周期(在onPause()中停止播放以及类似的操作),也可以将我们的视图注册为生命周期观察者(我们的Activity应该从AppCompatActivity继承)。 在这种情况下,库将接管整个例程。


库的另一个细微差别是缺少开箱即用的全屏支持。 默认情况下,播放器中有一个按钮,但不执行任何操作。 实际上,您必须手动执行全屏模式-隐藏男生,将播放器窗口最大化至全屏,然后将所有内容恢复原状。 如果您在播放器周围有某种复杂的界面,这可能会变得很简单。 我那里只有一个视频列表,很容易手动将其隐藏。


在库的示例中,有一个FullScreenHelper类,您可以从中获取所需的代码。 它的用法如下所示:


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 . :


  1. . . " " ("" " "), - .
  2. — . , " ", , .
  3. . , , — .
  4. . " ", , .
  5. .
  6. Pinned Mode — , .

- — https://play.google.com/store/apps/details?id=ru.sundogs.youtubekiosk , — . — . , , .


, , , - ( ), . — , . .


UPD: , . — , . Play Market ""


UPD2: , . , , .


UPD3: , : https://channelwhitelist.tilda.ws. , !

Source: https://habr.com/ru/post/zh-CN421451/


All Articles