原因
2.16:多任务应用程序只能将后台服务用于其预期目的:VoIP,音频播放,位置,任务完成,本地通知等。 ----- 2.16 -----
我们发现您的应用使用后台模式,但不包含要求该模式持续运行的功能。此行为不符合App Store审核指南。
我们注意到您的应用在Info.plist中的UIBackgroundModes键中声明了对音频的支持,但是当应用程序在后台时,不会播放可听内容。虽然您的意图可能是提供此功能,但在审核时,我们无法为您的应用播放背景音频。
如“iOS应用程序编程指南”中所示:
“此密钥适用于在后台为用户提供可听内容的应用程序,例如音乐播放器或流式音频应用程序。”
因此,在应用程序处于后台时向用户提供可听内容或从UIBackgroundModes键中删除“audio”设置是合适的。
如果您在复制报告的问题时遇到困难,请尝试测试技术Q& A QA1764:如何重现针对App Store提交的错误报告中描述的工作流程。
如果您在使用上述资源后遇到代码级问题,则可以咨询Apple Developer Technical Support。当DTS工程师跟进您时,请准备好提供:
这是我的代码
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
musTimer = [NSTimer scheduledTimerWithTimeInterval:10
target:self
selector:@selector(playmus)
userInfo:nil
repeats:YES];
//run function methodRunAfterBackground
t = [NSTimer scheduledTimerWithTimeInterval:delay
target:self
selector:@selector(sendLocalNotification)
userInfo:nil
repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] addTimer:musTimer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
});
}
}
-(void)playmus
{
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
UIBackgroundTaskIdentifier newTaskId = UIBackgroundTaskInvalid;
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"mute" ofType:@"mp3"]];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[audioPlayer play];
newTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
if (newTaskId != UIBackgroundTaskInvalid && bgTask != UIBackgroundTaskInvalid)
[[UIApplication sharedApplication] endBackgroundTask: bgTask];
bgTask = newTaskId;
}