Ios 无声推送时如何自动播放音频功能?
我想在静默推送接收时实现自动播放音频功能。当静默推送到来时,我收到一个音频URL。我想通过接收静默推送在后台播放应用程序时的音频。但我的问题是,我成功地通过静默推送接收音频URL,但当应用程序处于后台模式时,我无法播放音频。我正在使用“STKAudioPlayer”播放从GitHub下载的音频。我正在实现下面的代码来播放音频Ios 无声推送时如何自动播放音频功能?,ios,objective-c,xcode8,Ios,Objective C,Xcode8,我想在静默推送接收时实现自动播放音频功能。当静默推送到来时,我收到一个音频URL。我想通过接收静默推送在后台播放应用程序时的音频。但我的问题是,我成功地通过静默推送接收音频URL,但当应用程序处于后台模式时,我无法播放音频。我正在使用“STKAudioPlayer”播放从GitHub下载的音频。我正在实现下面的代码来播放音频 NSString *finalUrl = [NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDef
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;
}}
如果我的实现方式不正确,请帮助我解决这个问题。转到目标->功能->后台模式,检查是否有后台提取和远程通知的曲调?如果没有,则打开它们 之后,在DidReceiveMemoteNotification中,您必须添加一个要播放的声音文件,并从推送数据中获取声音文件的名称(您需要这样做,以便推送数据中的更改也会发生),然后这样做:-(我使用的是AVAudioPlayer) 导入-AudioToolbox/AudioToolbox.h @属性(强、非原子)AVAudioPlayer*SOUND1PAYER NSString*beep=[userInfo valueForKey:@“AudioURL]” NSString*路径=[[NSBundle mainBundle]路径用于资源:类型为@“mp3”的哔哔声 NSURL*url=[NSURL fileURLWithPath:path]; sound1Player=[[AVAudioPlayer alloc]initWithContentsOfURL:url错误:nil] [[AVAudioSession sharedInstance]设置类别:AVAudioSessionCategoryPlayback错误:nil] [[AVAudioSession sharedInstance]设置活动:是错误:无] [[UIApplication sharedApplication]开始接收RemoteControlEvents] sound1Player.delegate=self sound1Player.numberOfLoops=0 [Sound1播放器准备播放] [声音播放] (此处AudioURL是您要播放的音频文件的名称,该文件位于项目中)
或者,如果您只想播放一个声音,则无需从推送数据中获取声音,只需从代码中获取声音,命名为“targets->Capabilities->background fetch and remote notification”(目标->功能->后台提取和远程通知),这些选项处于启用状态。您正在使用“AVAudioPlayer”,并且您的音频文件已打包。在我的例子中,音频url来自通知。所以我没有使用“AVAudioPlayer”。现在我使用的是“AVPlayer”。当我收到来自无声通知的音频URL时,我从调试部分收到了一条错误消息。这些是。。。[0x37fd8000]>aurioc>807:失败:“!pla”(启用2,输出<2通道,44100赫兹,输入16,内部>输入<2通道,0赫兹,浮点32,非内部>)。你能告诉我一件事吗?你是否每次都尝试播放不同的声音?或者你需要做任何你得到的将播放的推送数据?实际上,我正在尝试播放从静默推送数据获得的任何内容。假设我接收到音频URL(Exm.)。我想在收到静默通知时播放此URL(在应用程序处于后台模式时也可以播放)。但在这里,我最终获得了URL,但它无法通过AVPlayer播放,只有在应用程序处于后台时才能播放。请将此方法替换为应用程序代理的ApplicationIdentinterBackground方法,然后尝试-(void)ApplicationIdentinterBackground:(UIApplication*)应用程序{UIApplication*应用程序=[UIApplication sharedApplication];UIBackgroundTaskIdentifier bgTask=0;bgTask=[app beginBackgroundTaskWithExpirationHandler:^{[app endBackgroundTask:bgTask];}];[UIApplication sharedApplication]beginBackgroundTaskWithExpirationHandler:NULL];[UIApplication sharedApplication]beginReceivingRemoteControlEvents];}我已经使用了你的代码。但是它不工作,而且从调试部分也得到了相同的错误消息。那就是:[0x37fd8000]>aurioc>807:失败:“!pla”(启用2,outp<2 ch,44100 Hz,Int16,inter>inf<2 ch,0 Hz,Float32,non inter>…你清楚了吗,我的概念是什么?