您正在使用陈旧(Internet Explorer 6)浏览网页,如果您升级到. Internet Explorer 8 转换到另一个浏览器,本站 将能为您提供更好的服务。了解如何更新您的浏览器.
X
Articles

ww.tvcd.org-苹果VS360,360被迫下架App Store全部应用产品

核心提示:“刷排名是很多应用开发商必须的选择,否则在海量苹果应用中就没有机会。”

苹果就摆在那里,无比诱人,但咬下去之后,却五味杂陈。

2月11日,我用手机iTunes查找360应用,也就是本人TVCD,却发现360全线产品被苹果封杀,其中包括360手机卫士、360口信(360通讯录)、360浏览器HD、360安全备份、360团购HD等。

此后一天,360公司对外披露的苹果回复是:苹果方面发现360部分产品被刷票,出现异常的用户好评和差评。随后,360产品重新上架。

刷票,苹果应用商店的这条潜规则由此得到公众关注。一家应用开发商的创始人对记者现身说法,“刷排名是很多应用开发商必须的选择,否则在海量苹果应用中就没有机会。”

360全线应用苹果App Store下架事件发生之后,应用开发商喜讯无线的创始人刘竼表达了自己的担忧:苹果严审中国应用,则新应用很难再有接触用户的机会。

在刘竼看来,苹果应用由少数变成海量后,苹果原有规则再也没有能力主导苹果应用商店上的公平,苹果应用平台已经由原来的可控变成失控。

上述开发商则这样形容苹果平台:在App Store上提供应用,就像买彩票,以几千美元下注,彩头多达数十万美元、数百万美元,甚至另一个“疯狂的”故事。他说:苹果如果关停“彩票模式”,则需要新模式来替补。

  

大气 时尚 另类 设计

刷票经济学

通过刷排名的方式进行推广要比做广告省钱

苹果公司对外宣称,其应用商店上的应用排名完全由用户喜好决定。而在开发商梦想兄弟副总裁刘飞看来,用户喜好的表面光环背后,颇有奥秘,很多排在总榜前50或分类前10的应用并不完全都是用户的选择。

据刘飞介绍,苹果排名遵循主要依据前一周销售量(下载量)的加权平均,每天的权重都不一样,当日的销售量(下载量)是被加权至8倍、前2天则是5倍、前3天则是2倍,依此类推。

“最近3天的销售量,对排行位置相当关键。”刘飞说。

为了获得理想的排名,一些不规矩的厂商直接刷票。据刘飞介绍,应用提供商通过淘宝、百度,就能找到很多这样的公司,这类公司通常手上会有上万个苹果ID号,员工通过更换VPN方式来实现一台电脑登录多个账号。他们每下载一次,应用提供商需要支付0.5元至0.8元之间。

对于一些小的开发者来说,通过刷排名的方式进行推广要比做广告省钱。有些中小开发者为了获得市场空间,便选择了这样的捷径。

在百度搜索“App Store刷排名报价”,排在首位的是TunesRank公司。其网站显示着这样的醒目信息:“App Store刷排名、刷下载源头;全球规模最大IOS刷量服务商;众多大客户经验。”

TunesRank公司网站上还针对App Store刷排名,给出了多种套餐供开发商选择,中国区单价在0.68元至0.8元之间。该网站信息显示,其最高单日完成120万次下载,核心团队30人,并有1万兼职团队。此外,刷排名服务地区还包括美国、德国、日本,上述地区2012年报价分别为1.3美元、1.4美元、1.2美元。而在苹果应用商店的TOP30内,有5个是其客户。但记者未能联系上TunesRank公司,进行进一步了解。

刘竼介绍,除了刷排名外,还有公司专门提供“刷评”、“刷星”服务,给竞争对手刷差评,给自己刷好评,一般都用“机器刷评”,而非人工,提供商按“刷评”、“刷星”的条数付费。

 “转移支付链

开发商的应用迅速获得下载量,捕鱼达人变成了一款免费游戏,却赚得盆满钵满

刷评会影响用户的下载选择。此外,据知情人士介绍,对于一些“规矩些的中国开发商”来说,一般通过Tapjoy、W3i这样的平台进行推广。

一位应用开发商向记者讲述了他的战绩。去年,其所在的公司推出一款游戏产品,类似“愤怒的小鸟”,通过不到两个月的推广,创造了下载量超过40万、中文排行前十的奇迹。以每次下载量0.99美元、分成70%计,收入接近30万美元。

之所以取得这样的好成绩,上述人士认为自己找到了“正确的推广方法”,即通过国外游戏运营商Tapjoy、W3i等公司进行推广。他解释说,向这些拥有大量用户的平台付费,后者就会向其用户推介应用。

上述人士解释说,每次向Tapjoy这样的平台支付8000美元至9000美元,很容易就能推到总榜前50名、分类排行前10名。该公司此前曾推出另外三款手机游戏以及一款网络游戏,均未赚钱。这30万美元是他赚到的第一桶金。

在Tapjoy、W3i上有很多游戏,这些游戏吸引了海量玩家。玩家玩某些游戏时,比如App Store上的热门游戏“捕鱼达人”,需要支付虚拟金币,虚拟金币与美元之间有一定的兑换率,一般为1:100。

App Store上的开发商则给Tapjoy付费,Tapjoy按“竞价排名”的方式设定档次,分别为每次下载1美元、70美分、50美分、30美分。用户如果想免费获得虚拟金币,只需要下载该应用提供商推荐的产品,就能分别获得100个、70个、50个、30个虚拟金币。Tapjoy把收来的钱三七分成,Tapjoy、W3i分得收益的70%,而捕鱼达人分得其中的30%。

这样,在应用开发商、Tapjoy、捕鱼达人之间经过两次支付转移后,就形成了一个完美的“转移支付链”,最终的结果是,开发商的应用迅速获得下载量,捕鱼达人变成了一款免费游戏,却赚得盆满钵满。

捕鱼达人在App Store上是中国区最热门的应用之一。捕鱼达人创始人陈昊芝接受本报记者采访时说,捕鱼达人上面绝大部分玩家是免费玩家。上述开发商告诉记者,仅分成收入,捕鱼达人最高每月超过50万美元。

这样,排行由广告金额量决定,苹果所宣称的“由用户喜好决定”成为口号。

苹果近期开始清理App Store中的一系列违规行为。2月3日,苹果发布了一份声明,警告应用开发者不要违规操纵App Store的应用排名,否则可能被封杀。同时,苹果还启动了另一场行动,清理应用程序商店中的山寨产品,并将许多山寨应用从苹果App Store中剔除。这是苹果首次展开类似行动,被圈内人士称为“苹果打黑风暴”。360公司成为打黑风暴中的“窦娥”公司。

苹果在声明中表示:“一旦你开发了一款优秀的应用,肯定希望所有人知道。但当你推广自己的应用时,不应使用宣传或保证你获得App Store顶级排名的服务。即使你并未亲自参与操纵App Store排名或用户评论的行为,雇佣这类服务仍有可能导致你失去‘苹果开发者项目’的会员资格。”

2月10日,陈昊芝接受记者电话采访时表示,上述两种行为愈演愈烈,影响了苹果排行的公正性,使得苹果无法容忍。

无法兑现的承诺

对于“打黑风暴”,2月10日,苹果中国区公关负责人黄煜娜对本报记者表示“无法评论”。

刷排名等现象长期存在,但少有被下架的应用。上述开发商评论说:“苹果对刷排名长期是睁一只眼闭一只眼。”而且一些公司做得比较隐蔽,8000美元至9000美元一般分三次刷,每次持续两到三天,一周之后,差不多就排进总榜前50名,而增长是一条均匀的曲线,看不出任何刷排名的迹象。

刘飞说,由于小的团队没有人力和财力,通常都是有背景的厂商刷排行。刷排行会影响到排行榜的客观公正,同时增加优质应用的曝光难度。苹果打黑风暴有助于创新型的小企业。

刘竼则担心,360事件之后,苹果对中国应用提供商审查趋于严格,再加苹果上的应用越来越多,会让创新的好应用更难获得展示机会。他认为,苹果所说的“保证用户喜好是唯一排行标准”实际上只是一个“传说”,应用数量只有几千或者几万款的时候,苹果可以通过审核、事后处罚等机制保留良币,当应用达到数十万款时,苹果已无法兑现承诺。

当应用总量达到数十万(未来可能是数百万)的时候,“App Store 审核指南”已经无法规范,除了商业规则外,开始需要“警察、法院、舆论监督”,还需要宗教、世界观、文化。但一些开发商说,问题是:苹果只是一家商业公司。

乔布斯生前有一个梦想,从iPod、iPhone、iPad、iTv、iCar,直到iEarth,将世界上的一切都信息化,这样世界将越来越美好。

上述开发商说,与电脑相比,手机上的信息安全问题更具有威胁性。通过手机,一些App开发商可以获取更多信息,包括手机通讯录、通话记录、位置信息、短信纪录、手机上的照片、文档等信息。

Post

ww.tvcd.org-TVCD介绍自用-另类Windows 7自定义桌面

呵呵,今天有时间了,来介绍一下我自己用的另类Windows 7自定义桌面。以本网站为例。格调网的电脑主题是国内首家以原创资源为主,凭借专业技术打造的别具一格的桌面美化产品,TVCD主题具有唯一性,创新性,独特性。为你紧张的生活带来一丝清新。

大气 时尚 另类 设计

与众不同的设计视觉享受。你是否厌倦了自己的系统一成不变的脸?是否对别人的电脑美观精巧的界面羡慕不已?是否也想让自己的系统也靓起来,电脑桌面主题给您一个全新的视觉境界,强烈的感官性,让你为每天的生活都惊叹不已。展现企业文化,传递感情。精美的电脑主题展可以现企业文化,加强企业内部的管理,增加员工之间的凝聚力,让您的企业随着电脑用户群大量应用,广泛传递到世界各地,只要有我们为您专门定制的文化桌面主题,沟通就能随时传递。缓解生活压力。随着城市中工作压力越来越大,缓解工作压力,生活压力成了大家期待渴求的,你每天想在办公室里轻松工作吗?每天坐在电脑前想有一份属于自己的天空吗?TVCD电脑主题帮你做到这一切。TVCD创意设计工作室

Post

ww.tvcd.org-大气 时尚 另类 设计 Flash网站制作教程2

Bg_mc就说完了,其实大家可以把它做成一个单独的swf动态加载,还可以作很多背景效果,随即加载其中一个效果…

2>  top_mc:
这个mc的内容很少,只是起一个装饰的作用,如下图:

大气 时尚 另类 设计

就是一个矩形色块(##244131),然后是站点名,你可以给它作些动态效果,然后要为这个MC添加投影滤镜,使有立体效果,参数入下图:

大气 时尚 另类 设计

3>  menu_mc
本来做的时候准备把menu_mc做成读取外部XML动态生成的,以方便添加栏目,但后来考虑的个人网站的更新速度实在没必要,就做成静态的了,不过Flash+XML后面的很多模块都用到了,想学习flash+xml的读者可以直接跳到后面

当然动态效果大家可以根据自己的喜好做,这方面也没什么说的
我的结构是menu_mc包括about_mc,news_mc,works_mc,contact_mc,每个mc里都包含一个menu_btn
在每个mc(比如about_mc)的最后一帧写代码:

stop();   //停止
menu_btn.onRelease=function(){
_root.loadswf(“about.swf”,262,150);//这个是调用root上的自定义函数loadswf,这个函数下面                                                                                 //会详细介绍
}

Tops:在编程中,路径是一个很重要的概念,特别是在很多swf嵌套的时候,很多错误都是路径引起的,所以尽量少使用_root之类的绝对路径,多用相对路径,比如我上面的代码就可以写成
this._parent._parent.loadswf(“about.swf”,262,150);
如果你自己都不清楚自己要引用的是哪个路径的话,教你个好办法:在你所要引用的路径的帧上写var path=this;这样要引用这个路径就可以用path.loadswf(…);了:)

下面是main.swf主时间轴上第一帧的代码,其中主要是自定义函数loadswf()

this._lockroot = true;                                              //这是为了让所有的_root都指向它
fscommand(“fullscreen”, true);
fscommand(“allowscale”, false);
loading_mc._visible=false;                                 //在这里也放置了前面制作的loading_mc
//loadswf()
function loadswf(url:String,hx:Number,hy:Number){  //自定义函数loadswf,hx为_x值,hy为_y值
if(container!=undefined){                        //如果在加载前,已经加载了另一个swf的话,需先
my_mcl.unloadClip(container);      //卸载它
}
var my_mcl=new MovieClipLoader();    //这个和前面的代码很相似,规范点的话,应该把
var mcllistener=new Object();                  //它进行封装的
var container=this.createEmptyMovieClip(“container”, this.getNextHighestDepth());
mcllistener.onLoadStart=function(){
loading_mc._visible=true;
loading_mc.loading_txt.text=”00.00″;
}
mcllistener.onLoadProgress=function(target, bytesLoaded, bytesTotal){
var loaded=100*bytesLoaded/bytesTotal;
loading_mc.loading_txt.text=loaded.toString().slice(0,5);
loading_mc.loading_txt._y=50-loaded/2;
}
mcllistener.onLoadComplete=function(){
loading_mc._visible=false;
}
mcllistener.onLoadInit = function(target){
target._x=hx;                                //定义加载的target的x和y坐标
target._y=hy;
}
my_mcl.addListener(mcllistener);
my_mcl.loadClip(url,container);
}

4>  music_mc
这里制作的是一个功能较全面的音乐播放器,通过动态加载music.xml来实现的,这里我们首次结合了flash和xml,下面先看下这个music.xml文件:

Music.xml:
<?xml version=”1.0″ encoding=”UTF-8″?>
<music>
<item url=”music\GloomySunday.mp3″ name=”GloomySunday” />
<item url=”music\我相信我能飞.mp3″ name=”I think I can fly” />
<item url=”music\我会永远爱你.mp3″ name=”I’ll allways love you” />
<item url=”music\勿伤我心.MP3″ name=”Don’t hurt me” />
<item url=”music\敬重.mp3″ name=”Respect” />
<item url=”music\毕业生.MP3″ name=”Graduation” />
</music>

大气 时尚 另类 设计

这是正在播放的样子

我们可以看到,第一个图的”music”是个动态文本num_txt,在没有音乐播放时显示”music”,在有音乐播放时和前面做的loading效果一致,显示播放进度,并改变其x坐标;并且第一个图的标尺上我做了一个隐形按钮control_btn,点击(press)时音乐面板展开(当然利用mc的事件可以不需要用隐形按钮的,另外我使用的时onPress事件,可以改成onMouseOver时展开,onMouseOut时回收,依自己的喜好而定)。
再看下第二张图,中间上面有”1″….”6″的实际上是一个MC(select_mc),这个MC主要包括一个动态文本(select_txt)和一个按钮(rec_btn),flash从music.xml中读取信息,通过attachMovie把select_mc排列起来,点击每个select_mc后,会传递相应的变量给自定义的函数soundid,函数soundid负责播放音乐。
在第三张图中可以看到,在中间还有个动态文本name_txt,当播放时显示音乐名称,就是music.xml中每个item的属性name的值(你可以做成滚动歌词的),并且在暂停,停止…会显示控制信息。
最下面的就是控制菜单了,依次时播放(start_btn),步进(step_btn),步退(back_btn),停止(stop_btn),暂停(pause_btn)和一个音量控制条,滑块为sound_mc

上面所说的只要细心就行了,下面就是编程了,可能对新手来说有点难,不过不要泄气,遇到不懂的多看看flash的帮助文档。

首先是通过control_btn来控制control_mc的显隐的:

num_txt.text=”music”;         //num_txt默认时显示”music”
control_mc._visible=false;    //control-mc默认隐藏
var vis=0;                                //这是一个开关变量,通过它来控制control_mc的显隐
control_btn.onPress=function(){                         //这段程序不难理解吧
if(vis==0){
control_mc._visible=true;
vis=1;
}else if(vis==1){
control_mc._visible=false;
vis=0;
}
}

下面这些代码就是比较重要的了:

var music_xml=new XML();              //定义xml对象
var music=new Array();                    //定义一个数组对象,实质上是一个对象数组,就是说它的每
var count:Number=0;                        //个数组元素都是一个对象
music_xml.ignoreWhite=true;           //忽略空白
music_xml.onLoad=function(success){
if(success){
parse();                  //parse()是一个自定义函数,在加载成功时调用
}
}
music_xml.load(“xml/music.xml”);     //加载xml文件,onLoad事件最好写在load的前面
//parse()

//在后面的制作中多次使用flash+xml,且xml的格式基本一致,所以按编程规范来说,应该自定义一//个类来实现,或把这段代码抽象,进行代码公用,不过我没这么做,那样对没有OOP经验的人来//说理解起来有点麻烦

function parse(){
var e=music_xml.firstChild.childNodes;
count=e.length;
for(var i=0;i<count;i++){     //如果下面的代码不理解的话,看下XML类的介绍
var musicobject=new Object();
musicobject.url=e.attributes.url;
musicobject.name=e.attributes.name;
music=musicobject;
var item=this.attachMovie(“select_mc”,”select”+i,this.getNextHighestDepth());
//注意select_mc必须有一个链接ID, 这里还是select_mc
item.id=i;
item._x=12*i;   //设置item的坐标,因为每个select-mc是10px宽,间隔2px,所以这
item._y=-22;     //里为12*i
item.select_txt.text=i+1;   //设置item中select_txt的值
item.rec_btn.onRelease=function(){    //当rec_btn触发onrelease事件时调用soundid
//函数
soundid(music[this._parent.id].url,music[this._parent.id].name);
}
}
}
//
var soundbool=false;
var mid:Number=1;
var position=0;
var mysound:Sound=new Sound();                    //定义sound对象
function soundid(url,name){              //自定义函数soundid,接收两个参数
mysound.loadSound(url,true);           //可以参看Sound类的介绍
this.onEnterFrame=function(){
if(mysound.getBytesLoaded()>=mysound.getBytesTotal()){
name_txt.text=name;
mysound.setVolume(int((this._parent._x-95)*2));
mysound.start();
delete this.onEnterFrame;
}else{
name_txt.text=”loading…”;
}
}
}
//
start_btn.onRelease=function(){                //播放
if(soundbool==false){
soundid(music[mid-1].url,music[mid-1].name);
}else if(soundbool==true){
mysound.start(position);
name_txt.text=music[mid-1].name;
}
}
stop_btn.onRelease=function(){                 //停止
mysound.stop();
name_txt.text=”stop”;
}
step_btn.onRelease=function(){                     //步进
if(mid<count){
mid++;
soundid(music[mid-1].url,music[mid-1].name);
}
}
back_btn.onRelease=function(){                     //步退
if(mid>1){
mid–;
soundid(music[mid-1].url,music[mid-1].name);
}
}
pause_btn.onRelease=function(){                       //暂停
position=mysound.position/1000;
mysound.stop();
name_txt.text=”pause”;
soundbool=true;
}
sound_mc.sound_btn.onPress=function(){            //音量的滑块滑动
sound_mc.startDrag(false,95,2.3,145,2.3);
}
sound_mc.sound_btn.onRelease=sound_mc.sound_btn.onReleaseOutside=function(){
sound_mc.stopDrag();
var t=int((this._parent._x-95)*2);
mysound.setVolume(t);
}
_root.music_mc.onEnterFrame=function(){
var f=(mysound.position/mysound.duration)*100;
if(isNaN(f)){
_root.music_mc.num_txt.text=”music”;//不播放时显示”music”
}else{
_root.music_mc.num_txt.text=f.toString().slice(0,5);//播放时显示播放进度,并设置
_root.music_mc.num_txt._x=50.7+f/2;                                    //num_txt的坐标
}
}

好了,现在main.swf的内容说完了,下面是每个分栏目的swf了-TVCD另类创意工作室