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的接入到這邊就告一段落了,若在開發中有新的發現我會及時跟新這篇文章,歡迎大家評論分享自己的看法。