हमारे आईओएस खेल में, हम अपने खुद के सर्वर का उपयोग उपकरणों में अपने डेटा खिलाड़ियों की पहचान करने और सिंक करने के लिए खेल केंद्र का उपयोग कर रहे कभी नहीं किया गया है। चूंकि गेम सेंटर खिलाड़ियों की पहचान करता है, हमें यह जानने की जरूरत है कि वे प्रमाणीकृत हैं या नहीं, या यदि उन्होंने प्रमाणीकरण बदल दिया है, आदि। हमारे पास एक शीर्षक स्क्रीन है जो प्रमाणीकरण कॉल रिटर्न तक "गेम प्रारंभ करना ..." प्रदर्शित करती है, और केवल एक बार हम जानते हैं कि वे किसके रूप में प्रमाणित हैं (यदि कोई है) हम खेल में जाते हैं।कभी कभी खेल केंद्र प्रमाणीकरण हैंडलर कहा जाता
हालांकि, समय की एक बहुत छोटी राशि (वास्तव में, मैं इसे अपने आप पुन: पेश नहीं कर सकते), प्रमाणीकरण हैंडलर कभी नहीं कहा जाता है, कभी। प्रतीक्षा के कुछ मिनटों के बाद भी नहीं। खेल केंद्र स्वागत बैनर कभी भी प्रदर्शित नहीं करता है, इसलिए ऐसा नहीं है कि केवल हमारे हैंडलर को कभी नहीं बुलाया जाता है, लेकिन वास्तव में कोई प्रमाणीकरण स्थिति नहीं है, ऐसा लगता है।
अब तक हम 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];
}
}];
}
क्या आप सुनिश्चित हैं कि स्थानीय प्लेयर शून्य नहीं है? क्या आपके पास आईओएस संस्करण के साथ कोई अनुमान है, हैंडलर को नहीं कहा जाता है? क्या यह अंतिम संस्करण या बीटा है? यदि आईओएस 7 बीटा, ऐप्पल को एक बग रिपोर्ट भरें। क्या आप निश्चित रूप से पूरा करने के लिए हैंडलर को अन्य जगह पर सेट नहीं करना चाहते हैं? – Gougou
क्या होता है? क्या यह त्रुटि लॉग करता है, या कुछ भी नहीं? यह जानना अच्छा होगा कि आउटपुट क्या है, जब खेल केंद्र काम नहीं करता था। – Binarian
@ गौगौ यह आईओएस 6 पर मेरे ज्ञान के सर्वोत्तम, बीटा संस्करणों के साथ नहीं हो रहा है। –