0

我有一个项目,我需要能够将消息从运行 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 条不同的消息给iDevice 在 1 分钟内(在某些情况下是几秒钟),据我在其他线程中阅读,这根本不可能,因为 Apple 的服务器如何处理 ASPNS。

我正在开发的应用程序只需要在应用程序处于活动状态时从服务器接收消息 - 有什么方法可以不使用 APNs 来做到这一点,例如让应用程序监听特定端口上的通信?

4

2 回答 2

1

Your scenario seems pretty similar to APPLE PUSH NOTIFICATIONs (APNs).

Ideally your server side should write a code in such a way that if there is any change on server side & need to be informed to all associated devices.

Then your server should post notification Apple server which will then send a notification to all the associated devices.

Refer this link

You already have but can use this code to identify the 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);

this code works till the lifetime of the app only.

于 2013-05-10T10:51:17.107 回答
0

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

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

于 2013-05-16T09:09:38.987 回答