我想在静音推送接收时实现自动播放音频功能。我在静音推送时收到一个音频网址。我希望在后台通过接收静音推送时播放音频。但我的问题是,我通过静音推送成功接收音频URL,但我无法在应用程序处于后台模式时播放音频。我使用“STKAudioPlayer”播放音频,从GitHub下载。我正在实现以下代码来播放音频
NSString *finalUrl = [NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] stringForKey:@"forUrl"]];
[stkaudioPlayer play:finalUrl];
以下代码用于接收静音推送通知,此处我正在实施播放音频。
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
NSLog(@"BACK GROUND MODE PUSH");
if([userInfo[@"aps"][@"content-available"] intValue]== 1) //it's the silent notification
{
[self saveInUserDefault];
stkaudioPlayer = [[STKAudioPlayer alloc]init]; //player initialize
//Save audio url
NSString *str= [userInfo valueForKey:@"AudioURL"];
[[NSUserDefaults standardUserDefaults]setObject:str forKey:@"forUrl"];
[[NSUserDefaults standardUserDefaults] synchronize];
// for Playing an audio
NSString *finalUrl = [NSString stringWithFormat:@"%@",str];
[stkaudioPlayer play:finalUrl];
completionHandler(UIBackgroundFetchResultNewData);
// NSLog(@"I am Here");
return;
}
else
{
NSLog(@"User ... %@",userInfo);
return;
}}
如果我的实施是错误的,那么请帮我解决这个问题。
答案 0 :(得分:1)
转到目标 - >能力 - >背景模式和检查你有没有调整后台提取和远程通知?如果没有,那就打开它们。
之后,在你的didReceiveRemoteNotification中,你必须添加一个你想要播放的声音文件,只需从推送数据中取一个声音文件的名称(你需要改变推送数据)< / strong>,之后就是这样: - (我正在使用AVAudioPlayer)
导入 - AudioToolbox / AudioToolbox.h
@property(强,非原子)AVAudioPlayer * sound1Player;
NSString * beep = [userInfo valueForKey:@“AudioURL”];
NSString * path = [[NSBundle mainBundle] pathForResource:beep ofType:@“mp3”];
NSURL * url = [NSURL fileURLWithPath:path]; sound1Player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
sound1Player.delegate =自我;
sound1Player.numberOfLoops = 0;
[sound1Player prepareToPlay];
[sound1Player play];
(此处AudioURL是您要播放的音频文件的名称,以及项目中的名称)
或者如果您只想播放一个声音,则无需从推送数据中获取声音,只需通过提供名称从代码中获取