无声推送时如何自动播放音频功能?

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 是你要播放的音频文件的名称,它在你的项目中)

或者,如果您只想播放一种声音,则无需从推送数据中获取它,只需通过提供名称从您的代码中获取它即可