程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> GameCenter authenticate:GKErrorDomain Code=2 "The r

GameCenter authenticate:GKErrorDomain Code=2 "The r

編輯:C++入門知識

測試GameCenter的登陸authencitate,登陸方法如下:


[cpp]
-(void) authenticateLocalPlayer { 
    GKLocalPlayer* localPlayer = 
    [GKLocalPlayer localPlayer]; 
     
    localPlayer.authenticateHandler = 
    ^(UIViewController *viewController, 
      NSError *error) { 
         
        [self setLastError:error]; 
         
        if (CCDirector::sharedDirector()->isPaused()) { 
            CCDirector::sharedDirector()->resume(); 
        } 
         
        // Player already authenticated  
        if (localPlayer.authenticated) { 
            _gameCenterFeaturesEnabled = YES; 
        } else if(viewController) { 
            CCDirector::sharedDirector()->pause(); 
            [self presentViewController:viewController]; 
        } else { 
            _gameCenterFeaturesEnabled = NO; 
        } 
    }; 

-(void) authenticateLocalPlayer {
    GKLocalPlayer* localPlayer =
    [GKLocalPlayer localPlayer];
   
    localPlayer.authenticateHandler =
    ^(UIViewController *viewController,
      NSError *error) {
       
        [self setLastError:error];
       
        if (CCDirector::sharedDirector()->isPaused()) {
            CCDirector::sharedDirector()->resume();
        }
       
        // Player already authenticated
        if (localPlayer.authenticated) {
            _gameCenterFeaturesEnabled = YES;
        } else if(viewController) {
            CCDirector::sharedDirector()->pause();
            [self presentViewController:viewController];
        } else {
            _gameCenterFeaturesEnabled = NO;
        }
    };
}

 

使用GameCenter在模擬器上運行沒有問題,在真機上第一次登陸運行就遇到了NSError錯誤提示:


[cpp]
GKErrorDomain Code=2 "The requested operation has been cancelled." 

GKErrorDomain Code=2 "The requested operation has been cancelled."

 

正常情況下登陸,如果你的Apple ID默認已經登陸過,會彈出歡迎XX界面

第一次登陸,會彈出GameCenter登陸AppleID的提示框

localPlayer.authenticated值為false 表示登陸失敗,但是我的AppleID已經登陸過了,正常情況下是不應該失敗的

 


最後在stackoverflow上的一哥們的方法解決了 問題可能是由於登陸函數和模擬器上的函數綁定了。。。原因不太重要,重要的解決辦法

在View加載的地方調用一下如下函數:


[cpp]
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"gamecenter:"]]; 

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"gamecenter:"]];
把你的APPID登陸進去 然後點log out 再把上面的代碼從程序中刪除掉 

再重新在真機上調試你的程序即可

 


解決辦法參考:stackoverflow

 


GameCenter登陸需要注意:

1.ios6.0後需要手動設置authenticateHandler,authenticateWithCompletionHandler: 已經在6.0中丟棄不用了

2.authenticationHandler第一個參數viewController在AppleID沒有登陸的時候 需要手動顯示“登陸GameCenter"界面,還要需要注意暫停邏輯

[cpp]
localPlayer.authenticateHandler = 
    ^(UIViewController *viewController, 
      NSError *error) 

localPlayer.authenticateHandler =
    ^(UIViewController *viewController,
      NSError *error)3.這個登陸block函數在三種情況下會被調用:


當你設置了authenticationHandler並發出了驗證玩家的請求。
當app進入foreground(前台)。
在登錄時,例如玩家在進入游戲前沒有登錄,進入時會彈出登錄界面,在這個界面中的任何交互都會調用authenticationHandler。


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved