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

时间:2017-10-03 06:21:21

标签: ios objective-c xcode8

我想在静音推送接收时实现自动播放音频功能。我在静音推送时收到一个音频网址。我希望在后台通过接收静音推送时播放音频。但我的问题是,我通过静音推送成功接收音频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;
}}

如果我的实施是错误的,那么请帮我解决这个问题。

1 个答案:

答案 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是您要播放的音频文件的名称,以及项目中的名称)

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