获得屏幕的尺寸:
[[UIScreen mainScreen] applicationFrame];
初始化一个视图:
UIView mainView = [[UIView alloc] initWithFrame:mainScreen];
下面的代码可以改变视图的大小和位置:
UIView mainView = [[UIView alloc] initWithFrame:mainScreen ]; [mainView setFrame:CGRectMake(130.0f,187.0f,60.0f,60.0f)];
添加试图使用如下方法:
[window addSubview: mainView]; [window addSubview: mainView];
注意:后添加的试图显示在先添加的试图的上面
最近想做一个游戏服务器和 IM 互通的服务。最初的想法是可以增进游戏帐号的安全,比如游戏用户可以通过绑定一个 IM 帐号,从而不用登陆游戏就向游戏服务器发一些指令。这些指定通常是用来冻结一些帐号的功能。而游戏服务器也可以通过 IM 帐号向离线用户发送一些关键消息。这样,只需要解除绑定 IM 帐号需要一定的时间,或使用更安全的途径,即可以让游戏帐号更加安全。(至少,游戏用户可以从 IM 上获知他的游戏帐号每次登陆登出的时间、IP 等等)
后来细想,这里面可以做的东西还有许多。玩家会因为多一个信息通道,而更轻松的去玩那些需要长期驻留的游戏。游戏厂商也可以多一个挽留玩家的渠道,甚至用来宣传新游戏或游戏的增值服务,等等。好处不再列举。
其实、绑定 IM 帐号和绑定手机号本质上区别不大。只不过,IM 帐号几乎是零费用,又不像 SMS ,控制权掌控在移动手里。IM 更适合做双向交流(SMS 的双向交流不那么方便,而且对用户和游戏运营商都有经济负担)。独立提供一个 Game2IM 的服务供众多游戏运营商使用也是个有趣的主意。和 SMS 一样,只要给出一个简单接口让游戏运营商调用,把游戏网络和 IM 网络互联就可以了。
实现这个想法有两个方案。
其一是制作各种 IM 的机器人,通过机器人和用户 IM 沟通。这个方案技术门槛稍低,有许多现成的机器人可以使用。缺点是,受 IM 提供商的限制(比如好友数量限制)。无法使用机器人的签名针对性的向用户传递特有的消息。除非你为每个游戏用户定制一个机器人,但那样,每个机器人都需要 单独一个连接,对资源消耗过大。
第二个方案就是使用已有的 IM 互通方案,自己提供一个特有的 Game-IM 网络,跟已有的 IM 网络互通。比较流行的 IM 互通协议用基于 SIP 的 SIMPLE 和起源于 Jabber 的 XMPP 。
我最常用的 IM 是 google talk ,本身就实现了标准的 XMPP Client 和 XMPP Server 协议;而我们的 网易 popo 也实现了 XMPP 的 s2s 网关。我想研究一下 XMPP 是个不错的选择。
花了一整天的时间,把 XMPP 核心协议 仔细通读了一遍,收获颇多。原来以为 XMPP 是个可怕的巨无霸。我对 XML 原本也没有太多好感。最后,看法有所改变。
其实,XMPP 仅仅是定义了一个网络服务间相互通讯的协议。它已经把服务间需要关心的东西减少到了最少。具体的应用每家服务提供商可以随意扩展。popo 在制作新版本时,我曾多次建议采用已有的标准协议,再此基础上开发自己的东西。当时或许大家都认为标准协议容易促手促脚,我当时也没啥研究,没有多言。今 天看来,我更觉得这是一个决策失误。本来我们有一个很好的机会,利用 popo 联系起网易的各种服务,现在这条路将走的更为艰辛。其实,XMPP 定义的东西,即使自己去设计也会定义出类似的一套来。而把各种网络服务互通本该是发展的重点,为 IM Client 增添专有花哨的特性就有些舍本逐末了。更为恼火的是,popo 到现在也没有一个很好的非 Windows 平台。怎能让诸多把握着互联网上部分话语权的技术人士接受?(或者,同在杭州的 IT 圈子,popo 的开发人员是不是应该看看支付宝的同行们做了些什么 ?)
谈谈我对 XMPP 的粗浅理解。这些仅仅建立在我对 RFC3920 的一天阅读的基础上,难免会有错误,不足以做技术参考。
XMPP 抽象出一个在互联网上唯一的对象实体,用 JID 来表达。通常一个 JID 由三部分组成,node@domain/resource 。比 email 的表达形式多了一个 /resource 。这是因为 email 地址本身虽然可以表达一个实体,都是往往不够表达这个实体下的具体服务。就好比一个 ip 地址可以表示一台机器,但是我们还需要 port 号来表达这台机器具体提供的服务一样。
用过 gtalk 的人应该很喜欢 gtalk 可以在不同的地方同时登陆这个不错的特性。用过以后,才能体会,无论是 qq 还是 msn 还是 popo ,只允许一个登陆是多么愚蠢的设定。gtalk 其实遵守了标准的 XMPP 协议,它用来区别一个帐号(一般是一个 gmail 邮件地址)的多处登陆,正是利用了不同的 resource 标识。
XMPP 规范的最重要的一条通信协议就是,如何把消息从一个 JID 发送到另一个 JID (message)。这有点像 email 协议,但不同的是,它强调了实时性和安全性(虽然不是必须的)。因为 JID 可以在不同的 domain 下,这就需要 domain 间相互协作。对于 IM 网络来说(XMPP 远不只用于 IM 协议),就是不同的 IM 服务间互通。
对于 domain 下的 xmpp 服务的发现,利用了 DNS 协议的一些功能。xmpp 的 s2s 服务提供位置,放在了 DNS 的 SRV 记录里。你可以用 nslookup 做个试验,启动 nslookup ,输入 set type=SRV
然后查询 _xmpp-server._tcp.gmail.com 你会发现 gmail.com 的 xmpp s2s 服务地址已经端口号 5269 。同样,也可以查询 _xmpp-server._tcp.163.com 或 _xmpp-server._tcp.popo.163.com 查到网易 popo 的 xmpp 中转服务器地址。
btw, 查询 _xmpp-client._tcp.gmail.com 可以查到 gtalk 的 client 登陆地址,而网易 popo 则没有提供 xmpp client 登陆点。
按 RFC3920 所述,在 xmpp server 互联的时候,会优先尝试获取 domain 的 SRV 记录,如果失败就直接去连默认的 6259 端口。然后就可以开始握手协议。
xmpp 比较强调 s2s 的安全性,所以推荐的握手都是建立在 TLS 层之上,使用 SASL 认证。TLS 层需要服务器有一个数字证书,为了安全可信,建议是找个根证书签名。不过自己签名也行,只需要服务器缓存证书即可。握手过程在 RFC3920 中描述的非常细致,可以按照其编码,问题不大。需要注意的是,这里的 XML 流格式要求很精确,不允许传输多余的东西。我一度认为采用 XML 会导致协议的实现上非常臃肿,其实不然。采用 XML 只是一个表象,适合人阅读和调错而已。RFC 中特别要求不去实现 XML 中的某某特性就是一例。我们不应该为了 XML 而去 XML 。
其实 XMPP 的 c2s 和 s2s 并无太大区别,s2s 做的人手我想是因为开源项目和开源库比较少吧。而开源的 client 实现则是一大堆。c2s 和 s2s 的通讯都是基于那几条协议而已,s2s 的实现难点在于握手比较复杂(其实 c2s 也一样,只是很多库帮你做好了)。c2s 是共享一个 tcp 连接做双向通讯;而 s2s 则是用两条 TCP 连接。两条连接也一定程度上避免了 s2s 的欺骗,当然真正的安全来至于 TLS 和 SASL 的保障。DNS 毕竟是一个很脆弱的东西。
除了点对点消息外,XMPP 定义了消息的组播。也就是一个 JID 可以以自己的名义发布消息 (presence)。而服务器来决定该发给谁。发送目标是由订阅消息决定的。其它多个 JID 可以订阅某个 JID 的消息。对于 IM 来说,最常用的就是上线下线等状态变化消息了。
第三条即是对某个 JID 的状态进行设置和获取 (iq)。于 IM 应用来说,设置签名,昵称,状态等都依赖于它。
XMPP 的核心协议无非规定了以上三种通讯协议,此外规范了服务器间互连的握手认证方案。然后给出了一些错误信息的表述方法。稍微了解过之后,很容易编写。如果希 望重造轮子的话,对于 C 语言开发者来说,最繁琐的可能是 XML 的解析于生成。我自己稍微考察了一下,有个叫 LoudMouth 的库还不错。
如果实现 s2s 网关的话,有些细节做起来可能很麻烦,比如查询 DNS 的 SRV 记录。这个在 jabberd 1.x 里其实有独立的模块实现好了 ,取来用即可 (见 dnsrv) 。而 TLS SASL 层的实现则早就有现成的开源库了。
实现一个 jabber server 或许比你想象的还简单。in.jabberd 居然只用 600 多行 C 代码就从零实现了一个 jabber 服务器。当然功能非常的简陋了。
转自http://www.coolcode.org/?action=show&id=347 原作者andot
由于和自己的使用体验很像,转了过来。离开wooboo其实有3个原因:1是单价不稳定,有时低得离谱;2是广告页面确实不如有米好看;3是自己有个应用被拒了。被拒的原因居然是不适合放广告!!!我真是被气死了!
---------------------------------------------
牢骚2句。javaeye敏感词好多啊!!!QQ-群,作-弊都是敏感词!我无语了!
--------------------------------------------
做 android 开发也有三个月了,在国内目前做 android 开发赚钱的途径不多,除了卖软件,就是免费软件+广告的模式。
而想通过卖软件的方式赚钱,目前在国内还是比较难的。
首先 google 的电子市场没有在大陆开放,要在 google 上卖软件要绕到香港、台湾或美国等地,一般人恐怕做不到。
而国内的移动MM,就更不用指望了,不要看移动MM上有不少看上去很弱智的软件还有很多人从上面购买就以为在移动MM上卖软件很好赚钱,但实际上你只要亲身体验过,你就知道,没有你想的那么容易。
首先移动MM上发布的软件有很多限制,最大的限制是不允许软件连网,在这个移动网络飞速发展的年代,移动的这个政策简直是与时代发展的方向背道而驰。
移动MM上可以发布收费软件,也可以发布免费软件,但是你不要指望可以发布带广告的免费软件,因为移动广告是需要联网的,而且移动MM明确有不能发布带有第三方广告的应用的政策。因此想通过在移动MM上发布免费+广告的软件来赚钱是没有可能的。
那我在移动MM上发布不使用网络的收费软件总可以赚钱吧?也没希望。首先在移动MM上发布一个软件,从上传到审核通过进入移动MM市场,这个周期是1个月到3个月的时间,这么长的审核周期你能受得了吗?其次当你真得审核通过了,你终于觉得可以赚钱的时候,你会再次的失望,你一个应用一个月卖得钱恐怕连你一天的饭钱都不够。
国内还有什么乐phone、魅族等市场。乐phone市场我没接触过,不做评价。魅族市场目前虽然对开发者开放了M9的市场,不过因为M9还没有上市,所以想靠M9发财,还要等好久。
既然卖软件不好赚钱,那就靠嵌入移动广告的软件来赚钱咯。如果你开发的软件是面向欧美等英语国家的,那么使用admob等国外的广告平台是首选,因为国内的广告平台上的广告基本上都是中文的,不适合欧美人的口味,他们也看不懂。
但是在国内做android开发你不可能完全忽略国内的用户群体吧,所以国内市场你肯定也要做,但是这种情况下,使用admob就不是很好了。
首先admob的中文广告很少很少,几乎很难见到。而且在国内经常还不显示,也就是说在国内的展示率很低。
其次admob的广告在国内的点击单价要比欧美低的多的多,admob的广告点击单价在欧洲一些国家是最高的,北美其次,亚洲最低。
再次admob的取款对国内来说很不方便。admob的结算方式要么用支票,要么用paypal。admob结算是隔月结算,也就是说8月的广告费要到10月中旬才结算,当然还要求达到规定的数额才行,这个数额好像是50美元。而支票寄出到收到又要半个月,基本上要到10月底或者11月初才能拿到支票,而拿到支票到银行取款又需要半个月到一个月的时间,所以通过支票方式至少要一个季度才能拿到钱。而用paypal结算也需要隔一个月才能拿到钱,虽然比用支票方式快一倍,但仍然时间很长,而且用paypal结算还有另一个弊端,从paypal提款是需要手续费的,这个手续费是35美元,另外,电汇到银行之后,银行也要收取一部分手续费,更糟糕的是,如果你的银行信息填写有误,提款没有成功的话,不但仍然需要你支付35美元的手续费,而且还要收取退款的手续费,据说一次失败的提款,会损失100美元。
鉴于以上三点,在国内还是使用本土的广告平台最好。但是国内的移动广告平台也是最近才刚刚开始发展的,我所知道的国内的广告平台有:有米(youmi)、哇棒(wooboo)、架势(casee)、微云这几个。
微云不仅仅是一个广告平台,还是一个游戏平台,并且有一套游戏引擎。但是我知道微云这个平台时间比较晚,因此到目前为止还没有使用过该平台。所以这里对比国内广告平台时,暂不列入微云这个平台。
有米、哇棒和架势这三个广告平台我都使用过,下面主要就这三个平台做以下对比总结。上面说了这么多其实都是废话,下面才是重点。
我是7月底8月初开始做android开发的,这三个广告平台当中,我最早知道的是有米,不过有米一直很低调,没有什么宣传,没有什么活动。所以一开始并没有使用该平台。当时wooboo有一个上传应用送100元的活动,而且在很多论坛都有宣传,因此,wooboo成为了我使用的第一个国内的广告平台。
开始的半个月感觉还不错,点击单价是1毛钱左右,点击率在1%,还算稳定。但是在8月中旬时,wooboo的服务器变的很不稳定,基本上天天崩溃,以至于广告展示次数只有之前的一半都不到,点击量和收入因此也是降了一半。这时我便开始考虑是不是要找一个其它的广告平台,作为备用。这时我才打算试一试有米。可能是刚刚转到有米上的原因,开始转到有米上的几天,有米上的广告展示次数很少,明显低于wooboo,现在想来可能是当时用户并没有升级到使用有米广告的版本所致,但是当时并没有考虑到这一点,因此过了还不到一个星期,当wooboo恢复了稳定,我就把后来的软件版本中又换回了wooboo。
就这样一直到8月底,一个偶然的机会看到了架势这个广告平台。
当时加了一个安智网开发者交流的QQ-群,而安智网跟架势是有合作的,架势的客服也在这个群里,他们一直说自己的广告平台不错,单价要比wooboo高,让我试一试。
我就抱着试试看的想法把当时的一个应用换成了架势的广告,跟最开始放有米广告一样,不到一个星期我就又换回了wooboo,但原因却不单单是点击次数明显少于wooboo,而且架势的统计页面信息少的可怜,只有一个有效点击次数和点击收入,连请求次数,展示次数都没有,点击率是多少更是不得而知。
当架势的客服跟我聊起他们的平台时,我把我的一些想法告诉了他们,比如统计信息不足,希望能够提供更多的统计信息,对 android 1.6 以上的 sdk 开发的软件支持不好,希望能够支持更高版本的 sdk。但是他们没有丝毫要改进的意思,倒是找了一大堆不改进的理由说给我听。
这时我便有了一个想法,那就是做一个软件,专门放这些广告,没有其它功能。通过这个软件就可以统计出各个广告平台的请求次数、展示次数、点击率、点击单价等信息。通过长期统计,就可以知道哪个平台更好了。
这个软件就是“广告自动送上门”,9月初这个软件发布之后,没想到确实每天都有人下载使用,虽然每天使用的人不多,但是非常稳定。这个软件里包含了admob、有米、wooboo和架势这几个广告平台的广告。其中admob和架势的广告请求成功和请求失败次数的比都是1:2,也就是如果有3次请求,只有1次成功,另外2次是失败的。而架势的请求次数也只有admob的一半。而有米的请求次数跟admob的是一致的,但成功率是99%以上,几乎没有失败的请求,也就是说有米的广告展示次数是admob的三倍,是架势的六倍。而wooboo的sdk没有提供请求成功与请求失败的事件,因此,没有wooboo这方面的统计信息。
但是wooboo和有米自己的平台上各自都有关于请求次数与展示次数的统计,有意思的是,有米平台上的统计次数要远远多于wooboo上的请求次数,平均是wooboo平台上请求次数的4倍。理论上说这两个平台的请求次数应该是一致的,即使有差别,也不应该有这么大差别,而且wooboo的两次广告展示时间的间隔和有米的两次广告展示时间的间隔是一样的,都是30秒。至于为什么会有这么大差别,我个人不便在这里妄加猜测。
从点击次数上来看:有米 ≈ wooboo ≈ admob > 架势。但是有米,wooboo,admob的点击次数很接近,远远大于架势的点击次数。
从单价上来看:有米 > admob > 架势 > wooboo。有米单价平均在2毛钱左右,多的时候0.22元,最少也有0.19元。admob单价略低于有米,因为是美元,换算成人民币,点击单价大约在0.2元到0.15元之间。架势的点击单价也算比较稳定,基本上就是0.15元,有时候略低于0.15元,但基本上没有低于0.1元的情况。wooboo的点击单价最低,而且随着时间的推移是越来越低,8月的时候wooboo的点击单价是0.1元左右(有时候0.11元,有时候0.09元),到9月中旬是已经降到了0.05元,而到了9月底甚至降到了0.02-0.01元。整个10月,点击单价都在0.02-0.01元左右徘徊。也就是说现在从单价上来看,有米、admob、架势的单价是wooboo的十倍甚至更多。
下面是这四个广告平台的(9月26日~10月5日)对比图表:
下面是有米的图表:
下面这个是wooboo的图表(仔细看你会发现后面的总收入跟前面的分项收入根本就不符):
下面这个是admob的,很详细的统计:
最后这个是架势的,信息少的可怜:
通过这个对比,在9月底时,我毅然的将国内的广告转到了有米的平台上,而国外的广告依然使用admob。而有米在10月中旬又正好进行了改版,改版时间比较长,中间也出现了不少问题,在改版期间,我跟有米的客服也没少唠叨,不过有米的客服都很不错,我所说的那些问题,他们都能很及时的帮忙解决,并且我给他们提了许多建议,他们也都能欣然接受。而且有一点让我很感动,之前admob出现过一次统计出错的问题,但是admob承诺将会把丢失的收入给补回来,而且他们也确实做到了。而有米在改版期间也出现了一次这样的问题,有米不但承诺要补回来,而且还要把那天的收入按照200%计算来补给开发者,最后他们也做到了,这点我觉得非常好。这至少说明有米是一个敢于负责任的公司。而之前wooboo同样出现过因为系统不稳定造成统计数据丢失的问题,而且不止一天,不止一次,但最后却没有一次承诺要给开发者补偿的,连承诺都没有当然更谈不上履行承诺了。而且从9月底开始单价飞流直下,本来wooboo的单价就已经是最低的啦,没想到对于wooboo来说,却是没有最低,只有更低,低到让你不敢相信会有那么低。这也是我为什么最后彻底放弃wooboo,换成有米的原因。之前使用wooboo时,国内广告的收入只有admob收入的1/3还不到,现在换成有米之后,国内收入已经基本上跟admob差不多了。
以上就是这三个月我对国内广告平台的感受对比。在这个激烈竞争的年代,一个广告平台要想长久健康的发展,单靠宣传是不够的,靠投机取巧是不行的,靠欺骗作-弊更是自取灭亡。客户的眼睛是雪亮的,不论是开发者,还是广告商。客户选择一个广告平台看中的当然是收入和效果,但更看中的是诚信、服务态度和责任感。一个广告平台想要健康发展必须要为客户提供真实的,准确的,足够多的信息,更多的听取客户的建议和意见,不断完善自己,并敢于为自己的错误承担责任,只有这样这个平台才能做大做强。
希望有米能在这条正确的道路上坚持走下去,同样希望国内其它的广告平台走上正规。
月底补充:
admob 在 10 月底开始走 wooboo 路线了,单价下降了 3 - 4 倍,并且每天都在持续下降中,有望赶上 wooboo 了。admob 的这种行为已经激怒了大部分使用 admob 的开发者,如果 admob 跟 wooboo 一样不思悔改,相信从下个月起,admob 将有大部分的开发者转投到其它的国外广告平台。