iOS GameCenter:本地客户端能否获取排行榜展示给其他用户的gamePlayerID?
解决Game Center本地获取全局playerID的问题
你遇到的差异是因为gamePlayerID是Game Center在本地设备生成的本地标识,而其他玩家在排行榜看到的是苹果服务器分配的全局唯一playerID。要在本地获取这个和排行榜展示一致的ID,需要调用GameKit的正确API:
获取本地玩家的全局playerID
在iOS/tvOS的GameKit框架中,GKLocalPlayer的playerID属性就是你需要的全局标识,格式和你从排行榜拉取的其他玩家ID一致(类似E3793985603EF6B.....)。
Swift示例代码:
import GameKit // 处理Game Center登录并获取全局playerID GKLocalPlayer.local.authenticateHandler = { viewController, error in if let vc = viewController { // 弹出登录界面(需在UI线程通过当前ViewController展示) return } if error == nil { // 登录成功后获取全局playerID let globalPlayerID = GKLocalPlayer.local.playerID print("全局playerID:\(globalPlayerID ?? "")") } else { print("登录失败:\(error!.localizedDescription)") } }
Objective-C示例代码:
#import <GameKit/GameKit.h> // 登录Game Center并获取全局playerID [[GKLocalPlayer localPlayer] setAuthenticateHandler:^(UIViewController *viewController, NSError *error) { if (viewController) { // 展示登录界面(需在UI线程通过当前ViewController present) return; } if (!error) { NSString *globalPlayerID = [[GKLocalPlayer localPlayer] playerID]; NSLog(@"全局playerID:%@", globalPlayerID); } else { NSLog(@"登录失败:%@", error.localizedDescription); } }];
关键说明
- 必须确保用户已成功登录Game Center,否则
playerID会返回空值。 - 这个
playerID是苹果服务器端分配的全局唯一标识,跨设备同步,其他玩家在排行榜中看到的你的ID就是这个值。 - 旧的
gamePlayerID仅用于本地设备内的标识,不会被其他用户看到,也不会出现在排行榜的其他玩家记录中。
内容的提问来源于stack exchange,提问作者Peeling
相关产品推荐
相关产品推荐

