Reputation: 41
I've scoured the internet for an answer to this. I have a leaderboard setup in iTunes Connect and it shows up on my game but the high score is never reported to the leaderboard.
here is the code I have for the leaderboard in my GameViewController.m
- (void)authenticateLocalPlayer {
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error) {
if (viewController != nil) [[UIApplication sharedApplication].delegate.window.rootViewController presentViewController:viewController animated:YES completion:nil];
else {
if ([GKLocalPlayer localPlayer].authenticated) {
gameCenterEnabled = YES;
[[GKLocalPlayer localPlayer] loadDefaultLeaderboardIdentifierWithCompletionHandler:^(NSString *leaderboardIdentifier, NSError *error) {
if (error != nil) NSLog(@"%@", [error localizedDescription]);
else _leaderboardIdentifier = leaderboardIdentifier;
}];
}
else gameCenterEnabled = NO;
}
};
}
- (void)showLeaderboard {
GKGameCenterViewController *gcViewController = [[GKGameCenterViewController alloc] init];
gcViewController.gameCenterDelegate = self;
gcViewController.viewState = GKGameCenterViewControllerStateLeaderboards;
gcViewController.leaderboardIdentifier = _leaderboardIdentifier;
[self presentViewController:gcViewController animated:YES completion:nil];
}
- (void)gameCenterViewControllerDidFinish:(GKGameCenterViewController *)gameCenterViewController {
[gameCenterViewController dismissViewControllerAnimated:YES completion:nil];
}
and in my MenuScene.m and EndScene.m I have this code to show the best score which displays on screen as a label.
_labelScoreBest = [[SimpleLabel alloc] initWithText:[NSString stringWithFormat:@"%ld", (long)[[NSUserDefaults standardUserDefaults] integerForKey:@"bestScore"]] fontSize:MS_FONT_SIZE_LABEL_SCORE_BEST position:MS_POSITION_LABEL_SCORE_BEST colorByHEX:MS_FONT_COLOR_LABEL_SCORE_BEST andZPosition:MS_ZPOSITION_LABEL_SCORE_BEST];
which displays the best score on the screen. Hows do I get this to report to the leaderboard I have setup. My Leaderboard identifier is defined by a pragma mark in my GlobalSettings.h as the the Leaderboard ID I made on iTunes Connect.
I hope all this makes sense and someone knows how to help.
Upvotes: 1
Views: 233
Reputation: 41
-(void)reportScore{
if(gameCenterEnabled)
{
int64_t newScore = (int64_t)[[NSUserDefaults standardUserDefaults] integerForKey:@"bestScore"];
GKScore *score = [[GKScore alloc] initWithLeaderboardIdentifier:_leaderboardIdentifier];
score.value = newScore;
[GKScore reportScores:@[score] withCompletionHandler:^(NSError *error) {
if (error != nil) {
NSLog(@"%@", [error localizedDescription]);
}
}];
NSLog(@"Yo we're totally reporting the score now");
}
also added an NSNotification to my GameCenter code
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reportScore) name:@"reportScore" object:nil];
Upvotes: 0
Reputation: 5451
You have to submit the highscore to GameCenter:
func addLeaderboardScore(score: Int64) {
var leaderboardID = "YOURLEADERBOARDID"
let newGCScore = GKScore(leaderboardIdentifier: leaderboardID)
newGCScore.value = score
newGCScore.leaderboardIdentifier = leaderboardID
GKScore.reportScores([newGCScore], withCompletionHandler: {(error) -> Void in
if error != nil {
print("Score not submitted")
}
})
}
Upvotes: 1