IOS推送声音设置

项目中遇到需要自定义通知声音的需求,以前没做过,就查了下官方文档,就像文档上说的,实现起来确实挺简单,就整理下当做备忘吧。

关于推送,官方文档、各种第三方推送文档都很全,就跳过了。

由于自定义通知声音还是由 iOS 系统来播放的,所以对音频数据格式有限制,可以是如下:

对应音频文件格式是 aiffwavcaf 文件,文件也必须放到 app 的目录中。

自定义通知声音的播放时间必须在 30s 内,如果超过这个限制,则将用系统默认通知声音替代。

可以使用 afconvert 工具来处理音频文件格式,在终端中敲入如下命令就可以将一个 mp3 文件转换成 caf 文件:

afconvert unbelievable.mp3 unbelievable.caf -d ima4 -f caff -v
转换完成后就可以将  unbelievable.caf  这个文件拖入 Xcode 工程中,编译运行项目在真机上。

可以通过iTunes 把MP3格式转换成WAV格式。


本地推送 和 远程推送对自定义声音的处理是一样的,主要是:

noti.soundName =UILocalNotificationDefaultSoundName;// 系统默认

noti.soundName = @"unbelievable.caf";// 自定义声音名称


本地推送:

/**
     *  触发时间
     */
    // 设置 10秒之后
    NSDate *date = [NSDate dateWithTimeIntervalSinceNow:10];
    
//    // 设置指定时间
//    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
//    [formatter setDateFormat:@"HH:mm"];
//    NSDate *now = [formatter dateFromString:@"13:42"];// 触发通知时间
  
      // 一个本地推送
    UILocalNotification *noti = [[UILocalNotification alloc] init];
    if (noti) {
        //设置推送时间
        noti.fireDate = date;
        
        //设置时区
        noti.timeZone = [NSTimeZone defaultTimeZone];
        
        // 设置重复间隔
        noti.repeatInterval = NSWeekCalendarUnit;
        
        // 推送声音
        noti.soundName = @"unbelievable.caf";//UILocalNotificationDefaultSoundName;
        
        // 内容
        noti.alertBody = @"推送内容";
        
        // 显示在icon 上的红色圈中的数字
        noti.applicationIconBadgeNumber = 1;
        
        // 设置info方便在之后 需要撤销的时候使用
        NSDictionary *infoDic = [NSDictionary dictionaryWithObject:@"name" forKey:@"key"];
        noti.userInfo = infoDic;
        
        // 添加推送到UIApplication
        [[UIApplication sharedApplication] scheduleLocalNotification:noti];
    }

远程推送 

服务器返回的数据如下:

userInfo默认包含以下内容:
             aps =     {
             alert = "推送信息";//推送显示的问题信息在这里
             badge = 1;//app的icon右上角的推送数字 在这里设置
             sound = "XXX.caf";//可以为空,为空就是默认的声音
             };


sound 对应的 value 赋值到 noti.soundName 上面就行了 




同学遇到的问题:

问题1:我已经在通知里面设定了自定义声音为啥还是默认声音那?

   noti.soundName = @"unbelievable.caf";// 自定义声音名称 

解答:1、声音太长超过30秒,

     2、看看你要设置的音频有没有加到项目中,你可以到Build Phases/Copy Bundle Resources 看看。







你可能感兴趣的:(iOS)