2010-07-25 103 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

很顯然,我完全瞭解遊戲中心其他海報同意...如果遊戲中心滿足您的需求,請使用。

相關問題