iOS 平台游戏如何对接 GameCenter

news/2024/10/30 23:21:15/

现在随着手游市场的不断扩大,活跃在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的接入到这边就告一段落了,若在开发中有新的发现我会及时跟新这篇文章,欢迎大家评论分享自己的看法。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


http://www.ppmy.cn/news/815402.html

相关文章

ios模拟器装ipa包_ios模拟器怎么安装游戏应用教程

iOS模拟器是苹果Xcode IDE的一部分,主要用来为Mac,iPhone和iPad创建应用程序,为了给iOS模拟器打包应用程序,利用–package 在命令行上执行ADT并使用–target来指定其中一个目标。 比如,对于检测注释目标你可以执行下面…

在ios上运行安卓计算机软件,安卓竟然也能运行iOS,苹果怒了!

iPhone最大的优势是什么? 答案肯定是iOS。 很多人离不开iPhone, 就是因为其丝滑般的系统,强大的生态。 但是,如果这种优势不复存在呢? 也许你会说,怎么可能? 目前的安卓还比不了iOS。 这话说的没…

如何在Mac上玩安卓手游(支持各大安卓手机游戏数据同步)

很多小伙伴由于手机的型号不同,各大厂商的游戏端不同,导致在助手上下载的游戏不支持自己原来手机的里游戏资料。下面跟随小编来帮助你解决这个烦恼 首先我们需要借助腾讯手游助手 for mac版 腾讯手游助手 mac版是一款可以让用户在mac电脑上玩手机游戏的软件,腾讯手游助手m…

自锁电路分析与应用

原理图分享 今天工作中遇到一个设计很妙的电路,请教了一下硬件的工程师。 大家自己直接看图可以分享出这个电路的作用吗,可以在评论区告诉我哦! 自锁电路 如上图就是一个自锁电路,和下面的电路一样: 电路现象描述&a…

map和set介绍及使用

目录 一、什么是关联式容器 二、set 1.set的介绍 2.set的使用方法 三、mutiset 四、map 1.map简介 2.map的使用 五、multimap 一、什么是关联式容器 在了解map、set之前,你肯定已经使用过vector、list、deque、forward_list(C11)等这些容器,而他…

小规模企业如何做账 e-mail_小规模公司自学做账方法

小规模公司成立之后半个月之内就要开始做好当月的账目信息、用于当月的财务申报工作。最常见的方法是聘请代账公司帮忙记账。由于现在创业的热潮比较高、对于创业注册公司的要求越来越低、新公司的注册量非常的多,又由于新公司的成立后经营不好、出现倒闭的也多。甚…

电脑上的记账本,添加无限个账户记录

账本告诉你钱去哪里?收入支出的一些零钱,一日三餐,看上去好像很固定,但是生活中总有很种的不同收支需要记录,如何选择一个可添加多个账户来记录不同的地方的使用收支呢?下面一起来看晨曦记账本如何添加多个…

分享一个我做的记账系统(网站)

界面: 功能:记录增删改查,分类汇总,计算平账信息 技术路线:数据库 mysql;后台 spring,mybatis;前端 vue,element-ui,echarts 觉得还不错的小伙伴帮忙视频点一下赞支持一下哦! 后续还会继续更新视频和源码…