2010-07-25 53 views
1

我想让我的用户看到其他用户的数据。我正在考虑一场比赛。我希望手机上的用户游戏连接到在线分数列表,并将最低分数存储在列表中。然后,如果用户得分高于,他们的分数将被放入列表并存储。用iphone服务器发送和接收数据

这究竟涉及什么?

这需要加密吗?这将需要满足iphone加密要求。

我对服务器端不太了解,所以需要从基础开始。这将甚至需要一台服务器,或者我可以设置一个网站,并从那里抓取数据?这使得应用程序之外的分数可用。

在此先感谢

回答

2

您的需求听起来像是苹果游戏中心的完美搭配。如果您需要的功能已经内置到操作系统中,则无需设置您自己的REST API和服务器。

+0

+1指出游戏中心。我认为他想超越这个范围,或者只是将游戏作为一个例子来说明......这么好。 – Steve 2010-07-25 16:33:43

+0

从你的文章的外观,你以前做过。设置服务器/ API非常困难,并且需要很多工作。像GameCenter和OpenFeint之类的东西可以为您节省很多辛苦的工作。 – kubi 2010-07-25 16:36:41

+0

对我个人而言,我不会制作游戏,所以我对这些东西没有用处......我想我不认为这很难设置一些网络服务,但这可能是因为我每天都这样做。但是,如果他们满足他的需求,我绝对认为你是对的。 – Steve 2010-07-25 16:55:38

2

我的建议是建立一个使用JSON格式的数据的REST服务。与SOAP服务相比,这在iPhone(和其他平台)上处理起来要容易得多。

介绍:

REST:http://en.wikipedia.org/wiki/Representational_State_Transfer

JSON:http://www.json.org/

如果你熟悉.NET,里克施特拉尔对使用WCF设置一个JSON/REST服务一个伟大的博客: http://americanparanoia.com/Weblog/posts/164419.aspxhttp://www.code-magazine.com/Article.aspx?quickid=080014 是很好的开始。

还有很多其他的教程可以在线创建JSON/REST服务,您可以使用任何语言; .NET,Java和Ruby的,PHP等

您将需要Objective-C的这个JSON-解析库:http://code.google.com/p/json-framework/ 那库将JSON格式字符串转换成的NSMutableDictionary和/或NSMutableArray里(还有其他方式)。

的你怎么可能得到高分从服务器列表的部分例如:

NSError * error; 
NSURLResponse * response; 

NSMutableURLRequest * request = [NSMutableURLRequest 
    requestWithURL:[NSURL URLWithString:@"https://myWebsite.com/topScores"] 
    cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
    timeoutInterval:60.0]; 

// Not sure if you need this, but I frequently do POSTs as well, so whatever: 
[request setHTTPMethod:@"GET"]; 

NSData * responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

NSString * json = [[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] autorelease]; 
NSMutableArray * scores = [json JSONRepresentation];

(注:你必须检查错误的反应,我只是省略了它的清晰度)

此外,理想情况下(因为在我的例子中,我使用同步方法),这应该在后台线程上运行......但我发现使用“performSelectorInBackground:”手动在后台线程上运行它更容易,并使用同步方法,比我使用异步方法。请记住,如果你这样做,你将不得不创建自己的自动释放池......但这是两条线,而且非常容易。

的你怎么可能会发出一种新的分数到服务器的部分例如:

NSString * requestJson = [topScoresDictionary JSONRepresentation]; 
NSData * data = [requestJson dataUsingEncoding:NSUTF8StringEncoding]; 

NSError * error; 
NSURLResponse * response; 

NSMutableURLRequest * request = [NSMutableURLRequest 
    requestWithURL:[NSURL URLWithString:@"https://myWebsite.com/topScores"] 
    cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
    timeoutInterval:60.0]; 

// POST the data to the server (just like a form submission): 
[request setHTTPMethod:@"POST"]; 
[request setAllHTTPHeaderFields:[NSDictionary dictionaryWithObjectsAndKeys:@"application/json", @"content-type", nil]]; 
[request setHTTPBody:data]; 

NSData * responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

NSString * json = [[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] autorelease]; 
NSMutableArray * scores = [json JSONRepresentation];

要获得关于加密的问题...是...你会想要做的东西防止人从篡改您的高分服务。这是否意味着它是加密?也许。也许这只是一些额外的校验和。但是,即使通过HTTPS人员,ASSUME也能够嗅探您的网络流量并对其进行逆向工程。你会想要阻止像我这样的人这样做,只是为了看看你是否足够让你的高分服务开放,因为吉尔不会很整洁地看到我的名字为#1有一些荒谬的分数..或更糟。另外,请记住,如果您获得更多的点击量,您的服务需要扩展(认真考虑云托管... Azure,EC2,AppEngine等)。这些可以成为救星。如果您的服务变得缓慢,并且人们正在等待它,那么您的应用程序将受到影响。

此外,检查出这个其他职位:SOAP, REST or just XML for Objective-C/iPhone vs. server solution

很显然,我完全了解游戏中心其他海报同意...如果游戏中心满足您的需求,请使用。

相关问题