我为孩子们设计了一个基本的应用程序,允许他们点击一个图标来执行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条款。当我删除这个选项时,申请被批准了。
我希望这是结束。