【发布时间】:2014-02-11 13:41:42
【问题描述】:
我的应用刚刚被 Apple 拒绝,因为它没有正确实现后台运行,而且它是使用 iOS 的 VOIP 应用。
我保持运行的奇怪代码是
[self performSelectorOnMainThread:@selector(keepAlive) withObject:nil waitUntilDone:YES];
[application setKeepAliveTimeout:KEEP_ALIVE_INTERVAL handler: ^{
[self performSelectorOnMainThread:@selector(keepAlive) withObject:nil waitUntilDone:YES];
}];
我知道是错的
然后我跟着
http://blog.dkaminsky.info/2013/01/27/keep-your-ios-app-running-in-background-forever/ 这是 VOIP 黑客让它一直运行。我再次认为这是错误的。
我基本上只需要调用一种方法来保持 PJSIP 存活。
我应该如何正确地做到这一点?
更新
我查看了 Apple 指南,看来这是正确的
[application setKeepAliveTimeout:KEEP_ALIVE_INTERVAL handler: ^{
[self performSelectorOnMainThread:@selector(keepAlive) withObject:nil waitUntilDone:YES];
NSLog(@"Fire");
}];
但是我不确定如何配置 PJSIP TCP 端口在后台运行。
APPLE:配置应用程序的一个套接字以供 VoIP 使用。
后台运行良好,只是 Apple 拒绝了它
2.16
我们发现您的应用使用后台模式,但不包含需要该模式持续运行的功能。此行为不符合 App Store 审核指南。
我们注意到您的应用在 Info.plist 的 UIBackgroundModes 键中声明支持 VoIP,但不支持来自连接的 VoIP 服务的来电。
如果您的应用程序不支持来自其连接的 VoIP 服务的来电,则 voip 后台模式不合适。如 iOS 编程指南中所述,此键适用于需要监视套接字以获取传入呼叫的应用程序:
“系统不会让 VoIP 应用程序一直处于唤醒状态,而是允许它们暂停并为它们提供监控其套接字的设施。当检测到传入流量时,系统会唤醒 VoIP 应用程序并返回对其套接字的控制权给它。”
请考虑在 Info.plist 文件的 UIBackgroundModes 键中使用“音频”值。使用音频后台模式将在您的应用处于后台时保持当前拨出的 VoIP 呼叫保持打开状态。
添加 VoIP 功能或从 UIBackgroundModes 键中删除“VoIP”设置是合适的。对于离散的代码级问题,您可能希望咨询 Apple 开发人员技术支持。请务必:
更新 2
PJSIP 告诉我套接字标记为 VOIP,所以我不知道为什么会被拒绝
【问题讨论】: