Flash 加载crossdomain.xml策略文件时如何处理网络故障?
我监控(并登录到服务器)我们flash游戏中的大多数用户错误。我经常看到与试图向跨域URL(通常是Facebook Graph API)发出请求相关的安全错误。99%的玩家可以毫无问题地调用这些图形API 我认为是这样的:客户端发出请求,但未能加载Flash 加载crossdomain.xml策略文件时如何处理网络故障?,flash,actionscript-3,facebook,security,facebook-graph-api,Flash,Actionscript 3,Facebook,Security,Facebook Graph Api,我监控(并登录到服务器)我们flash游戏中的大多数用户错误。我经常看到与试图向跨域URL(通常是Facebook Graph API)发出请求相关的安全错误。99%的玩家可以毫无问题地调用这些图形API 我认为是这样的:客户端发出请求,但未能加载crossdomain.xml文件。我不太清楚AS3在加载跨域策略文件失败的情况下是如何处理的……它会对每个URLRequest进行重试,直到加载成功,还是永远放弃?对于这样的安全错误,“最佳实践”是什么 我提前预加载了一次Facebook策略文件,如
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" );
然后,在执行
URLRequest
时,我还要再次对策略文件进行闪存检查。我的测试表明,它最多每10秒左右重试一次,因此我想应该可以显示错误消息,并在几秒钟后重试。以下是一个似乎有效的解决方案
假设您使用URLLoader
从其中一个具有crossdomain.xml文件的域读取数据,并调用loadPolicyFile
预加载crossdomain.xml,则加载可能会失败,原因可能是网络连接问题、服务器关闭或太阳耀斑。设置URLLoader
时,可以为SecurityErrorEvent.SECURITY\u 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();
}
实际上,如果这确实是一个网络连接问题,而不仅仅是一个没有被负载平衡器正确处理的死机,那么您可能希望限制重试次数,并可能进行指数退避