我无法让它工作,但这并不意味着不可能。
我看到其他人说我需要使用 TCP端口
,但有没有任何官方文档的指针可以最终确定呢?
我无法让它工作,但这并不意味着不可能。
我看到其他人说我需要使用 TCP端口
,但有没有任何官方文档的指针可以最终确定呢?
根据我的测试,使用 iOS >= 4.3 后,UDP 后台运行不再可行。
可能不会有来自苹果的明确文档声称“后台UDP不可行”。
但事实是,官方文档指出要使用以下接口执行后台网络: - NSInputStream和NSOutputStream - NSURLRequest - CFReadStreamRef和CFWriteStreamRef
这意味着,我认为流概念无法包装非连接UDP模式套接字。 http://lists.apple.com/archives/cocoa-dev/2010/Jul/msg00091.html
因此,您可以理解为Apple仅允许在后台模式下打开“数据流”,而不是UDP套接字。
我实际上不知道Counterpath的Bria如何执行其UDP后台处理,但假设他们有某种黑客方式在后台执行代码,而不是将特殊套接字标记为“需要保持活动状态”。
当前版本的 iOS 仅允许在后台模式下使用带有 VOIP 属性的 TCP 套接字。
readStream=NULL; writeStream=NULL;
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)serverIP, Port, &readStream, &writeStream);
CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); //VOIP property for input stream
CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
inputStream = (__bridge NSInputStream *)readStream;
outputStream = (__bridge NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;
[outputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
这将创建一个简单的TCP连接,套接字类型为VOIP。然后您必须在属性列表中添加应用程序后台模式。
这个技巧是不是包括当切换到后台时播放静音声音? 因为我认为它不再起作用了...