2014-02-13 3 views
3

Далее следует учебнику Ray Wenderlich по реализации Game Center с прошивкой 7Game Center IOS-не работает

http://www.raywenderlich.com/3276/game-center-tutorial-for-ios-how-to-make-a-simple-multiplayer-game-part-12

Однако я не получаю приглашение войти в ни приветственном назад баннер появляется, попытался многочисленные учебные пособия, не могу показаться, чтобы заставить его работать с прошивкой 7.

Вот мой код

GCHelper.h

#import <Foundation/Foundation.h> 
#import <GameKit/GameKit.h> 

@interface GCHelper : NSObject { 
    BOOL gameCenterAvailable; 
    BOOL userAuthenticated; 
} 

@property (assign, readonly) BOOL gameCenterAvailable; 

+ (GCHelper *)sharedInstance; 
- (void)authenticateLocalUser; 

@end 

GCHelper.m

#import "GCHelper.h" 

@implementation GCHelper 

@synthesize gameCenterAvailable; 

#pragma mark Initialization 

static GCHelper *sharedHelper = nil; 
+ (GCHelper *) sharedInstance { 
    if (!sharedHelper) { 
     sharedHelper = [[GCHelper alloc] init]; 
    } 
    return sharedHelper; 
} 

- (BOOL)isGameCenterAvailable { 
    // check for presence of GKLocalPlayer API 
    Class gcClass = (NSClassFromString(@"GKLocalPlayer")); 

    // check if the device is running iOS 4.1 or later 
    NSString *reqSysVer = @"4.1"; 
    NSString *currSysVer = [[UIDevice currentDevice] systemVersion]; 
    BOOL osVersionSupported = ([currSysVer compare:reqSysVer 
              options:NSNumericSearch] != NSOrderedAscending); 

    return (gcClass && osVersionSupported); 
} 

- (id)init { 
    if ((self = [super init])) { 
     gameCenterAvailable = [self isGameCenterAvailable]; 
     if (gameCenterAvailable) { 
      NSNotificationCenter *nc = 
      [NSNotificationCenter defaultCenter]; 
      [nc addObserver:self 
        selector:@selector(authenticationChanged) 
         name:GKPlayerAuthenticationDidChangeNotificationName 
        object:nil]; 
     } 
    } 
    return self; 
} 

- (void)authenticationChanged { 

    if ([GKLocalPlayer localPlayer].isAuthenticated && !userAuthenticated) { 
     NSLog(@"Authentication changed: player authenticated."); 
     userAuthenticated = TRUE; 
    } else if (![GKLocalPlayer localPlayer].isAuthenticated && userAuthenticated) { 
     NSLog(@"Authentication changed: player not authenticated"); 
     userAuthenticated = FALSE; 
    } 

} 

#pragma mark User functions 

- (void)authenticateLocalUser { 

    if (!gameCenterAvailable) return; 

    NSLog(@"Authenticating local user..."); 
    if ([GKLocalPlayer localPlayer].authenticated == NO) { 
     [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:nil]; 
    } else { 
     NSLog(@"Already authenticated!"); 
    } 
} 

@end 

и в моем заявлении сделал способ закончить запуск, у меня есть

[[GCHelper sharedInstance] authenticateLocalUser]; 

Это потому, что authenticateWithCompletionHandler устарела?

+1

@ sami- положить код аутентификации –

+0

@VivekSehrawat Я добавил свой код – Sami

+0

@ Sami- есть у видел яблочный образец кода GKTapper ...? –

ответ

1

#import "GameCenterManager.h" из кода образца яблока. установить цель проекта для прошивки 6.0 поставить код в viewdidload он будет работать нормально

@property (nonatomic, retain) GameCenterManager *gameCenterManager; 

    if([GameCenterManager isGameCenterAvailable]) 
     { 
     self.gameCenterManager= [[GameCenterManager alloc] init]; 
      [self.gameCenterManager setDelegate: self]; 
     [self.gameCenterManager authenticateLocalUser]; 
     } 
+0

Пожалуйста, используйте следующую ссылку для настройки игрового центра с лидирующей доской. "https://developer.apple.com/library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnectGameCenter_Guide/Leaderboards/Leaderboards.html" – dheerendra

5

вот код, я использую, чтобы показать игру в центре входа с использованием iOS7

gamecentercontrol.h

#import <Foundation/Foundation.h> 
#import <GameKit/GameKit.h> 

@interface gamecentercontrol : NSObject { 

    BOOL gameCentreAvailable; 
    BOOL userAuthenticated; 

} 

@property (assign, readonly) BOOL gameCentreAvailable; 

+ (gamecentercontrol *)sharedInstance; 

-(void)authenticateLocalUser; 


@end 

gamecentercontrol.m

#import "gamecentercontrol.h" 

@interface gamecentercontrol() <GKGameCenterControllerDelegate> { 

    BOOL _gameCenterFeaturesEnabled; 

} 
@end 


@implementation gamecentercontrol 

@synthesize gameCentreAvailable; 

static gamecentercontrol *sharedControl = nil; 
+ (gamecentercontrol *) sharedInstance { 
    if (!sharedControl) { 
     sharedControl = [[gamecentercontrol alloc]init]; 
    } 
    return sharedControl; 
} 

-(BOOL)isGameCentreAvailable { 
    // check for presence of GKLocalPlayer API 
    Class gcClass = (NSClassFromString(@"GKLocalPlayer")); 

    //check if the device is running iOS 4.1 or later 
    NSString *reqSysVer = @"4.1"; 
    NSString *currSysVer = [[UIDevice currentDevice] systemVersion]; 
    BOOL osVersionSupported = ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending); 

    return (gcClass && osVersionSupported); 
} 

- (id)init { 
    if ((self = [super init])) { 

     gameCentreAvailable = [self isGameCentreAvailable]; 
     if (gameCentreAvailable) { 
      NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
      [nc addObserver:self selector:@selector(authenticationChanged) name:GKPlayerAuthenticationDidChangeNotificationName object:nil]; 
     } 

    } 
    return self; 
} 


- (void)authenticationChanged { 

    if ([GKLocalPlayer localPlayer].isAuthenticated && !userAuthenticated) { 
     NSLog(@"Authentication Changed. User Authenticated"); 
     userAuthenticated = TRUE; 
    } 
    else if (![GKLocalPlayer localPlayer].isAuthenticated && userAuthenticated) { 

     NSLog(@"Authentication Changed. User Not Authenticated"); 
     userAuthenticated = FALSE; 
    } 

} 


-(void) authenticateLocalUser { 
    if ([GKLocalPlayer localPlayer].authenticated == NO) { 
     GKLocalPlayer* localPlayer = [GKLocalPlayer localPlayer]; 

    localPlayer.authenticateHandler = ^(UIViewController *gcvc,NSError *error) { 

     if(gcvc) { 

      [self presentViewController:gcvc]; 
     } 
     else { 
      _gameCenterFeaturesEnabled = NO; 
     } 
    }; 
    } 

    else if ([GKLocalPlayer localPlayer].authenticated == YES){ 
     _gameCenterFeaturesEnabled = YES; 
    } 

} 

-(UIViewController*) getRootViewController { 
    return [UIApplication sharedApplication].keyWindow.rootViewController; 
} 

-(void)presentViewController:(UIViewController*)gcvc { 
    UIViewController* rootVC = [self getRootViewController]; 
    [rootVC presentViewController:gcvc animated:YES completion:nil]; 
} 


-(void)gameCenterViewControllerDidFinish:(GKGameCenterViewController *)gameCenterViewController { 


} 
@end 

Тогда просто использовать

[[gamecentercontrol sharedInstance] authenticateLocalUser] 

в вашем просмотра файла контроллера, где когда-либо вы хотите, чтобы завершить проверку подлинности.

0
///////just Update the method 

- (void) authenticateLocalPlayer 

{ 

GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; 

    localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error) 
{ 


viewController=[[UIViewController alloc] init]; 

     if (viewController != nil) 

     { 

      //showAuthenticationDialogWhenReasonable: is an example method name. Create your own method that displays an authentication view when appropriate for your app. 

      [self showAuthenticationDialogWhenReasonable: viewController]; 

     } 

     else if (localPlayer.isAuthenticated) 

     { 

      //authenticatedPlayer: is an example method name. Create your own method that is called after the local player is authenticated. 

      [self authenticatedPlayer: localPlayer]; 

     } 

     else 

     { 

      [self disableGameCenter]; 

     } 

    }; 

} 
+0

Добро пожаловать в Stack Overflow! Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашей публикации , Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. – NathanOliver