Я хотел воспроизвести звук, когда получаю конкретное уведомление, независимо от того, включен тихий режим или нет.
Я работаю в режиме разработки с платформой AVFoundation. Итак, в методе AppDelegate didFinishLaunchingWithOptions
я инициализирую AVAudioSession
NSError *audioSessionError = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&audioSessionError];
[[AVAudioSession sharedInstance] setActive:YES error:&audioSessionError];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
if(audioSessionError) {
NSLog(@"[AppDelegate] audioSessionError: %@", audioSessionError);
}
Я использую метод didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler
, чтобы проверить, находится ли приложение в фоновом режиме, а уведомление является уведомлением для воспроизведения звука.
if(application.applicationState == UIApplicationStateBackground) {
NSDictionary *aps = [userInfo objectForKey:@"aps"];
if([[aps valueForKey:@"category"] isEqualToString:@"alarm"]) {
NSString *path = [NSString stringWithFormat:@"%@/alarm.wav", [[NSBundle mainBundle] resourcePath]];
NSURL *soundUrl = [NSURL fileURLWithPath:path];
NSError *audioPlayerError = nil;
self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:&audioPlayerError];
if(audioPlayerError) {
NSLog(@"[AppDelegate] audioPlayerError: %@", audioPlayerError);
} else {
NSLog(@"[AppDelegate] audioPlayer play call");
[self.audioPlayer play];
}
}
completionHandler(UIBackgroundFetchResultNewData);
} else {
completionHandler(UIBackgroundFetchResultNoData);
}
Ключи в info.plist для фонового режима audio
и remote-notification
установлены.
Все работало нормально, поэтому я запустил приложение без каких-либо изменений в TestFlight. Когда приложение теперь получает уведомление, отображается предупреждение, но звук не воспроизводится, когда включен бесшумный режим. Поэтому я снова протестировал его в dev и получил те же результаты. Уведомление получено и отображается, но звук не воспроизводится.
Понятия не имею, почему он работал в dev, прежде чем отправлять его в TestFlight, а после него, работает ли он в рабочей среде или в dev. Уведомление принимается каждый раз, только звук больше не воспроизводится.
Кто-нибудь знает, как это произошло?