Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 加载crossdomain.xml策略文件时如何处理网络故障?_Flash_Actionscript 3_Facebook_Security_Facebook Graph Api - Fatal编程技术网

Flash 加载crossdomain.xml策略文件时如何处理网络故障?

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策略文件,如

我监控(并登录到服务器)我们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" );

然后,在执行
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();
}
实际上,如果这确实是一个网络连接问题,而不仅仅是一个没有被负载平衡器正确处理的死机,那么您可能希望限制重试次数,并可能进行指数退避