Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无声推送时如何自动播放音频功能?_Ios_Objective C_Xcode8 - Fatal编程技术网

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

Ios 无声推送时如何自动播放音频功能?,ios,objective-c,xcode8,Ios,Objective C,Xcode8,我想在静默推送接收时实现自动播放音频功能。当静默推送到来时,我收到一个音频URL。我想通过接收静默推送在后台播放应用程序时的音频。但我的问题是,我成功地通过静默推送接收音频URL,但当应用程序处于后台模式时,我无法播放音频。我正在使用“STKAudioPlayer”播放从GitHub下载的音频。我正在实现下面的代码来播放音频 NSString *finalUrl = [NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDef

我想在静默推送接收时实现自动播放音频功能。当静默推送到来时,我收到一个音频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;
}}

如果我的实现方式不正确,请帮助我解决这个问题。

转到目标->功能->后台模式,检查是否有后台提取和远程通知的曲调?如果没有,则打开它们

之后,在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>…你清楚了吗,我的概念是什么?