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

iOS 平台游戏如何对接 GameCenter相关推荐

  1. iOS平台经典游戏《合金弹头X》上架 售价25元

    日本SNK Playmore株式会社正打算将<合金弹头>系列都移植到iOS平台上去.去年7月,他们首先在iOS平台上推出了<合金弹头3>.由于某些特殊的原因,他们在移植< ...

  2. 国内平台游戏借苹果iOS爆发:游戏开发产值过亿

    国内平台游戏借苹果爆发 iPhone4.iPad在中国的火爆销售短时间内并不会停止,乔布斯带来的这股"苹果旋风"着实让国人重新认识了什么叫做创意产业.但在所有人将目光聚焦在硬件产品 ...

  3. iOS平台游戏安全再议之八门神器内存修改,IAP Free游戏内购破解的防御

     http://danqingdani.blog.163.com/blog/static/186094195201298103346566/ 今年3月初写过一篇<iO平台游戏安全小议> ...

  4. 基于IOS平台的游戏之打地鼠

    一. 题目描述 1.1游戏介绍 打地鼠是一款休闲游戏,游戏的规则也特别的简单,玩家只需要敲打一只只从地洞里冒出头的地鼠即可,游戏要求在限定的时间内,敲打的地鼠越多,分数越高,游戏画面比较清新,地鼠造型 ...

  5. 手游联运平台怎样和游戏研发商对接?

    手游联运平台全称是手游联合运营平台,是指将游戏研发商对接好的游戏嫁接到平台后,游戏发行商进行运营,也可发展下级运营商,然后将玩家充值的流水按比例进行分成. 联运平台可以选择直接购买,怎样选择呢? 1. ...

  6. 移植cocos2d-x 游戏从Android平台到IOS平台分辨率问题及解决办法

    问题描述: 因为游戏刚开始设计时是在Android平台上运行的,所以使用的是当时Android主流的分辨率(800 * 480), 使用cocos2d-x在其他Android平台可以做到等比例缩放,所 ...

  7. 分享用Adobe Air向iOS移植游戏的经验

    分享用Adobe Air向iOS移植游戏的经验 http://gamerboom.com/archives/47931 发布时间:2012-02-21 17:04:42 Tags:Adobe Air, ...

  8. 【转】iOS平台游戏安全之IPA破解原理及防御

    原文地址 -> http://danqingdani.blog.163.com/blog/static/186094195201292273453797/ 在博客上谈过了iOS游戏的内购安全,存 ...

  9. 移动平台游戏网络重连方案

    1.背景 移动网络信号波动频繁,给移动游戏开发者带来诸多困扰,处理不好会造成较差的用户体验以及重复扣道具等严重问题.因此弱网络问题在TDR技术评审中作为客户端重点挑战项,并且弱网络专项测试达标后方能上 ...

最新文章

  1. 高效sql性能优化极简教程
  2. mysql 关闭主从_取消mysql主从复制关系
  3. exls导入数据库 php_PHP Excel导入数据到MySQL数据库
  4. CocosCreator2.1.0渲染流程与shader
  5. AlphaFold 和 AI 蛋白质折叠革命的下一步是什么
  6. 交替领先的赛跑(洛谷P1568题题解,Java语言描述)
  7. Minimum Mean Squared Error (MMSE)最小均方误差
  8. CKEditor快速介绍与入门示例
  9. 苹果mac交互原型设计软件:Axure RP
  10. 与时俱进 挪威央行运用大数据预测经济情况
  11. Centos图形界面和命令行切换快捷键 2022_11_15
  12. 第九届JAVA大学C组 那天返回省赛 第一题
  13. springboot+redis主从复制、哨兵、读写分离
  14. 弹力球小程序C语言实现
  15. 老年程序员的出路何在
  16. 商品期货可以做长线吗(期货交易可以做长线吗)
  17. one 主格 复数 宾格_主格、宾格、名词所有格.
  18. oracle rman crosscheck,rman crosscheck作用
  19. tio-websocket-server 源码浅析
  20. cas202268-34-6/苯酚,4,4‘-(10,20-二苯基-21H,23H-卟吩-5,15-二酰基)双酚/分子量:646.73/分子式:C44H30N4O2

热门文章

  1. 电脑突然关机,如何恢复word文件内容
  2. python贷款还款预测
  3. 详解python中for循环的_《详》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...
  4. 天辰的救赎(JS)第一章(救赎之地)
  5. 动手制作属于你自己的WIN PE3.0
  6. 511遇见易语言数组操作清除数组和数组清零
  7. 新手如何入门学习车载HiL测试
  8. 音视频领域的未来发展方向展望
  9. 关于PROE绘图个人记录
  10. nginx隐藏版本号和标识