无声推送时如何自动播放音频功能?
How to Autoplay audio feature when silent push come?
我想在无声推送接收时实现自动播放音频功能。当静默推送 come.I 时,我正在接收音频 URL 想通过接收静默推送在应用程序处于后台时播放音频。但我的问题是,我通过静默推送成功接收音频 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;
}}
如果我的实现方式有误,请帮我解决这个问题。
转到目标 -> 功能 -> 后台模式并检查你是否调整了后台获取和远程通知?如果没有,请打开它们。
在那之后,在你的 didReceiveRemoteNotification 中,你必须添加一个你想要播放的声音文件,然后从你的推送数据中获取一个声音文件的名称(你需要这样做,以便在推送中更改数据也),之后这样做:-(我正在使用 AVAudioPlayer)
导入 - AudioToolbox/AudioToolbox.h
@属性(强,非原子)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 错误: nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
sound1Player.delegate=自己;
sound1Player.numberOfLoops=0;
[sound1Player prepareToPlay];
[sound1Player播放];
(这里的 AudioURL 是你要播放的音频文件的名称,它在你的项目中)
或者,如果您只想播放一种声音,则无需从推送数据中获取它,只需通过提供名称从您的代码中获取它即可
我想在无声推送接收时实现自动播放音频功能。当静默推送 come.I 时,我正在接收音频 URL 想通过接收静默推送在应用程序处于后台时播放音频。但我的问题是,我通过静默推送成功接收音频 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;
}}
如果我的实现方式有误,请帮我解决这个问题。
转到目标 -> 功能 -> 后台模式并检查你是否调整了后台获取和远程通知?如果没有,请打开它们。
在那之后,在你的 didReceiveRemoteNotification 中,你必须添加一个你想要播放的声音文件,然后从你的推送数据中获取一个声音文件的名称(你需要这样做,以便在推送中更改数据也),之后这样做:-(我正在使用 AVAudioPlayer)
导入 - AudioToolbox/AudioToolbox.h
@属性(强,非原子)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 错误: nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
sound1Player.delegate=自己;
sound1Player.numberOfLoops=0;
[sound1Player prepareToPlay];
[sound1Player播放];
(这里的 AudioURL 是你要播放的音频文件的名称,它在你的项目中)
或者,如果您只想播放一种声音,则无需从推送数据中获取它,只需通过提供名称从您的代码中获取它即可