美文网首页iOS经验总结
iOS 推送通知声音播报钱数,类似支付宝支付到账通知

iOS 推送通知声音播报钱数,类似支付宝支付到账通知

作者: 蓝白自由 | 来源:发表于2018-01-03 17:41 被阅读233次

支付宝有一个功能,就是,别人扫描你的二维码给你转账之后,收到钱会有一条语音推送,“支付宝到账 1000万” 之类的推送消息,不管你的支付宝app有没有被杀死。

有两种方案实现了上面描述的场景:

必备条件

上面的描述场景只有在 iOS 10 以上版本才可以,因为必须要基于 Notification Service Extension


实现方式
1、Service Extension 中收到推送之后,用AVSpeechSynthesisVoice相关类,直接把推送过来需要播报相关的文字转化成语音播报

2、ServiceExtension中收到推送之后,将要播报的数字,找到对应的单个音频,排序,用拼接音频的方式<通过推送过来的文字去查找相关的音频,然后拼接成一个音频>,然后使用AudioServicesCreateSystemSoundID播放

在介绍相关方式之前,先介绍一个测试工具
SmartPush

使用方式也很简单,应该一看就懂



#import "NotificationService.h"
import <AVFoundation/AVFoundation.h>

@interface NotificationService ()

@property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);
@property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;

@end

@implementation NotificationService  // https://www.cnblogs.com/lidongq/p/5968923.html  TTS文字转语音

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];
    
    // Modify the notification content here...
    // 修改通知标题,方便查看通知显示效果
    self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];
   
    // 弹出修改后的通知
    self.contentHandler(self.bestAttemptContent);
    [self playVoiceWithAVSpeechSynthesisVoiceWithContent:self.bestAttemptContent.body];
}


// 添加的
- (void)playVoiceWithAVSpeechSynthesisVoiceWithContent:(NSString *)content {
    if (content.length == 0) {
        return;
    }
    // 创建嗓音,指定嗓音不存在则返回nil
    AVSpeechSynthesisVoice *voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CN"];
    
    // 创建语音合成器
    AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init];
    
    // 实例化发声的对象
    AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:content];
    utterance.voice = voice;
    utterance.rate = 0.5; // 语速
    
    // 朗读的内容
    [synthesizer speakUtterance:utterance];
}
- (void)serviceExtensionTimeWillExpire {
    // Called just before the extension will be terminated by the system.
    // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
    self.contentHandler(self.bestAttemptContent);
}

@end

推送的内容是:

{
  "aps":{
    "alert":{
      "title":"iOS 10 title",
      "subtitle":"iOS 10 subtitle",
      "body":"世上只有妈妈好,有妈的孩子像块宝。投进妈妈的怀抱,幸福哪里找。没妈的孩子像根草"
    },
    "my-attachment":"http://img01.taopic.com/160317/240440-16031FU23937.jpg",
    "mutable-content":1,
    "category":"myNotificationCategory1",
    "badge":3  
  }
}

// 以下是个人保存
{
    "aps": {
        "alert": {
            "title": "title",
            "subtitle": "subtitle",
            "body": "body"
        },
        "badge": 1,
        "sound": "default",
        "category": "test_category",
        "mutable-content": 1
    },
    "key1":"value1",
    "key2":"value2"
}

坑点
说明:当前实现的是将push内容中的body播放出来
1、如果你收到推送了但是添加了系统的铃声,也就是你在push的json中添加了"sound":"default"那么就可能会影响推送声音的播放
2、收到推送了,但是没有播报语音,检查一下这里

3、播放的声音时间长度,经过测试最多是5秒钟,这里应该是苹果做了限制,拿上面的推送内容举例子"body":"世上只有妈妈好,有妈的孩子像块宝。投进妈妈的怀抱,幸福哪里找。没妈的孩子像根草",最多也就是播放到世上只有妈妈好,有妈的孩子像块宝。投进妈妈的怀抱

相关文章

网友评论

    本文标题:iOS 推送通知声音播报钱数,类似支付宝支付到账通知

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