我想讓我的用戶看到其他用戶的數據。我正在考慮一場比賽。我希望手機上的用戶遊戲連接到在線分數列表,並將最低分數存儲在列表中。然後,如果用戶得分高於,他們的分數將被放入列表並存儲。用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