iOS 平台游戏如何对接 GameCenter

现在随着手游市场的不断扩大,活跃在IOS平台下的游戏厂商为了增加玩家的粘性,以及为自己的游戏前途考虑都纷纷开始接入苹果国内公司的游戏平台GameCenter;今天呢我就把我对接GameCenter的一些心得以及操作分享给大家,内容很简单也希望在这方面有经验的也可以跟我分享一下。

1.itunesConnect配置:

打开ItunesConnect,选中你的应用,在自己的应用页面上面找到GameCenter选项,如图:

 

点击打开GameCenter显示如图效果:

 

apple GameCenter分为两块:“排行榜”与“成就”。首先我们先来添加排行榜:

 

添加成就:

 

 

每个应用的成就点数最多为1000点,属性Hidden(隐藏),如果将其设置为YES,则在用户获得成就或取得一定进展前,成就是不可见的。

 

如果要让用户能够接受基于已获得的成就的挑战,则需在iTunes Connect中创建成就时选中复选框“可多次获得”。

每个成就需要配置本地化描述;每个成就都有两个描述,一个在用户获得成就前显示,另一个在用户获得成就后显示。另外还需要给每个成就提供已付图像,尺寸为512X512,(应用发布后就不能删除其中的成就)

 

分别编辑完排行榜与成就后,最终在ItunesConnect中的效果:

 

对于开发者来说,GameCenter必须经过测试才能上线,没有上线的程序在测试环境中登录时会出现sandBox提示。

 

好了,itunesConnect部分的基本配置就介绍完了,是不是很简单。下面我们来讲一下程序部分~

 

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Apple为大家接入GameCenter提供了GameKit.framework,在需要使用GameCenter的类中都要导入GameKit.h;在.h文件中加入协议“GKGameCenterControllerDelegate”.

 

1.游戏中心管理器

创建共享的游戏管理器,不仅可以将GameCenter功能放在独立的类中,还可以轻松的在新项目中添加GameCenter功能。

判断是否支持GameCenter:

 

//是否支持GameCenter
- (BOOL) isGameCenterAvailable
{
    Class gcClass = (NSClassFromString(@"GKLocalPlayer"));
    NSString *reqSysVer = @"4.1";
    NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
    BOOL osVersionSupported = ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending);
    
    return (gcClass && osVersionSupported);
}

 

 

 

2,身份验证

GameCenter是一种需要验证身份的服务,如果没有登录就得先验证身份,否则什么也做不了。

 

//身份验证
- (void)authenticateLocalUser{
    GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
    
    localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){
        if (viewController != nil) {
            [self presentViewController:viewController animated:YES completion:nil];
        }
        else{
            if ([GKLocalPlayer localPlayer].authenticated) {
                // Get the default leaderboard identifier.
                
                [[GKLocalPlayer localPlayer] loadDefaultLeaderboardIdentifierWithCompletionHandler:^(NSString *leaderboardIdentifier, NSError *error) {
                    
                    if (error != nil) {
                        NSLog(@"%@", [error localizedDescription]);
                    }
                    else{

                    }
                }];
            }
            
            else{

            }
        }
    };
    
}

 

 

 

3.用户变更检测

 

//用户变更检测
- (void)registerFoeAuthenticationNotification{
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc addObserver:self selector:@selector(authenticationChanged) name:GKPlayerAuthenticationDidChangeNotificationName object:nil];
}

- (void)authenticationChanged{
    if([GKLocalPlayer localPlayer].isAuthenticated){
        
    }else{
        
    }
}

 

 

 

4.提交得分

向GameCenter验证身份后,便可提交得分了。

创建GKStore对象:

- (void) reportScore: (int64_t) score forCategory: (NSString*) category{
    GKScore *scoreReporter = [[GKScore alloc] initWithCategory:category];
    
    scoreReporter.value = score;
    [scoreReporter reportScoreWithCompletionHandler:^(NSError *error) {
        if(error != nil){
            NSData *saveSocreData = [NSKeyedArchiver archivedDataWithRootObject:scoreReporter];
            
            //未能提交得分,需要保存下来后继续提交
            [self storeScoreForLater:saveSocreData];
        }else{
            NSLog(@"提交成功");
        }
    }];
}

- (void)storeScoreForLater:(NSData *)scoreData{
    NSMutableArray *savedScoresArray = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"savedScores"]];
    
    [savedScoresArray addObject:scoreData];
    [[NSUserDefaults standardUserDefaults] setObject:savedScoresArray forKey:@"savedScores"];
}


若得分提交不成功,需要再重新提交得分:

 

 

//重新提交分数
- (void)submitAllSavedScores{
    NSMutableArray *savedScoreArray = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"savedScores"]];
    
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"savedScores"];
    
    for(NSData *scoreData in savedScoreArray){
        GKScore *scoreReporter = [NSKeyedUnarchiver unarchiveObjectWithData:scoreData];
        
        [scoreReporter reportScoreWithCompletionHandler:^(NSError *error) {
            if(error != nil){
                 NSData *saveSocreData = [NSKeyedArchiver archivedDataWithRootObject:scoreReporter];
                //未能提交得分,需要保存下来后继续提交
                [self storeScoreForLater:saveSocreData];
            }else{
                NSLog(@"提交成功");
                
                
            }
        }];
    }
}

 

 

 

5.显示排行榜

 

创建GKLocalboardViewController来显示排行榜.

 

- (void)showGameCenter{
    GKGameCenterViewController *gameView = [[GKGameCenterViewController alloc] init];
    if(gameView != nil){
        gameView.gameCenterDelegate = self;
        
        [gameView setLeaderboardCategory:@"com.xxxx.test"];
        [gameView setLeaderboardTimeScope:GKLeaderboardTimeScopeAllTime];
        
        [self presentViewController:gameView animated:YES completion:^{
            
        }];
    }
}

- (void)gameCenterViewControllerDidFinish:(GKGameCenterViewController *)gameCenterViewController{
    [self dismissViewControllerAnimated:YES completion:nil];
}


6.得分成就

 

挑战让用户可以通过GameCenter向玩家发起得分或成就方面的挑战。挑战分为四种:“无效”,“待处理”,“已结束”,“已谢绝”。

 

- (void)reportAchievment:(NSString *)identifier withPercentageComplete:(double)percentComplete{
    GKAchievement *achievement = [[GKAchievement alloc] initWithIdentifier:identifier];
    
    [achievement setPercentComplete:percentComplete];
    
    [achievement reportAchievementWithCompletionHandler:^(NSError *error) {
        if(error != nil){
            NSLog(@"error:%@", [error localizedDescription]);
        }else{
            NSLog(@"提交成就成功");
        }
    }];
}

 

 

示例演示:

1.在sandbox环境中登录GameCenter

 

登录成功以后会在上方显示一个横幅“Welcome....”,点击GameCenter app就会显示您以及您游戏的相关信息.

 

 

 

3.排行榜界面

 

4.成就

成就的图标为在后台配置的图标;

 

5.添加好友

点击右上角的“加号”按钮,会弹出一个添加好友的界面,输入对方AppleID即可给对方发送好友请求。

 

6.发起挑战

 

对方收到挑战信息推送界面

 

好了,gameCenter的接入到这边就告一段落了,若在开发中有新的发现我会及时跟新这篇文章,欢迎大家评论分享自己的看法。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
要实现Game Center登录,需要按照以下步骤进行操作: 1. 在Xcode中创建一个新的iOS游戏项目。 2. 在游戏项目中,打开“Capabilities”选项卡,启用Game Center选项。 3. 导入GameKit框架。 接下来,我们可以按照以下步骤在Swift中实现Game Center登录: 1. 在游戏中创建一个GameCenterHelper类: ```swift import GameKit class GameCenterHelper: NSObject, GKGameCenterControllerDelegate { var viewController: UIViewController? var authPlayer: GKLocalPlayer? override init() { super.init() authenticateLocalPlayer() } func authenticateLocalPlayer() { let localPlayer = GKLocalPlayer.local localPlayer.authenticateHandler = { [weak self] (viewController, error) in guard let weakSelf = self else { return } weakSelf.viewController?.present(viewController!, animated: true, completion: nil) if error == nil { weakSelf.authPlayer = localPlayer } } } func showGameCenter() { let vc = GKGameCenterViewController() vc.gameCenterDelegate = self viewController?.present(vc, animated: true, completion: nil) } func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) { gameCenterViewController.dismiss(animated: true, completion: nil) } func reportScore(score: Int64, leaderboardId: String) { if authPlayer == nil { return } let scoreReporter = GKScore(leaderboardIdentifier: leaderboardId) scoreReporter.value = score scoreReporter.context = 0 GKScore.report([scoreReporter]) { (error) in if error != nil { print(error!.localizedDescription) } } } } ``` 2. 在游戏中实例化GameCenterHelper类: ```swift let gameCenterHelper = GameCenterHelper() ``` 3. 在游戏中调用GameCenterHelper类中的authenticateLocalPlayer()方法进行Game Center登录: ```swift gameCenterHelper.authenticateLocalPlayer() ``` 4. 如果需要显示Game Center的排行榜,可以通过调用GameCenterHelper类中的showGameCenter()方法实现: ```swift gameCenterHelper.showGameCenter() ``` 5. 如果需要提交得分到指定的排行榜,可以通过调用GameCenterHelper类中的reportScore()方法实现: ```swift gameCenterHelper.reportScore(score: 100, leaderboardId: "com.your.leaderboard.id") ``` 以上就是在Swift中实现Game Center登录的基本步骤,需要注意的是,Game Center需要在真机上进行测试,因为在模拟器上无法进行Game Center登录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HelloWord杰少

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值