当用户收到推送通知时如何播放自定义声音文件?

8
我有一个声音文件在应用程序包中,我想在用户收到推送通知时播放该声音文件。
在iOS中是否可能?如果是,请建议实现此目标的方法。
谢谢。

https://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html - Tirth
顺便提一下,除了“默认”之外的任何声音(系统声音或您自己制作的声音)都被视为自定义声音,并且必须手动添加到AppBundle中。 - mfaani
2个回答

18

若要播放此声音,您必须在通知载荷中指定声音文件的文件名。例如,假设您已经将一个名为example.caf的声音文件添加到应用程序中,则可以使用以下通知载荷来播放此声音:

{
    aps =     
    {
        alert = "test example notification message";
        sound = "example.caf";
    };
}

当您收到通知时,自定义声音将播放。


1
但是,如果我的应用程序中有应该播放特定文件的设置呢?我不想使用aps指定声音文件名称,但我希望在收到通知时使用本地设置。例如,我有一个设置屏幕,在那里我指定需要的声音和音量级别。那么,我猜我们需要使用@007的答案? - Matrosov Oleksandr
在这种情况下,您可以遵循@007的答案。只需根据您选择的声音文件更改NSURL *url = create path即可。但是,如果您无法将有效负载与设置同步,则表示当您从应用程序设置更改声音文件时,您的有效负载sound =“example.caf”不会更改。您必须在本地应用逻辑以满足您的需求。 - Bhavin_m
好的,谢谢。你的意思是如果我在APS中指定了sound =“example.caf”,那么即使应用程序设置了不同的.caf文件作为通知声音,应用程序也会播放“example.caf”文件? - Matrosov Oleksandr
在应用程序中添加文件的位置在哪里? - dpaksoni
你的应用程序包中的任何位置 @dpaksoni - Bhavin_m

7

在你的应用代理类中使用此方法。

-(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];

    }


}

你必须小心,因为如果你的应用被杀死/关闭,就不再会收到这个委托方法的调用。 - patrickS
我已经测试了这个解决方案,但它并没有起作用!你只有在点击推送通知后才能听到声音,然后你会听到iOS系统的默认声音。我还没有找到解决方法。它只有在应用程序在前台运行时才能正常工作。 - XcodeNOOB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接