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-A
或Sound-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 Developer Libray (中文版)-- About Objective-C