8

私はフラッシュゲームでほとんどのユーザーエラーを監視し(そしてサーバーにログオンします)非常に頻繁に、クロスドメインURL(通常はFacebook Graph API)にリクエストを作成しようとする際のセキュリティエラーが発生します。 99%のプレイヤーがこれらのグラフAPIコールを問題なく作成できます。crossdomain.xmlポリシーファイルをロードするときのネットワーク障害についてどうしたらいいですか?

私が考えているのは、クライアントが要求を出しても、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を行う際にもう一度ポリシーファイルをチェックし点滅しています。

答えて

2

ここではうまくいくソリューションがあります。

あなたはcrossdomain.xmlファイルを持っているドメインのいずれかからデータを読み取るためにURLLoaderを使用していて、crossdomain.xmlのをプリロードするloadPolicyFileを呼び出していると仮定するとは、ネットワーク接続のいずれかから、負荷が失敗する可能性があります問題が発生したり、サーバーがダウンしたり、太陽フレアが発生したりする可能性があります。 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(); 
} 

、あなたはおそらく、再試行の回数を制限したいと思う、多分それは本当にネットワーク接続の場合は指数バックオフを行いますロードバランサによって適切に処理されていないデッド・サーバだけではありません。

0

私のテストでは、最大10秒間に再試行することが示されていますので、エラーメッセージを表示して数秒後に再試行する必要があるはずです。

関連する問題