나의 제안은 설정에 JSON 형식의 데이터를 사용하는 REST 서비스입니다. 이것은 SOAP 서비스보다 iPhone (및 다른 플랫폼)에서 다루기가 훨씬 쉽습니다.
소개 :
REST : http://en.wikipedia.org/wiki/Representational_State_Transfer
JSON : http://www.json.org/
당신이 .NET에 익숙하다면, 릭 Strahl이 설정에 JSON/REST 서비스를 WCF를 사용하는 방법에 대한 좋은 블로그가 있습니다 : http://americanparanoia.com/Weblog/posts/164419.aspx 및 http://www.code-magazine.com/Article.aspx?quickid=080014 은 좋은 출발점입니다.
원하는 언어로 JSON/REST 서비스를 만들 수있는 온라인 튜토리얼이 많이 있습니다. .NET, 자바, 루비, PHP 등
당신은 목표 - C이 JSON 파싱 라이브러리가 필요합니다
: 그 라이브러리가뿐만 아니라 NSMutableDictionary 및/또는 NSMutableArray의 (에 JSON 형식의 문자열을 변환합니다 http://code.google.com/p/json-framework/ 을 다른 방법으로).
서버로부터 최고 점수의 목록을 얻을 수 있는지의 부분 예 :
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];
(NB : 당신은 오류 응답을 확인해야합니다, 난 그냥 명확성을 위해 그것을 생략)
를
또한, 이상적으로 (내 예제에서는 동기 메서드를 사용하기 때문에) 백그라운드 스레드에서 실행해야하지만 ... "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 사람들을 거쳐가는 것조차도 네트워크 트래픽을 스니핑하고 리버스 엔지니어링 할 수 있습니다.너는 네가 좋아하는 사람들을 저지르기를 원할 것이다. 네가 고득점 서비스를 활짝 열어두기에 무디다는 것을 알기 위해서 일 것이다. 왜냐하면 너는 내 이름을 어리석은 점수와 함께 1 위로 보는 것이 깔끔하지 않기 때문이다. 또는 더 나쁜.
더 많은 조회수가 발생하면 서비스의 확장이 필요합니다 (Azure, EC2, AppEngine 등의 클라우드 호스팅을 심각하게 고려해야 함). 이들은 생명의 은인이 될 수 있습니다. 서비스가 느려지고 사람들이 기다리는 동안 앉아 있으면 응용 프로그램이 손상됩니다. 또한
이 다른 후 체크 아웃 : 게임 센터 사용자의 요구를 충족하는 경우
SOAP, REST or just XML for Objective-C/iPhone vs. server solution
은 물론, 내가 완전히 게임 센터에 대한 다른 포스터에 동의를 ..., 그것을 사용합니다.
+1 게임 센터를 지적합니다. 나는 그가 그것을 넘어서고 싶다고 생각했거나, 단지 예시 상황으로 게임을 사용하고 있었다. ... 좋은 지적. – Steve
귀하의 게시물 모양에서 이전에 해본 적이 있습니다. 서버/API를 설정하는 것은 어렵고 많은 작업이 필요합니다. GameCenter 및 OpenFeint와 같은 기능은 많은 노력을 덜어줍니다. – kubi
개인적으로 나에게 개인적으로 게임을 만들지 않기 때문에 나는 그런 것들을 사용하지 않는다. 나는 웹 서비스를 설치하는 것이 그렇게 어렵지 않다고 생각한다.하지만 아마 매일 그렇게하기 때문일 것이다. 그러나 나는 당신이 자신의 필요를 충족 시킨다면 그 제안들에 당신이 옳다고 생각합니다. – Steve