美文网首页ios 知识点
iOS 推送自定义声音

iOS 推送自定义声音

作者: 青山脚下花盛开 | 来源:发表于2019-01-09 11:52 被阅读529次

网上有很多博客说添加IOS10之后新增的Notification Service Extension才可以推送Apns自定义铃声,实际上是不对的,简单的自定义语音推送IOS10之前就已经支持,而且APNS Server与deviceToken直接相关联,自然也不存在许多博客说的杀死App后接受不到推送的问题。

有关Notification Service Extension多媒体拓展问题可参考https://www.jianshu.com/p/56c91be16c3d

本文提供简单的自定义语音推送解决方案。

修改苹果原生推送声音:

(1)App在后台或者被杀死时,服务器给你推送的userinfo中sound字段的value和你本地的声音文件名一致时,这样就可以播放你本地自定义的语音文件(mp3,wav等常见语音格式都可以支持)。

(2)App运行在前台时大部分App会关闭掉UNNotificationPresentationOptionSound权限,当你有类似美团接单,支付宝到账等需前台响铃的需求时需要自己写响铃方法,这里主要有两种解决方案。

方案1播放系统音效


/// 播放通知铃声

- (void)jyeb_playSoundWithFilename:(NSString *)filename fileExtension:(NSString *)fileExtension {

    // 系统值 kSystemSoundID_Vibrate = 0x00000FFF

    SystemSoundID sound = 1;

    // 转换 URL

    NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:filename ofType:fileExtension];

    NSURL *soundURL = [NSURL fileURLWithPath:soundFilePath];

    // 生成系统音效id

    AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &sound);

    // 播放系统音效

    AudioServicesPlaySystemSound(sound);

}

将此方法在应用在前台处理推送的方法中调用,注意区分iOS10前后处理方法的不同。

方案2:AVAudioPlayer播放

单例一个AVAudioPlayer控制类


/// 播放音频

- (void)playWithContentsOfFileName:(NSString *)fileName fileType:(NSString *)fileType callBack:(EBAPNsAudioCompleted)callBack

{

    self.callBack = callBack;

    [self activePlayback];

    // 调节音量

    [self setHighVolume];

    NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:fileName ofType:fileType];

    NSURL *soundURL = [NSURL fileURLWithPath:soundFilePath];

    self.audioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:soundURL error:nil];


    self.audioPlayer.delegate = self;

    // 开始播放

    [self.audioPlayer prepareToPlay] ;

    [self.audioPlayer play];

}

// 播放器激活

- (void)activePlayback

{

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:NULL];

    [[AVAudioSession sharedInstance] setActive:YES error:NULL];

}

// 播放器休眠

- (void)disactivePlayback

{

    [[AVAudioSession sharedInstance] setActive:NO error:NULL];

}

// 播放完成

- (void) playCompleted

{

    if (self.callBack) {

        self.callBack() ;

    }

}

#pragma mark - AVAudioPlayerDelegate

// 播放结束回调

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag

{

    // 设置回初始音量

    [self setNormalVolume] ;

    [self disactivePlayback] ;

    [self performSelectorOnMainThread:@selector(playCompleted) withObject:nil waitUntilDone:NO] ;

}

这里我们推荐使用第一种方法,通过系统方法进行播放。

相关文章

  • iOS 推送总结

    注册推送 收到推送 iOS10以前 iOS10之后 关于推送的声音播放 苹果默认的推送声音就不说了,需要播放自定义...

  • IOS推送自定义声音

    - (BOOL)application:(UIApplication*)application didFinish...

  • iOS推送自定义声音

    每天中午下去吃午饭,在电梯间外卖小哥的手机总会响起“你有一个美团外卖转单求助,请及时处理,注意交通安全。”哈???...

  • iOS 自定义推送声音

    核心步骤 制作满足系统要求的推送提示铃声(格式为aiff,wav,caf 格式文件,最多30s) 导入 Xcode...

  • ios自定义推送声音

    在终端敲入以下命令将音频转化为.caf格式 afconvert /System/Library/Sounds/Su...

  • iOS 推送自定义声音

    网上有很多博客说添加IOS10之后新增的Notification Service Extension才可以推送Ap...

  • ios远程推送自定义推送声音

    1.找个.mp3的文件2.在mac的终端输入:afconvert3.回车之后,再指定到你音频文件夹里。3.再输入:...

  • ios 自定义远程推送声音

    传送门自定义不成功可能是版本的问题,我的10.3.3用caf文件无效,用mp3文件测试成功。

  • IOS 推送消息声音自定义

    IOS消息推送声音默认使用系统声音,可以支持自定义。 注意事项: 1.由于系统播放器播放支持的音频格式系统默认三种...

  • 推送自定义声音的设置

    简单记录一下推送自定义声音 关于推送,官方文档、各种第三方推送文档都很全,就跳过了。 由于自定义通知声音还是由 i...

网友评论

    本文标题:iOS 推送自定义声音

    本文链接:https://www.haomeiwen.com/subject/rubwrqtx.html