我有一个适合孩子的基本应用,允许他们点击图标来执行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;
}
提前致谢!
答案 0 :(得分:1)
我希望这是结束......