2011-09-13 17 views
8

Superviso (y registro al servidor) la mayoría de los errores de usuario en nuestro juego flash. Con bastante frecuencia veo errores de seguridad relacionados con tratar de realizar solicitudes a una URL de dominio cruzado (por lo general, la API Graph de Facebook). El 99% de nuestros jugadores pueden realizar estas llamadas API de gráficos sin problemas.¿Qué hacer con las fallas de la red al cargar el archivo de política crossdomain.xml?

Lo que creo que está sucediendo es que el cliente realiza una solicitud, pero no puede cargar el archivo crossdomain.xml. No sé muy bien cómo AS3 maneja esto en el caso de una falla al cargar el archivo de política de dominio cruzado ... ¿volverá a intentarlo por cada URLRequest hecho hasta que tenga éxito en cargarlo, o simplemente se rinde para siempre? ¿Cuál es la "mejor práctica" en respuesta a un error de seguridad como este?

Estoy pre-cargar los archivos de política de Facebook una vez, antes de tiempo, así:

// 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"); 

entonces también tiene el flash comprobar el archivo de política de nuevo al hacer la URLRequest.

Respuesta

2

Aquí hay una solución que parece funcionar.

Suponiendo que usted está usando un URLLoader para leer datos de uno de los dominios que tiene un archivo crossdomain.xml y que está llamando loadPolicyFile para precargar /crossdomain.xml, existe la posibilidad de que la carga se producirá un error, ya sea desde la conectividad de red problemas o de un servidor que está caído, o de erupciones solares. Cuando configura su URLLoader, puede agregar un detector de eventos para SecurityErrorEvent.SECURITY_ERROR. En el oyente par, puede intentar cargar el archivo de política nuevamente. Sin embargo, los archivos de política se almacenan en caché, incluso cuando no se pueden cargar (gracias adobe), por lo que tendrá que agregar un parámetro de consulta de prevención de almacenamiento en memoria caché.

Aquí es un ejemplo sencillo de cómo funcionaría:

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(); 
} 

En la práctica, es probable que desee limitar el número de reintentos y tal vez hacer un back-off exponencial si realmente es una conectividad de red problema y no solo un servidor inactivo que un equilibrador de carga no está manejando correctamente.

0

Mis pruebas han demostrado que se vuelve a intentar hasta cada 10 segundos más o menos, así que supongo que debería ser posible mostrar un mensaje de error y volver a intentarlo después de unos segundos.

Cuestiones relacionadas