Tutorial – Implement OpenFeint into Cocos2d Game
May 26, 2010 7 Comments
In this next tutorial we will implement OpenFeint into my new Cocos2d Game. If there is one thing you take from this blog, (besides the link to buy PlanetOne) it is this implementation. OpenFeint is amazing.
So what is OpenFeint? OpenFeint is a service that enables your iPhone/iPod Touch/iPad application the ability to provide online score tracking. The service is free and can easily be incorporated into your applications. Think XBOX Live meets Facebook for the iPhone with hundreds of games and millions of players.
One of the reasons I like OpenFeint is that it is an established network, with many users and games.
So lets get to it. This will take you less then 20min. probably.
Here is the Video (Typed out Instructions below):
First Step
Create an Account on OpenFeint and download the SDK.
Then import the “OpenFeint” folder into your XCode project.
Second Step
Right click on your project within XCode and select Get Info.
In looking at the build tab, and find Other Linker Flags, then give it the value -ObjC
Next find ‘Call C++ Default Ctors/Dtors in Objective-C’ and put a check next to it.
Third Step
Import the nessecary Frameworks
Here is a list of the required ones:
- Foundation
- UIKit
- CoreGraphics
- QuartzCore
- Security
- SystemConfiguration
- libsql3.0.dylib (located in (iPhoneSDK Folder)/usr/lib/)
- CFNetwork
- CoreLocation
- MapKit (if building with SDK 3.0 or newer)
Here is the path where you can probably find them:
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulatorx.3.0.sdk/System/Library/Frameworks/<select framework>
and the ‘libsql3.0.dylib’ can be found here:
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulatorx.3.0.sdk/usr/lib/ libsql3.0.dylib
Fourth Step
add the following line to our prefix header:
#import “OpenFeintPrefix.pch”
Fifth Step
Next thing we need to do is create out OpenFeint Delegate to use with Cocos2d:
Create a new file “<yourgame>OFDelegate.mm/h”
add this to the header file:
#import "OpenFeintDelegate.h"
@interface <yourgame>OFDelegate : NSObject< OpenFeintDelegate >
- (void)dashboardWillAppear;
- (void)dashboardDidAppear;
- (void)dashboardWillDisappear;
- (void)dashboardDidDisappear;
- (void)userLoggedIn:(NSString*)userId;
- (BOOL)showCustomOpenFeintApprovalScreen;
@end
Then add this to the main file:
#import "OpenFeint.h"
#import "<yourgame>OFDelegate.h"
#import "cocos2d.h"
@implementation <yourgame>OFDelegate
- (void)dashboardWillAppear
{
}
- (void)dashboardDidAppear
{
[[CCDirector sharedDirector] pause];
[[CCDirector sharedDirector] stopAnimation];
}
- (void)dashboardWillDisappear
{
}
- (void)dashboardDidDisappear
{
[[CCDirector sharedDirector] resume];
[[CCDirector sharedDirector] startAnimation];
}
- (void)userLoggedIn:(NSString*)userId
{
OFLog(@"New user logged in! Hello %@", [OpenFeint lastLoggedInUserName]);
}
- (BOOL)showCustomOpenFeintApprovalScreen
{
return NO;
}
@end
Sixth Step
Lets move over to your app delegate and add this to the main file:
#import "OpenFeint.h" #import "SampleOFDelegate.h"
then find these methods and add the lines as necessary:
- (void)applicationWillResignActive:(UIApplication *)application {
[[SimpleAudioEngine sharedEngine] stopBackgroundMusic];
[[CCDirector sharedDirector] pause];
[OpenFeint applicationWillResignActive]; // Add for OpenFeint
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[CCDirector sharedDirector] resume];
[OpenFeint applicationDidBecomeActive]; // Add for OpenFeint
}
- (void)applicationWillTerminate:(UIApplication *)application {
[[SimpleAudioEngine sharedEngine] stopBackgroundMusic];
[[CCDirector sharedDirector] end];
[[NSUserDefaults standardUserDefaults] synchronize]; // Add for OpenFeint
}
Seventh Step
This will be the last thing.
Find a class where you want to implement OpenFeint…perhaps an intro scene before the main menu.
In that class you need to go to the header and add this:
@class <yourgame>OFDelegate; // Add for OpenFeint
@interface <your chosen class> : CCScene {
<yourgame>OFDelegate *ofDelegate; // Add for OpenFeint
}
Now Move over to the main file and add this:
#import "OpenFeint.h"
#import "<yourgame>OFDelegate.h"
And then in the init method add this:
NSDictionary* settings = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:UIInterfaceOrientationLandscapeRight], OpenFeintSettingDashboardOrientation, [NSNumber numberWithBool:YES],
OpenFeintSettingDisableUserGeneratedContent, nil];
ofDelegate = [SampleOFDelegate new];
OFDelegatesContainer* delegates = [OFDelegatesContainer containerWithOpenFeintDelegate:ofDelegate];
[OpenFeint initializeWithProductKey:@"<yourOpenFeintKey>"
andSecret:@"<yourOpenFeintSecret>"
andDisplayName:@"My Crazy App"
andSettings:settings // see OpenFeintSettings.h
andDelegates:delegates]; // see OFDelegatesContainer.h
AND YOU ARE DONE


Pingback: Weekly Digest for May 30th — Hello. My name is Václav Vančura.
is anyone else’s openfeint buggy? Mine is buggy. I set mine to portrait and landscape shows up only.
Hi I have a problem when adding the openfeint in my project. when it had the sdk 4.0 worked perfectly but now with the sdk4.1 is giving errors even after following the tutorial. there is some compatibility problem with the SDK last? One interesting thing here was to put in tutorial a project sample with the cocos2d and openfeint already included.
appreciate any help since I do not know what I can do.
respects
Neo
For me it comes up with 222 errors and 2 warnings when I declare the ofDelegate. Can you tell me how to fix this
Pingback: Getting Started With Cocos2D and OpenFeint | iPhone Game Tutorials
I am having issues with the orientation. It seems to draw from the top left instead of bottom left. So the openfeint dashboard seems to be rotated.
Sorted. had to include the openfeint.xml