iOS:Objective -C如何在应用程序处于后台模式时更改推送通知声音有效负载?

Posted

技术标签:

【中文标题】iOS:Objective -C如何在应用程序处于后台模式时更改推送通知声音有效负载?【英文标题】:iOS:Objective -C How to change push notification sound payload when app in background mode? 【发布时间】:2017-06-12 05:26:20 【问题描述】:

在我的应用程序中,我允许用户更改 push notification 的声音。

当用户选择Sound-ASound-B 时,当应用处于活动模式时,它会正常播放。

但是当应用程序位于background mode 时,它总是播放Sound-A,因为push notification payload sound 设置为Sound-A.


   "aps": 
   "alert": "My News!",
   "sound": "sound_a.mp3",
    
 

如何用用户选择的声音覆盖它。

我已将用户选择的声音存储在 app preferences 中,我尝试替换它,但它不起作用。

NSString *soundName = [self getSoundTrack];
[pushArray setObject:soundName forKey:@"sound"];

【问题讨论】:

需要在payload中设置声音名称。 是否可以通过编程方式更改声音名称? 嗯,我不确定,但据我所知,您不能以编程方式设置它。您需要在应用程序包中添加声音文件,并且有效负载应该在“声音”键中包含该文件名。 【参考方案1】:

您可以使用 AVplayer 在后台播放通知声音。在我的应用中运行良好

@property (strong, nonatomic) AVAudioPlayer *audioPlayer;


 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
 _audioPlayer=nil;
  if(application.applicationState == UIApplicationStateInactive || application.applicationState == UIApplicationStateBackground )
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                     pathForResource:@“soundName”
                                     ofType:@"mp3"]];
NSError *error;
_audioPlayer = [[AVAudioPlayer alloc]
                initWithContentsOfURL:url
                error:&error];
if (error)

    NSLog(@"Error in audioPlayer: %@",
    [error localizedDescription]);
 else 
    [_audioPlayer prepareToPlay];

[_audioPlayer play];

【讨论】:

当应用程序处于后台模式时,如何根据用户的选择更改“soundName”? 您需要自行管理“声音名称”......我在每个通知上随机播放声音......我有 40 个声音文件 您是否在您的应用程序包中添加了声音文件?【参考方案2】:

在后台模式下接收时,您无法更改 ios 应用程序的声音。要播放的声音在有效载荷中发送。如果您想播放用户选择的声音,您也应该能够将该数据存储在后端

【讨论】:

【参考方案3】:

如果您想使用 iOS 客户端代码以编程方式更改声音,您可以改为让服务器发送静默推送通知,然后在您的应用被唤醒到后台时发送带有配置声音的本地通知。

但是,更简单的解决方案是其他人所说的。当用户更改声音设置时更新服务器。

【讨论】:

以上是关于iOS:Objective -C如何在应用程序处于后台模式时更改推送通知声音有效负载?的主要内容,如果未能解决你的问题,请参考以下文章

iOS/Objective-C:有啥方法可以查看安排了哪些 localNotifications? [复制]

IOS/Objective-C:调用完成块的语法

iOS Developer Libray (中文版)-- About Objective-C

IOS/Objective-C: MakeUILabel 使用自动布局流向多行

iOS学习之Objective-C 2.0 运行时系统编程

iOS -- Effective Objective-C 阅读笔记