[读后感]思考于“关于socket voip后台保持长连被苹果拒了”
太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商业用途-保持一致”创作公用协议
转载请保留此句:太阳火神的美丽人生 - 本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
从以下来看,苹果现在已经从技术层面走出来,开始向内容的审核大踏步前进。
所以,还有想偷机取巧的兄弟,您还是小心为妙。
说来,在后台保持长链接,无非是能给予服务端一个直接向客户端通讯的通道而已,这种实时的方式虽好,但苹果更关注用户体验与用户隐私。
想来,对客户端的标识,并非直连这一种方式,虽然UDID不允许使用了,但苹果官方建议的 UUID 唯一生成标识的方法,也很不错的。
一个应用安装到一个设备上,第一次运行,就自动生成此 UUID,存储于沙盒之中,这足以唯一标识一台设备,更确切地说,标识一台设备上的该应用。
而登录验证,是一种使用该应用的鉴权方式,它并不能标识当前设备。
由设备标识和用户信息组合,就能充分地确定哪个用户在哪台设备上登录使用本应用,这应该是完整鉴权,包括后续的生命周期管控。
相对 Android 来讲,苹果更适合短链接的无状态交互管理,每一次的网络请求,均有应答返回,完成一次网络交互;请求带着来源标识:设备标识和用户标识;
如果想避开 UUID 这个大长串,那么,把你的乱七八槽的东西放到自动存包柜里,拿到一个存包柜的编号就好了,要用的时侯,直接拿这个编号去取不会出现差错,因为存包柜统一发放编号,而且数位也就两三位而已,想必 UUID 再缩也小不到这个程度。
下面是译文和回复,都很精典,再往下是原文,标题的链接。
部分译文如下:
我们发现您的应用使用了后台模式,但并未包含任何需要该模式持久运行所对应的功能。该行为与 苹果商店审查指导方针不相容。
我们注意到,您的应用在 Info.plist 文件中 UIBackgroundModes 键里声明了支持 VOIP ,但未提供任何 VOIP 服务。
回复摘要:
关于socket voip后台保持长连被苹果拒了
----- 2.16 -----
We found that your app uses a background mode but does not include functionality that requires that mode to run persistently. This behavior is not in compliance with the App Store Review Guidelines.
We noticed your app declares support for VoIP in the UIBackgroundModes key in your Info.plist but does not provide any Voice over IP services.
We recognize that VoIP can provide "keep alive" functionality that many app features would like to use. However, using VoIP in this manner is not the intended purpose of VoIP, which, as indicated in the iOS Application Programming Guide, is that: "A Voice over Internet Protocol (VoIP) application allows the user to make phone calls using an Internet connection instead of the device's cellular service."
It would be appropriate to add VoIP features or remove the "VoIP" setting from the UIBackgroundModes key.