現在隨著手游市場的不斷擴大,活躍在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]; }
挑戰讓用戶可以通過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的接入到這邊就告一段落了,若在開發中有新的發現我會及時跟新這篇文章,歡迎大家評論分享自己的看法。