Game Kit
Lars Röwekamp | CIO New Technologies
Mittwoch, 14. September 2011
Game Kit
Lars Röwekamp | CIO New Technologies
@mobileLarson@_openknowledge
Mittwoch, 14. September 2011
Mittwoch, 14. September 2011
Mittwoch, 14. September 2011
>> iOS Game Development
>> iOS Game Center App>> iOS Game Kit
>> iOS Game Kit Scenarios>> iOS Game Kit Testing
Mittwoch, 14. September 2011
>> iOS Game Development
>> iOS Game Center App>> iOS Game Kit
>> iOS Game Kit Scenarios>> iOS Game Kit Testing
Mittwoch, 14. September 2011
iOS 4 Game Development
Mittwoch, 14. September 2011
iOS 4 Game Development
A report by SNL Kagan said it expects U.S. mobile game revenues to top $1.53 billion this year, which is nearly double revenues in 2010.
Mittwoch, 14. September 2011
iOS 4 Game Development
A report by SNL Kagan said it expects U.S. mobile game revenues to top $1.53 billion this year, which is nearly double revenues in 2010.
Mittwoch, 14. September 2011
iOS 4 Game Development
Mittwoch, 14. September 2011
iOS 4 Game Development
Game CenterService
Mittwoch, 14. September 2011
powered by
iOS 4 Game Development
Game CenterService
Mittwoch, 14. September 2011
>> iOS Game Development
>> iOS Game Center App>> iOS Game Kit
>> iOS Game Kit Scenarios>> iOS Game Kit Testing
Mittwoch, 14. September 2011
iOS 4 Game Center App
Mittwoch, 14. September 2011
iOS 4 Game Center App
–Erstellen/Ändern von Spielern
–Spiele starten/kaufen
–Details der Spiele ansehen
–„Managen“ von Freunden
–„Details“ der Freunde ansehen
Mittwoch, 14. September 2011
iOS 4 Game Center App
–„Wie werde ich zur GC App?“
Mittwoch, 14. September 2011
iOS 4 Game Center App
–„Wie werde ich zur GC App?“
more to come ...
Mittwoch, 14. September 2011
iOS 4 Game Center App
–„Und was ist ein GC Player?“
Mittwoch, 14. September 2011
iOS 4 Game Center App
Mittwoch, 14. September 2011
iOS 4 Game Center App
Mittwoch, 14. September 2011
iOS 4 Game Center App
Mittwoch, 14. September 2011
iOS 4 Game Center App
Mittwoch, 14. September 2011
iOS 4 Game Center App
Mittwoch, 14. September 2011
>> iOS Game Development
>> iOS Game Center App>> iOS Game Kit
>> iOS Game Kit Scenarios>> iOS Game Kit Testing
Mittwoch, 14. September 2011
iOS 4 Game Kit
meets
Mittwoch, 14. September 2011
iOS 4 Game Kit
–Game Development Framework
–User Authentication
–Friends Management
–Score-Übertragung & -View
–Archievement-Übertragung & -View
–Multiplayer Game Support
–In Game Messaging & Voice Chat
Mittwoch, 14. September 2011
iOS 4 Game Kit „Kickstart“
–App „Gerüst“ im Store einrichten
–iTunes Connect einrichten
–Bundle Identifer definieren
–GameKit Framework einbinden
–GameKit/GameKit.h einbinden
–Game Center Key in info.plist einbinden (optional)
–Player authentifizieren
Mittwoch, 14. September 2011
iOS 4 Game Kit „Kickstart“
Mittwoch, 14. September 2011
iOS 4 Game Kit „Kickstart“
Mittwoch, 14. September 2011
iOS 4 Game Kit „Kickstart“
Mittwoch, 14. September 2011
iOS 4 Game Kit „Kickstart“
Mittwoch, 14. September 2011
iOS 4 Game Kit „Kickstart“
Mittwoch, 14. September 2011
iOS 4 Game Kit „Kickstart“
Mittwoch, 14. September 2011
iOS 4 Game Kit „Kickstart“
Mittwoch, 14. September 2011
iOS 4 Game Kit „Kickstart“
Mittwoch, 14. September 2011
iOS 4 Game Kit „Kickstart“
Mittwoch, 14. September 2011
>> iOS Game Development
>> iOS Game Center App>> iOS Game Kit
>> iOS Game Kit Scenarios>> iOS Game Kit Testing
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
AuthenticateLocal Player
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
AuthenticateLocal Player
Mittwoch, 14. September 2011
„Authenticate Local Player“
–Sobald die UI „da“ ist
–Asynchron - Connectivity
–Asynchron - Account Login
–Asynchron - Account Creation
–Player Unique ID
–Player Nickname
iOS 4 Game Kit Scenarios
Mittwoch, 14. September 2011
„Authenticate Local Player“
–Sobald die UI „da“ ist
–Asynchron - Connectivity
–Asynchron - Account Login
–Asynchron - Account Creation
–Player Unique ID
–Player Nickname
iOS 4 Game Kit Scenarios
] ^Blocks
als Callback
Handler
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
// How to authenticate a user/player?
- (void)authenticateLocalPlayer { GKLocalPlayer* localPlayer = [GKLocalPlayer localPlayer];
[localPlayer authenticateWithCompletionHandler: ^(NSError *error) { if (!error) { self.gameCenterFeaturesEnabled = YES; } else { self.gameCenterFeaturesEnabled = NO; } }];}
AuthenticateLocal Player
Mittwoch, 14. September 2011
// How to handle user state change (1/2)?
- (void)registerForAuthenticationNotification { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver: self selector:@selector(authenticationChanged) name: GKPlayerAuthenticationDidChangeNotificationName object:nil];}
State Change?Registration
iOS 4 Game Kit Scenarios
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
State Change?Handler
// How to handle user state change (2/2)?
- (void)authenticationChanged{ if ([GKLocalPlayer localPlayer].isAuthenticated) {
// Insert code here to handle // a successful authentication.
} else {
// Insert code here to clean up any // outstanding Game Center-related classes.
}}
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
Check forPlayer‘s Friends
Mittwoch, 14. September 2011
// How to „access“ my friends (1/2)?
- (void)retrieveFriends{ GKLocalPlayer *lp = [GKLocalPlayer localPlayer]; if (lp.authenticated) { [lp loadFriendsWithCompletionHandler: ^(NSArray *friendIDs, NSError *error) { if (error != nil) { // create player objects with friendIDs. } // else report an error to the user. }]; }
iOS 4 Game Kit Scenarios
Check forPlayer‘s Friends
Player‘s Friend IDs als Array laden.
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
// How to „access“ my friends (2/2)?
- (void)loadPlayerData: (NSArray *) friendIDs{ [GKPlayer loadPlayersForIdentifiers:friendIDs withCompletionHandler: ^(NSArray *players, NSError *error) { if (error != nil) { // Handle the error. } if (players != nil) { // Process the array of GKPlayer objects. } }];}
Check forPlayer‘s Friends
IDs verwenden, um GKPlayer Objekte zu laden.
Mittwoch, 14. September 2011
>> Game Kit
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
Leaderboard(s)Management
Mittwoch, 14. September 2011
–Standard UI
–Custom UI
–Filtern nach Freunden
–Filtern nach Zeit
–Abfragen von Bereichen
–Abfrage von Top X
iOS 4 Game Kit Scenarios„Leaderboards“
Mittwoch, 14. September 2011
iOS 4 Game Kit „Kickstart“
Mittwoch, 14. September 2011
iOS 4 Game Kit „Kickstart“
Mittwoch, 14. September 2011
iOS 4 Game Kit „Kickstart“
Mittwoch, 14. September 2011
iOS 4 Game Kit „Kickstart“
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
// how to report a score to the „leaderboard“?
- (void)reportScore { GKScore* myPlayerScore = ... ; // alloc myPlayerScore.value = ... ; // set score [myPlayerScore reportScoreWithCompletionHandler: ^(NSError *error) { if (error) { NSData* archivedScore = [NSKeyedArchiver archivedDataWithRootObject:myPlayerScore]; [self saveScoreToSendLater:archivedScore]; } else { // the score was submitted successfully } }];}
Eigenen Scoresenden
GKScore als „Magic Object“
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
// how to display default „leaderboard“?
- (void)showLeaderboard{ // view controller implements the // protocol <GKLeaderboardViewControllerDelegate>
GKLeaderboardViewController* lbViewController = [[ GKLeaderboardViewController alloc] init];
... // set some paramater, e.g. category, timeScope
[lbViewController setLeaderboardDelegate: self]; [self presentModalViewController:lbViewController animated:YES];
...}
Leaderboard„automatisch“
ViewController implementiertDelegate!
<GKLeaderboardViewControllerDelegate>
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
// how to query a „leaderboard“?
- (void)queryLeaderboard { GKLeaderboard* lb = ... // alloc
// interested in friends scores over the past week lb.timeScope = GKLeaderboardTimeScopeWeek; lb.playerScope = GKLeaderboardPlayerScopeFriendsOnly; lb.range = NSMakeRange(1,25); [lb loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) { }]; if (scores) { //display scores in custom UI } // handle error, if (error) }
High Score„manuell“
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
ArchievementManagement
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
ArchievementManagement
Mittwoch, 14. September 2011
–Standard UI
–Custom UI
–Vor und nach dem Erreichen
–Fortschritt beim Erreichen
–„Hidden“ Archievements
iOS 4 Game Kit Scenarios„Archievement“
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
// how to report „archievements“?
- (void)reportAchievements { GKAchievement* myAchievement = ... // alloc with id
myAchievement.percentComplete = 50.0; [myAchievement reportAchievementWithCompletionHandler: ^(NSError *error) { if (error) { // archive for later sending NSData* archivedAchievement = ... } else { // the achievement was submitted successfully } }]; }
Archievementsenden
GKArchievment als „Magic Object“
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
// how to display default „achievement“ view?
- (void)showArchievements{ GKAchievementViewController* acViewController = ...; [myAchievementsViewController setAchievementViewControllerDelegate: self];
[self presentModalViewController: acViewController];}
- (void)achievementsDidPressDismiss{ [self dismissModalViewControllerAnimated:YES];}
Archievement„automatisch“
ViewController implementiertDelegate!
<GKArchievementViewControllerDelegate>
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
Multi PlayerGaming / Chat
Mittwoch, 14. September 2011
–Spieler Einladen
–Server vs. P2P
–Manuelles Matching
–Auto Matching
–Multi-Player UI
– In-Game Voice Chat
iOS 4 Game Kit Scenarios„Multi Player“
Mittwoch, 14. September 2011
–GKPeerPickerController erstellen
–PeerPicker Connection-Option setzen
–GKSession erzeugen
–GKSession verwalten
–Daten via GKSession senden
–Daten via GKSession empfangen
iOS 4 Game Kit Scenarios„P2P Automatch“
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
// how to connect P2P?
-(void) connectP2P { // try to connect via p2p picker p2pPicker = [[GKPeerPickerController alloc] init]; p2pPicker.delegate = self;
// look for bluetooth connection p2pPicker.connectionTypesMask = GKPeerPickerConnectionTypeNearby;
// handle UI changes if necessary ...
// show peer picker dialog [p2pPicker.connectionTypesMask show] }
P2Pconnect
ViewController implementiertDelegate!
<GKPeerPickerControllerDelegate>
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
// how to connect P2P?
-(void)peerPickerController:(GKPeerPickerController *) picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session { // set session self.currentSession = session; session.delegate = self; [session setDataReceiveHandler:self withContext:nil];
// clear picker p2pPicker.delegate = nil; [p2pPicker dismiss]; [p2pPicker autorelease];}
P2PConnection
Callback
ViewController implementiertDelegate!
<GKPeerPickerControllerDelegate>
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
// how to send and receive data?
-(void)sendDataToPeers:(NSData*)data {
if (currentSession) { [self.currentSession sendDataToAllPeers:data withDataMode:GKSendDataReliable error:nil]; }}
-(void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession:(GKSession *)session context:(void *)context { NSString * message; message = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; }
P2PDatenaustausch
ViewController implementiertDelegate!
<GKSessionDelegate>
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
// how to disconnect P2P?
-(void) disconnectP2P { // try to disconnect via session [self.currentSession disconnectFromAllPeers]; [self.currentSession release]; currentSession = nil;
// update UI if necessary ... }
P2Pdisconnect
ViewController implementiertDelegate!
<GKPeerPickerControllerDelegate>
Mittwoch, 14. September 2011
–Match-Request erstellen
–Match-Request zum Server senden
–Server wendet Match-Logik an
–Server sendet Match-Response
–Warten auf Player Connects
–Spiel starten
iOS 4 Game Kit Scenarios„Multi Player Automatch“
Mittwoch, 14. September 2011
–Minimal 2 Spieler
–Maximal 4 Spieler (P2P) / 16 Spieler (Hosted)
–Bit Mask Attribute Match: AND 0x00000000
–Bit Mask Attribute Match: OR 0xFFFFFFFF
–Player Group Match
–Player IDs Match
iOS 4 Game Kit Scenarios„Match-Request“
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios
Multi PlayerAutomatch
„Multi Player Automatch“
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios„Multi Player Automatch“
Multi PlayerAutomatch
Mittwoch, 14. September 2011
Mittwoch, 14. September 2011
Mittwoch, 14. September 2011
Multi Playerautomatch
iOS 4 Game Kit Scenarios
// how to auto-match (without default view)?
- (IBAction)findMatchOnDemand: (id) sender{ GKMatchRequest *matchRequest = ... // alloc matchRequest.minPlayers = 2; matchRequest.maxPlayers = 2; matchRequest.playerGroup = level1MyGameGroup; matchRequest.playerAttributes = MY_FIGHTER; GKMatchmaker *matchmaker = [GKMatchmaker sharedMatchmaker]; [matchmaker findMatchForRequest:matchRequest withCompletionHandler:^(GKMatch *match, NSError *error) { if (error) { // handle error } else if (match!=nil) { // start the match } }]; }
„Multi Player Automatch“
GKMatchmaker als „Magic Object“
GKMatchRequestals „Magic Object“
Mittwoch, 14. September 2011
iOS 4 Game Kit Scenarios„Multi Player Automatch - Testing“
Mittwoch, 14. September 2011
Multi PlayerInvitation
iOS 4 Game Kit Scenarios„Multi Player Automatch“
Mittwoch, 14. September 2011
>> iOS Game Development
>> iOS Game Center App>> iOS Game Kit
>> iOS Game Kit Scenarios>> iOS Game Kit Testing
Mittwoch, 14. September 2011
iOS 4 Game Kit Testing„Development vs. Production“
Mittwoch, 14. September 2011
iOS 4 Game Kit Testing„Development vs. Production“
Mittwoch, 14. September 2011
–Game Bundle ID
–Game Version
–Game Status
iOS 4 Game Kit Scenarios„Development vs. Production“
] Sandbox?
Mittwoch, 14. September 2011
Und wie weiß ich, ob Game Kit unterstütz wird? –Ganz einfach ... „testen“
iOS 4 Game Kit
Mittwoch, 14. September 2011
Und wie weiß ich, ob Game Kit unterstütz wird? –Ganz einfach ... „testen“
iOS 4 Game Kit
// how to detect game kit FULL support?
BOOL isGameCenterAPIAvailable(){ // Check for presence of GKLocalPlayer class. BOOL localPlayerClassAvailable = (NSClassFromString(@"GKLocalPlayer")) != nil; // The device must be running iOS 4.1 or later. NSString *reqSysVer = @"4.1"; NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
BOOL osVersionSupported = ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending); return (localPlayerClassAvailable && osVersionSupported);}
Mittwoch, 14. September 2011
Was sie im Hinterkopf behalten sollten:
– Infrastruktur für Single- und Multiplayer-Games– iTunes Connect zur Administration–GameCenter APP als Schaltzentrale–GameKit API zur programmativen Nutzung
–Default View Controller als „Easy“ Version–Eigene View Controller als „Fancy“ Version–P2P Features ohne GameCenter möglich
iOS 4 Game Kit
Mittwoch, 14. September 2011
Top Related