【发布时间】:2011-05-13 05:13:20
【问题描述】:
我的应用要求:出于某些原因,我应该维护一个套接字连接以触发服务器推送的本地通知,而不使用推送通知(APN)。所以我正在使用 iPhone 的 VOIP 后台功能来保持套接字连接。
1.我已经为 VOIP 配置了一个流,以便保持套接字连接在后台运行,那么我应该设置什么超时值? 一旦超时到期,套接字连接会终止吗? 如何让我的应用程序一直监听套接字?
客户端流配置如下,
NSString *urlStr = @"http://192.168.0.108";
NSURL *website = [NSURL URLWithString:urlStr];
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)[website host], 1234, &readStream, &writeStream);
CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
NSInputStream *inputStream = (NSInputStream *)readStream;
NSOutputStream *outputStream = (NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;
[outputStream setDelegate:self];
[outputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
2。我是否应该重新连接处理程序 applicationDidEnterBackground 中的流:
[[UIApplication sharedApplication] setKeepAliveTimeout:86400 handler:^(void)
{
if (inputStream)
[inputStream close];
if (outputStream)
[outputStream close];
urlStr = @"http://192.168.0.108";
website = [NSURL URLWithString:urlStr];
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)[website host], 1234, &readStream, &writeStream);
CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
inputStream = (NSInputStream *)readStream;
outputStream = (NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;
[outputStream setDelegate:self];
[outputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
}];
3.假设我的服务器重新启动并且应用处于后台,我如何确保连接? 如果我的 iPhone 中的 Wi-Fi 连接或我终止服务器应用程序连接将被关闭,那么我应该采取什么措施来使我的应用程序按预期工作?
【问题讨论】:
-
你在这里包含的代码,它是工作代码吗?
-
仅供参考:iOS VOIP 背景模式现已在 iOS 10 及更高版本上弃用。
-
嗨。我想写一个 crm web 应用程序。我想集成我的 crm 应用程序和客户 voip 实时通信。我该怎么做?我需要socket编程吗?
标签: iphone sockets background voip