我想让我的用户看到其他用户的数据。我正在考虑一场比赛。我希望手机上的用户游戏连接到在线分数列表,并将最低分数存储在列表中。然后,如果用户得分高于,他们的分数将被放入列表并存储。用iphone服务器发送和接收数据
这究竟涉及什么?
这需要加密吗?这将需要满足iphone加密要求。
我对服务器端不太了解,所以需要从基础开始。这将甚至需要一台服务器,或者我可以设置一个网站,并从那里抓取数据?这使得应用程序之外的分数可用。
在此先感谢
我想让我的用户看到其他用户的数据。我正在考虑一场比赛。我希望手机上的用户游戏连接到在线分数列表,并将最低分数存储在列表中。然后,如果用户得分高于,他们的分数将被放入列表并存储。用iphone服务器发送和接收数据
这究竟涉及什么?
这需要加密吗?这将需要满足iphone加密要求。
我对服务器端不太了解,所以需要从基础开始。这将甚至需要一台服务器,或者我可以设置一个网站,并从那里抓取数据?这使得应用程序之外的分数可用。
在此先感谢
您的需求听起来像是苹果游戏中心的完美搭配。如果您需要的功能已经内置到操作系统中,则无需设置您自己的REST API和服务器。
我的建议是建立一个使用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.aspx 和 http://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
很显然,我完全了解游戏中心其他海报同意...如果游戏中心满足您的需求,请使用。
+1指出游戏中心。我认为他想超越这个范围,或者只是将游戏作为一个例子来说明......这么好。 – Steve 2010-07-25 16:33:43
从你的文章的外观,你以前做过。设置服务器/ API非常困难,并且需要很多工作。像GameCenter和OpenFeint之类的东西可以为您节省很多辛苦的工作。 – kubi 2010-07-25 16:36:41
对我个人而言,我不会制作游戏,所以我对这些东西没有用处......我想我不认为这很难设置一些网络服务,但这可能是因为我每天都这样做。但是,如果他们满足他的需求,我绝对认为你是对的。 – Steve 2010-07-25 16:55:38