2013-05-10 78 views
0

我有一個項目,我需要能夠將消息從運行Web服務的服務器發送到特定的iDevice。我不知道如何做到這一點,所以任何幫助非常感謝。XCode iDevice應用程序 - 如何偵聽來自服務器的消息/請求?

該場景:我有一個網絡服務從iDevice(也可以是Mac或PC,甚至是Android設備)接收一些消息。根據此消息的內容,我需要能夠從Web服務向另一個iDevice發送消息(我知道特定iDevice的IP地址)。我知道如何使用URLRequests從iDevice向服務器發送消息並從服務器收集響應。原則上,我可以每10秒向服務器發送一個請求,詢問服務器是否有任何新消息發送給發件人(iDevice發送請求),但我確信這不是正確的方法。有沒有辦法讓iDevice監聽特定端口上的服務器通信,以便iDevice只在從服務器接收到消息來執行某些操作時纔會進行一些活動,例如,在應用程序中顯示一條消息,以偵聽服務器通信?

我想我需要使用類似於用於iMessage的技術,但這是如何完成的?

我正在使用XCode 4.6.2,iOS 6.1。

編輯:只是爲了更清楚我的需求:APNS似乎太過於不可靠(至少這是我在其他有關APN的線程中讀到的),因爲在某些情況下,Web服務可能需要發送2分鐘內向iDevice發送不同的消息(在某​​些情況下爲秒),並且據我在其他線程中閱讀,由於Apple的服務器如何處理ASPNS,這根本無法實現。

我開發的應用程序只需要在應用程序處於活動狀態時從服務器接收消息 - 是否有任何方式(不使用APN)來執行此操作讓應用程序監聽特定端口上的通信?

回答

0

經過一番搜索之後,我決定不使用APNS,因爲好像人們對它有着各種各樣的體驗。我不能使用APNS,因爲我的項目需要100%的可靠性並與服務器進行即時通信。

我決定使用tcp通信,因爲我的項目只能用於本地網絡。這顯然意味着iDevices會消耗更多的能源,但可靠性對該項目更爲重要。

1

您的場景與APPLE PUSH NOTIFICATION(APN)非常相似。

理想情況下,您的服務器端應該以這樣的方式編寫代碼,如果服務器端&需要通知所有相關設備。

然後你的服務器應該發佈通知蘋果服務器,然後將通知發送到所有關聯的設備。

Refer this link

你已經擁有,但可以使用此代碼來識別的iOS/Mac的deivce

NSString *identifierString = [[NSUserDefaults standardUserDefaults] objectForKey:@"myID"]; 
if (!identifierString) { 
    CFUUIDRef identifier = CFUUIDCreate(NULL); 
    identifierString = (NSString*)CFUUIDCreateString(NULL, identifier); 
    [[NSUserDefaults standardUserDefaults] setObject:identifierString forKey:@"myID"]; 
} 
NSLog(@"%@",identifierString); 

此代碼的工作,直到只有應用程序的生命週期。

+0

非常感謝您的快速回復。 APNS聽起來很有希望,但我非常擔心有關APNS的一件事 - 可靠性以及Apple服務器在超時時如何轉儲通知。你是否知道是否有任何有關APNS百分比沒有交付的統計數據,因爲APNS(服務器 - >設備通信)對於我的應用程序將非常重要。 – 2013-05-10 11:13:23

+0

我知道驗收是如何工作的,但我不確定APN是否是最好的解決方案,基於其他開發人員的經驗。我將進一步調查APN,稍後再回到這個問題。 – 2013-05-10 22:23:01

相關問題