2013-08-23 13 views
5

हमारे आईओएस खेल में, हम अपने खुद के सर्वर का उपयोग उपकरणों में अपने डेटा खिलाड़ियों की पहचान करने और सिंक करने के लिए खेल केंद्र का उपयोग कर रहे कभी नहीं किया गया है। चूंकि गेम सेंटर खिलाड़ियों की पहचान करता है, हमें यह जानने की जरूरत है कि वे प्रमाणीकृत हैं या नहीं, या यदि उन्होंने प्रमाणीकरण बदल दिया है, आदि। हमारे पास एक शीर्षक स्क्रीन है जो प्रमाणीकरण कॉल रिटर्न तक "गेम प्रारंभ करना ..." प्रदर्शित करती है, और केवल एक बार हम जानते हैं कि वे किसके रूप में प्रमाणित हैं (यदि कोई है) हम खेल में जाते हैं।कभी कभी खेल केंद्र प्रमाणीकरण हैंडलर कहा जाता

हालांकि, समय की एक बहुत छोटी राशि (वास्तव में, मैं इसे अपने आप पुन: पेश नहीं कर सकते), प्रमाणीकरण हैंडलर कभी नहीं कहा जाता है, कभी। प्रतीक्षा के कुछ मिनटों के बाद भी नहीं। खेल केंद्र स्वागत बैनर कभी भी प्रदर्शित नहीं करता है, इसलिए ऐसा नहीं है कि केवल हमारे हैंडलर को कभी नहीं बुलाया जाता है, लेकिन वास्तव में कोई प्रमाणीकरण स्थिति नहीं है, ऐसा लगता है।

अब तक हम 30 सेकंड का समय समाप्त जहां अगर हम खेल केंद्र से कुछ भी नहीं सुना, हम यह मान प्रमाणीकरण स्थिति नहीं बदली है क्रियान्वित किया है, और हम अपने सहेजे गए डेटा का उपयोग करें। वह 30 सेकंड टाइमआउट आदर्श नहीं है, इसलिए मुझे आश्चर्य है कि क्या कोई कविता या कारण है जब जीसी प्रतिक्रिया नहीं दे रहा है।

यहाँ कोड है कि हमारे अनुप्रयोग प्रतिनिधि के application: didFinishLaunchingWithOptions: विधि से कहा जाता है:

PlayerModel *playerModel = [PlayerModel sharedPlayerModel]; 
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; 
if ([localPlayer respondsToSelector:@selector(setAuthenticateHandler:)]) 
{ 
    localPlayer.authenticateHandler = ^(UIViewController *gkViewController, NSError *error) 
    { 
     if (localPlayer.authenticated) 
     { 
      [playerModel loadFromGameCenter]; 
      playerModel.hasGCStatus = TRUE; 
      [playerModel sync]; 
     } 
     else if (gkViewController) 
     { 
      [viewController presentViewController:gkViewController animated:TRUE completion:nil]; 
     } 
     else 
     { 
      NSLog(@"Could not authenticate with Game Center"); 
      [playerModel unloadFromGameCenter]; 
      playerModel.hasGCStatus = TRUE; 
      [playerModel sync]; 
     } 
    }; 
} 
else 
{ 
    [localPlayer authenticateWithCompletionHandler:^(NSError *error) { 
     if (localPlayer.authenticated) 
     { 
      [playerModel loadFromGameCenter]; 
      playerModel.hasGCStatus = TRUE; 
      [playerModel sync]; 
     } 
     else 
     { 
      NSLog(@"Could not authenticate with Game Center"); 
      [playerModel unloadFromGameCenter]; 
      playerModel.hasGCStatus = TRUE; 
      [playerModel sync]; 
     } 
    }]; 
} 
+0

क्या आप सुनिश्चित हैं कि स्थानीय प्लेयर शून्य नहीं है? क्या आपके पास आईओएस संस्करण के साथ कोई अनुमान है, हैंडलर को नहीं कहा जाता है? क्या यह अंतिम संस्करण या बीटा है? यदि आईओएस 7 बीटा, ऐप्पल को एक बग रिपोर्ट भरें। क्या आप निश्चित रूप से पूरा करने के लिए हैंडलर को अन्य जगह पर सेट नहीं करना चाहते हैं? – Gougou

+0

क्या होता है? क्या यह त्रुटि लॉग करता है, या कुछ भी नहीं? यह जानना अच्छा होगा कि आउटपुट क्या है, जब खेल केंद्र काम नहीं करता था। – Binarian

+0

@ गौगौ यह आईओएस 6 पर मेरे ज्ञान के सर्वोत्तम, बीटा संस्करणों के साथ नहीं हो रहा है। –

उत्तर

3

मैं सैंडबॉक्स सर्वर पर हमारे खेलों में से एक पर परीक्षण के दौरान यह अनुभव नहीं था, वहाँ वास्तव में कोई सूचना या प्रमाणीकरण हैंडलर फोन था कभी-कभी, तो यह सिर्फ आधे घंटे बाद काम करेगा।

हम summised है कि यह एप्पल के सर्वर अंत की वजह से था हम खेल केंद्र sandbox के बाहर इस समस्या का सामना करना पड़ा कभी नहीं के रूप में।

क्षमा करें कि स्पष्टीकरण थोड़ा अस्पष्ट है और आप कुछ भी ठोस नहीं कर सकते हैं। लेकिन यह आपका कोड नहीं है। यह अंत में है कि आप नियंत्रण नहीं कर सकते हैं।

+0

यह शायद सबसे अच्छा जवाब उपलब्ध है।मैं इसे स्वीकार करने वाला नहीं हूं, आशा करता हूं कि वहां एक और जवाब है (बक्षीस वैसे भी समाप्त हो गया है)। फिर भी धन्यवाद। –

+0

कोई चिंता नहीं, कभी-कभी सेब की सेवाएं महसूस करती हैं कि वे प्रवाह में हैं और इसके कारण होने वाली सभी समस्याओं को पकड़ने के संतोषजनक तरीके से कोई संतोषजनक तरीका नहीं है। –

+0

@RuddZwolinski क्या आपको मुख्य गेम सेंटर सर्वर (उदाहरण के लिए एक सैंडबॉक्स नहीं) पर यह समस्या है? क्योंकि मुझे एक ही समस्या है, सिवाय इसके कि मेरे मामले में यह एक यादृच्छिक घटना नहीं है। ऐसा तब होता है जब मैं लॉगिन फॉर्म रद्द करता हूं, फिर इस दृश्य नियंत्रक से पिछले एक में पॉप करता हूं। और उसके बाद एक बार प्रमाणीकरण बुलाओ। दूसरी बार मुझे कोई प्रतिक्रिया नहीं मिली है। मुझे नहीं पता कि क्या करना है =/मैं एक सैंडबॉक्स गेम सेंटर पर हूं। –

0

कोशिश GKPlayerAuthenticationDidChangeNotificationName जो प्रमाणीकरण के बाद सूचित करना चाहिए सुन रहा। यह कम से कम एक लापता संदेश का अनुमान लगा सकता है।

यह संभव है कि समस्या ऐप्पल के सर्वर पर हो। आप अपने आईफोन का उपयोग करते हुए नेटवर्क प्रॉक्सी से वायरशर्क ट्रेस चलाकर इसे खत्म कर सकते हैं। अगर यह केवल अन्य लोगों के फोन से देखा जाता है, तो हो सकता है कि नेटवर्क कनेक्टिविटी और पहुंचने योग्यता को लॉग इन करें, यदि वे अपने अंत में विशेष नेटवर्क ईवेंट को दोषी मानते हैं तो वे सहसंबंध का अनुभव करते हैं।

इसके अलावा इसके लायक NSErrors मामले में अपने कोड के भाग के रूप प्रवेश करने अपने आप कुछ है जो अनदेखी की जा रही बताने के लिए कोशिश कर रहा।

0

हमने यहां एक ही समस्या का अनुभव किया जिसे हमने महसूस किया केवल वाईफ़ाई पर कुछ लोगों के लिए हुआ। यह पता चला है कि GameCenter को काम करने के लिए फ़ायरवॉल भत्ते की हास्यास्पद संख्या की आवश्यकता होती है: https://support.apple.com/en-us/HT202944 हमें विश्वास है कि समस्या यह है कि कुछ नेटवर्क इन बंदरगाहों को अवरुद्ध करते हैं, जिसके बाद कॉल का जवाब कभी नहीं होता है।

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