2010-07-25 3 views
1

사용자가 다른 사용자의 데이터를 볼 수있게하고 싶습니다. 나는 게임의 관점에서 생각하고있다. 나는 사용자가 자신의 휴대 전화 게임을 온라인 점수 목록에 연결하고 가장 낮은 점수를 목록에 저장하고 싶습니다. 그런 다음 사용자가 위 점수를 얻으면 점수가 목록에 저장되고 저장됩니다.iphone 앱용 서버와 데이터 송수신하기

정확히 무엇이 관련되어 있습니까?

암호화가 필요합니까? 그러면 iphone 암호화 요구 사항이 충족되어야합니다.

저는 서버 측에 대해 잘 알고 있지 않으므로 기본으로 시작해야합니다. 이것도 서버가 필요합니까, 아니면 웹 사이트를 설정하고 거기에서 데이터를 가져올 수 있습니까? 이로 인해 앱 외부에서 점수를 사용할 수있게되었습니다. 사전에

덕분에

답변

2

귀하의 요구 사항은 Apple의 게임 센터에 가장 적합합니다. 원하는 기능 만 OS에 이미 내장되어있는 경우 자체 REST API 및 서버를 설정하지 않아도됩니다.

+0

+1 게임 센터를 지적합니다. 나는 그가 그것을 넘어서고 싶다고 생각했거나, 단지 예시 상황으로 게임을 사용하고 있었다. ... 좋은 지적. – Steve

+0

귀하의 게시물 모양에서 이전에 해본 적이 있습니다. 서버/API를 설정하는 것은 어렵고 많은 작업이 필요합니다. GameCenter 및 OpenFeint와 같은 기능은 많은 노력을 덜어줍니다. – kubi

+0

개인적으로 나에게 개인적으로 게임을 만들지 않기 때문에 나는 그런 것들을 사용하지 않는다. 나는 웹 서비스를 설치하는 것이 그렇게 어렵지 않다고 생각한다.하지만 아마 매일 그렇게하기 때문일 것이다. 그러나 나는 당신이 자신의 필요를 충족 시킨다면 그 제안들에 당신이 옳다고 생각합니다. – Steve

2

나의 제안은 설정에 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.aspxhttp://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

은 물론, 내가 완전히 게임 센터에 대한 다른 포스터에 동의를 ..., 그것을 사용합니다.

관련 문제