Stu*_*Stu 8 security flash facebook actionscript-3 facebook-graph-api
我在我们的Flash游戏中监控(并记录到服务器)大多数用户错误.我经常看到与尝试向跨域URL(通常是Facebook Graph API)发出请求相关的安全性错误.99%的玩家可以毫无问题地进行这些图形API调用.
我认为正在发生的是客户端发出请求,但无法加载crossdomain.xml文件.我不太知道AS3中未能加载跨域策略文件的情况下如何处理这... ...它重试,每URLRequest做,直到它成功地加载它,或者它只是给了下去吗?响应此类安全错误的"最佳实践"是什么?
我提前一次预加载Facebook政策文件,如下所示:
// allow images to be loaded from facebook and facebook's cdn's.
Security.loadPolicyFile( "http://www.facebook.com/crossdomain.xml" );
Security.loadPolicyFile( "https://api.facebook.com/crossdomain.xml" );
Security.loadPolicyFile( "https://graph.facebook.com/crossdomain.xml" );
Security.loadPolicyFile( "http://profile.ak.fbcdn.net/crossdomain.xml" );
Run Code Online (Sandbox Code Playgroud)
然后我也有闪光检查策略文件时再次制作URLRequest.
小智 2
这是一个似乎有效的解决方案。
假设您正在使用 aURLLoader从具有 crossdomain.xml 文件的域之一读取数据,并且您正在调用loadPolicyFile预加载 crossdomain.xml,则加载有可能因网络连接问题或来自正在运行的服务器而失败。下降,或来自太阳耀斑。当您设置 时URLLoader,您可以为 添加事件侦听器SecurityErrorEvent.SECURITY_ERROR。在偶数侦听器中,您可以尝试再次加载策略文件。即使策略文件无法加载(感谢 adobe),策略文件也会被缓存,因此您必须添加缓存清除查询参数。
这是一个简单的例子来说明这是如何工作的:
public function loadMyFriends():void {
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(
SecurityErrorEvent.SECURITY_ERROR, handleSecurityError);
urlLoader.load(new URLRequest('https://graph.facebook.com/me/friends'));
}
private function handleSecurityError(event:Event):void {
Security.loadPolicyFile(
"https://graph.facebook.com/crossdomain.xml?__cb"=Math.random());
loadMyFriends();
}
Run Code Online (Sandbox Code Playgroud)
在实践中,如果确实是网络连接问题而不仅仅是负载均衡器未正确处理的失效服务器,您可能希望限制重试次数,并且可能会进行指数回退。