要在我的应用中更改哪些内容(其中没有广告),以避免违反YouTube API服务条款?

时间:2015-10-04 05:22:13

标签: android youtube-api youtube-data-api

我有一个适合孩子的基本应用,允许他们点击图标来执行youtube搜索(link to amazon app store)。

虽然我在应用中做了很多更改,但已将其从Google Play商店中删除,因为违反了YouTube服务条款或YouTube API服务条款" (全文见下文)。

我在这里做了一项研究,似乎我的应用程序没有遇到我在其他应用程序中看到的问题。该应用程序没有AD,我认为它不会与youtube广告相互影响,也不会在后台播放视频。

此外,我向Google Play提出了上诉。他们的回答是我的应用程序从YouTube上播放受版权保护的内容。我有一个漫画搜索,所以我删除它并重新提交,并且应用程序因同样的原因再次被拒绝。 当我要求进一步的帮助他们回答:"不幸的是,尽管我们想要提供帮助,但我们无法为您的查询提供额外的信息,而且非常令人沮丧。

我感谢你的帮助。也许我在实现YoutubePlayer的代码中犯了一个错误,欢迎其他想法。

来自Google Play的完整通知:

这是一条通知,您的应用程序KidoTube已用于程序包ID com.elelad.kidstube已从Google Play中删除。

请解决下述问题并提交合规更新。一旦获得批准,您的应用程序将再次可用,所有安装,评级和评论都保持不变。

删除原因:违反开发者分发协议第4.4条。

经过定期审核后,我们已确定您的应用下载,货币化或以其他方式访问YouTube视频,这违反了YouTube服务条款或YouTube API服务条款。以未经授权的方式访问内容,产品或服务违反了开发者分发协议,并且不允许在Google Play上使用。

跟踪所有删除。重复删除会导致应用暂停,此时此应用将被视为对您的开发者帐户的良好信誉的罢工,并且不再适用于Google Play。

此通知还可作为目录中其他应用的通知。您可以通过立即确保目录中没有其他应用违反(但不限于)上述政策来避免将来删除和/或应用暂停。在发布应用程序之前,请确保您的应用程序符合开发人员分发协议和内容政策。

如果您认为我们错误地做出了此决定,您可以访问此Google Play帮助中心文章。

Google Play团队

我的YoutubeActivity类:

public class YoutubeActivity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener {

private final static String TAG = YoutubeActivity.class.getSimpleName();
YouTubePlayer player;
public static String YOUTUBE_VIDEO_ID = null;
LayoutInflater mLayoutInflater;
private FragmentActivity myContext;
public TextView textToast;
public View toastLayout;
ProgressBar cycleProgressBar;
Search search = new Search();
List<Video> mVideoList;
private static boolean initialize = false;
GetRandomInBackground getRandomInBackground;
YouTubePlayerView youTubePlayer;
ImageView waitLogo;
AnimationDrawable frameAnimation2;
ImageButton play;


public static void setYoutubeVideoId(String youtubeVideoId) {
    YOUTUBE_VIDEO_ID = youtubeVideoId;
}


@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);}
}

@Override
public void onCreate(Bundle savedInstanseState) {
    super.onCreate(savedInstanseState);
    ContentResolver mContentResolver = getContentResolver();
    setContentView(R.layout.youtube_player);
    waitLogo = (ImageView) findViewById(R.id.player_logo);
    play = (ImageButton) findViewById(R.id.play);
    try {
        startLogoAnimation();
    }catch (Exception e){
        waitLogo.setImageResource(R.mipmap.kidotube);
    }
            youTubePlayer = (YouTubePlayerView) findViewById(R.id.vYouTubePlayer);
    if (Setting.isStartRandomVideo()) {
        getRandomInBackground = new GetRandomInBackground();
        getRandomInBackground.execute();
    }
    youTubePlayer.initialize(Search.getGoogleApiKey(), this);
    youTubePlayer.setVisibility(View.INVISIBLE);
}

@Override
protected void onPause() {
    super.onPause();
    BaseActivity.myLifecycleHandler.onActivityPaused(this);
}

@Override
protected void onResume() {
    super.onResume();
    BaseActivity.myLifecycleHandler.onActivityResumed(this);
}

@Override
public void onInitializationFailure(YouTubePlayer.Provider provider,
                                    YouTubeInitializationResult result) {
    Toast.makeText(this, "Cant initialize YouTube Player", Toast.LENGTH_LONG).show();
    finish();
}


@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer mplayer,
                                    boolean wasRestored) {
    this.player = mplayer;
    player.setPlayerStyle(YouTubePlayer.PlayerStyle.CHROMELESS);
    player.setPlayerStateChangeListener(playerStateChanageListener);
    player.setPlaybackEventListener(playBackEvaentListener);
    if (!Setting.isStartRandomVideo()) {
        player.loadVideo(YOUTUBE_VIDEO_ID);
    }

}

private YouTubePlayer.PlaybackEventListener playBackEvaentListener = new YouTubePlayer.PlaybackEventListener() {

    public void onBuffering(boolean arg0) {
        Log.v(TAG, "onBuffering");
    }

    @Override
    public void onPaused() {
        Log.v(TAG, "onPaused");
    }

    @Override
    public void onPlaying() {
        Log.v(TAG, "onPlaying");

    }

    @Override
    public void onSeekTo(int arg0) {
        Log.v(TAG, "onSeekTo");
    }

    @Override
    public void onStopped() {
        Log.v(TAG, "onStopped");
    }

};

private YouTubePlayer.PlayerStateChangeListener playerStateChanageListener = new YouTubePlayer.PlayerStateChangeListener() {
    @Override
    public void onAdStarted() {
    }

    @Override
    public void onError(YouTubePlayer.ErrorReason arg0) {
        Log.v(TAG, "onError" );
        Toast.makeText(YoutubeActivity.this, getString(R.string.Video_Error), Toast.LENGTH_LONG).show();
        finish();
    }

    @Override
    public void onLoaded(String arg0) {
        Log.v(TAG, "onLoaded" + arg0);
    }

    @Override
    public void onLoading() {
        Log.v(TAG, "onLoading" );
    }

    @Override
    public void onVideoEnded() {
        Log.v(TAG, "onVideoEnded" );
        finish();
    }

    @Override
    public void onVideoStarted() {
        Log.v(TAG, "onVideoStarted");
        play.setVisibility(View.INVISIBLE);
        waitLogo.setVisibility(View.INVISIBLE);
        frameAnimation2.stop();
        youTubePlayer.setVisibility(View.VISIBLE);
    }

};

public class GetRandomInBackground extends AsyncTask<Void, Void, Void> {


    @Override
    protected Void doInBackground(Void... params) {
        search.SearchNow(MainActivity.getSearchFor());
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        try {
            if (search.getVideoList() == null || search.getVideoList().size() == 0) {
                Toast.makeText(YoutubeActivity.this, getString(R.string.No_results_found), Toast.LENGTH_LONG).show();
                Intent intent = new Intent(YoutubeActivity.this, MainActivity.class);
                startActivity(intent);
            } else {
                mVideoList = search.getVideoList();
                setYoutubeVideoId(search.playRand(mVideoList));
                player.loadVideo(YOUTUBE_VIDEO_ID);
                Search.setNumberOfVideosReturned(20);
            }
        }catch (Exception e){
            finish();
        }
    }
}

public void startLogoAnimation(){
    waitLogo.setBackgroundResource(R.drawable.wait_icon);
    frameAnimation2 = (AnimationDrawable) waitLogo
            .getBackground();
    frameAnimation2.start();
}

public int animationDuration(AnimationDrawable animationDrawable){
    int duration = 0;
    int frames = animationDrawable.getNumberOfFrames();
    for (int i = 0; i<frames; i++){
        duration = duration + animationDrawable.getDuration(i);
    }
    return duration;
}

提前致谢!

1 个答案:

答案 0 :(得分:1)

好吧,这是我的一个设置。 我选择点击图标并播放随机视频,显然它违反了API条款。 当我删除该选项时,该应用程序被批准。

我希望这是结束......