如何改变我的应用程序(其中没有广告),以避免违反YouTube API的服务条款



我为孩子们设计了一个基本的应用程序,允许他们点击一个图标来执行youtube搜索(链接到亚马逊应用商店)。

尽管我对应用做了很多修改,但它还是因为"违反YouTube服务条款或YouTube API服务条款"而从Google Play商店中移除(全文附在下面)。

我在这里做了一个研究,似乎我的应用程序没有我在其他应用程序中看到的问题。这个应用程序没有广告,我认为它没有与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 Team

My YoutubeActivity Class:

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;
}

提前感谢!

这是我的设置之一。我设置了一个点击图标播放随机视频的选项,显然这违反了API条款。当我删除这个选项时,申请被批准了。

我希望这是结束。

相关内容

  • 没有找到相关文章

最新更新