XCode iDevice应用程序 - 如何从服务器侦听消息/请求?

时间:2013-05-10 10:34:20

标签: ios objective-c xcode web-services

我有一个项目,我需要能够将运行Web服务的服务器上的消息发送到特定的iDevice。我不知道该怎么做,所以非常感谢任何帮助。

场景:我有一个Web服务,它从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在1分钟内(在某些情况下是几秒钟)向iDevice发送不同的消息,并且就我在其他线程中读到的而言,由于Apple的服务器如何处理ASPNS,这根本不可能。

我正在开发的应用程序只需要在应用程序处于活动状态时从服务器接收消息 - 有没有办法,而不是使用APN来执行此操作,例如让应用程序侦听特定端口上的通信?

2 个答案:

答案 0 :(得分:1)

您的情况与APPLE PUSH NOTIFICATIONs(APNs)非常相似。

理想情况下,您的服务器端应该编写代码,以便在服务器端和服务器端进行任何更改。需要通知所有相关设备。

然后您的服务器应发布通知Apple服务器,然后该服务器将向所有相关设备发送通知。

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);

此代码仅适用于应用程序的生命周期。

答案 1 :(得分:0)

经过一番搜索,我决定不使用APNS,因为看起来人们对它有各种各样的经验。我不能使用APNS,因为我的项目需要100%的可靠性和与服务器的即时通信。

我决定使用tcp通信,因为我的项目只会在本地网络中使用。这显然意味着iDevices的功耗更高,但可靠性对项目来说更为重要。

相关问题