用户收到推送通知时如何播放自定义声音文件? [复制]
Posted
技术标签:
【中文标题】用户收到推送通知时如何播放自定义声音文件? [复制]【英文标题】:How to play custom sound file when user get push notification? [duplicate] 【发布时间】:2014-01-17 06:52:11 【问题描述】:我在应用程序包中有一个声音文件,我想在用户收到推送通知时播放该声音文件。
如果是的话,在ios中是否可行,那么请提出实现这一目标的方法。
谢谢,
【问题讨论】:
developer.apple.com/library/mac/documentation/… FWIW 除 default 以外的任何声音(系统声音或您自己制作的声音)都被视为自定义声音,必须手动添加到 AppBundle。 【参考方案1】:要播放此声音,您必须在通知负载中指定声音的文件名。例如,假设您在应用程序中添加了一个名为 example.caf 的声音文件,我们可以使用通知负载播放此声音,如下所示:
aps =
alert = "test example notification message";
sound = "example.caf";
;
然后当你的通知到达时自定义声音会播放。
【讨论】:
但是如果我在应用程序中有设置应该播放特定文件怎么办。我不想使用 aps 来指定声音文件名,但我想在收到通知时使用本地设置。例如,我有设置屏幕,我在其中指定所需的声音和音量级别。那我猜我们需要使用@007 答案? 在这种情况下,您遵循@007 的回答。只是当您从设置屏幕中选择任何声音文件时,您需要更改NSURL *url = create path according to your selected sound file
。但是您无法将有效负载与您的设置同步,这意味着当您从应用设置更改声音文件时,有效负载sound = "example.caf"
不会改变。您必须在本地应用逻辑来满足您的需求。
好的,谢谢)所以你的意思是,如果我在 aps 中指定sound = "example.caf"
,那么即使应用设置有不同的.caf 作为通知的声音,应用也会播放“example.caf”文件?
在应用程序的哪里添加文件?
应用程序包中的任何位置@dpaksoni【参考方案2】:
在您的应用委托类中使用此方法。
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
UIApplicationState state = [application applicationState];
if (state == UIApplicationStateActive)
NSLog(@"User Info : %@", [userInfo description]);
NSLog(@"User Info Alert Message : %@", [[userInfo objectForKey:@"aps"] objectForKey:@"alert"]);
NSString *messageString = [NSString stringWithFormat:@"%@", [[userInfo objectForKey:@"aps"] objectForKey:@"alert"]];
NSString *playSoundOnAlert = [NSString stringWithFormat:@"%@", [[userInfo objectForKey:@"aps"] objectForKey:@"sound"]];
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@",[[NSBundle mainBundle] resourcePath],playSoundOnAlert]];
NSError *error;
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
audioPlayer.numberOfLoops = 0;
[audioPlayer play];
【讨论】:
你必须小心,因为如果你的应用程序被杀死/关闭,就不会再收到这个委托方法调用了。 我已经测试了这个解决方案,但它不起作用!单击推送通知后,您将听到声音,然后您将在此处听到 iOS 系统的默认声音。我还没有找到办法。仅当应用程序在前台时才有效。以上是关于用户收到推送通知时如何播放自定义声音文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章