views:

493

answers:

3

I'm writing a game for iPhone, and I want an online leaderboard using mySQL, which i'm very familiar with. How do I implement this in my app? I would assume there's a framework/library i need to obtain?

A: 

This may be outside your scope, but have you considered using OpenFeint instead to do Leaderboards and more? There's no actual framework/library from Apple to create a leaderboard in GameKit. You have to write one yourself from scratch. Although, using the OpenFeint library would give you all this for you, but that's if you want to use it.

More information here on a tutorial to do just what you're asking. http://icodeblog.com/2009/10/29/iphone-coding-tutorial-creating-an-online-leaderboard-for-your-games/

John Wang
+3  A: 

You don't.

You most certainly DO NOT want to expose and publish your database connection to the "live" internet. That's simply folly.

The database listeners simply aren't designed to work over such an unrestricted domain. They tend to live sheltered lives.

Instead, you should front your database with another service that IS designed for the wilds of the internet. This service can handle the authentication, encryption, load balancing, etc. requirements that good internet servers support.

Most folks today use some variant of web service, posting XML or JSON, but you can do whatever you want.

But don't open the DB connection to the live internet. You're just asking for trouble.

Will Hartung
Great point, don't forget the need to be able to optimize and re-configure your DB schema without needing to rev your app, accessing the data through a web service keeps the knowledge of how your DB is laid out firmly on your server.
Fraser Graham
A: 

You should abstract the DB technology from the app, wrap your MySQL DB with a simple web service and run it on a web server, then you can use standard HTTP requests to interact with your database from your app.

My suggestions (not by any means the only way to do this)...

  • Use Django (or some other simple web framework) to wrap your database model, you can ever have django generate the code from your existing DB schema.
  • Write a few basic views to modify your DB using basic HTTP POST calls and send the username and score data in the POST data
  • Write a few simple pages that return the data you want in an XML format that you app can parse and display however you want, these are essentially just very simple generated web pages.

Now you have a publicly accessible leaderboard server that your app can interface with by posting scores and retrieving data through simple socket HTTP calls.

Fraser Graham