8

मैं अपने फ़्लैश खेल में अधिकांश उपयोगकर्ता त्रुटियों की निगरानी (और सर्वर पर लॉग इन) करता हूं। अक्सर मैं क्रॉस-डोमेन यूआरएल (आमतौर पर फेसबुक ग्राफ एपीआई) के अनुरोध करने की कोशिश करने से संबंधित सुरक्षा त्रुटियों को देखता हूं। हमारे 99% खिलाड़ी इन ग्राफ एपीआई कॉल को बिना किसी समस्या के बना सकते हैं।crossdomain.xml नीति फ़ाइल लोड करते समय नेटवर्क विफलताओं के बारे में क्या करना है?

मुझे क्या लगता है कि क्लाइंट एक अनुरोध करता है, लेकिन crossdomain.xml फ़ाइल लोड करने में विफल रहता है। मुझे पता नहीं है कि एएस 3 क्रॉसडोमेन नीति फ़ाइल लोड करने में विफलता के मामले में इसे कैसे संभालता है ... क्या यह प्रत्येक URLRequest के लिए फिर से प्रयास करेगा जब तक कि इसे लोड करने में सफल न हो, या यह हमेशा के लिए छोड़ देता है? इस तरह की सुरक्षा त्रुटि के जवाब में "सर्वोत्तम अभ्यास" क्या है?

मैं पूर्व लोड हो रहा हूँ फेसबुक नीति फ़ाइलें एक बार, समय से आगे कर देते हैं:

// 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

यहां एक समाधान है जो काम पर प्रतीत होता है।

आप एक URLLoader उपयोग कर रहे हैं डोमेन एक crossdomain.xml फ़ाइल है कि में से एक से डेटा पढ़ने और आप crossdomain.xml प्रीलोड करने loadPolicyFile बुला रहे हैं मान लिया जाये, इस बात की संभावना है कि लोड असफल हो जायेगी, या तो नेटवर्क कनेक्टिविटी से है मुद्दों या सर्वर से नीचे, या सौर flares से। जब आप अपना URLLoader सेट अप करते हैं, तो आप SecurityErrorEvent.SECURITY_ERROR के लिए इवेंट श्रोता जोड़ सकते हैं। यहां तक ​​कि श्रोता में, आप नीति फ़ाइल को दोबारा लोड करने का प्रयास कर सकते हैं। पॉलिसी फाइलें कैश हो जाती हैं, भले ही वे लोड करने में असफल हों (धन्यवाद एडोब), इसलिए आपको कैश बस्टिंग क्वेरी पैरामीटर जोड़ना होगा।

यह इस तरह काम करेगा का एक सरल उदाहरण है:

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 सेकंड तक फिर से प्रयास करता है, इसलिए मुझे लगता है कि एक त्रुटि संदेश दिखाना संभव है और कुछ सेकंड के बाद पुनः प्रयास करें।

संबंधित मुद्दे