iOS实现支付宝收款播报---优化
上一篇文章我们介绍了如何在iOS10上实现推送信息的语音播报。虽然在iOS10及以上能够实现,但是在iOS10以下就无法播报了,同一需求下给用户的感觉有点突兀,这里我们简单的优化一下。在iOS 10及以上播报,在iOS 10以下实现播报固定的一段文字(如:"您有一笔收款到账")。
如果您还不知道怎么实现iOS 10上的语音播报,或者不明白请结合上一篇文章一起阅读iOS10 实现支付宝收款播报这里附上优化后的demo
思考
需求
1、iOS 10及以上实现推送消息的播报
2、iOS 10以下实现固定语音通知
搞清楚了需求之后我们就着手考虑该如何来实现了,首先iOS 10及以上实现推送消息的播报我们可以实现,iOS 10以下实现固定语音通知也可以实现。问题是如果我把送的消息改成自定义的之后,在iOS 10及以上系统会出现固定语音播报和推送消息播报重叠的情况,这里我们该如何处理?
1、首先自定义推送铃声是我们将sound的这个字段改成的自定义的推送铃声名称。
2、推送消息的播报是我们通过拦截推送在NotificationService通过代理方法处理- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler{}
而iOS 10以下是走不到NotificationService里面的
3、那么到这里我们的问题就基本解决了。我们可以在- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler{}
方法里处理,将sound在设置成default这样就不会出现重叠播报了。
实现如下
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.contentHandler = contentHandler;
// copy发来的通知,开始做一些处理
self.bestAttemptContent = [request.content mutableCopy];
self.bestAttemptContent.sound = [UNNotificationSound defaultSound];
// Modify the notification content here...
// self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];
NSLog(@"userInfo----->%@",self.bestAttemptContent.userInfo);
NSData *jsonData = [self.bestAttemptContent.userInfo[@"payload"] dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *pushdic = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:nil];
if ([pushdic[@"Type"] isEqualToString:@"1"]) {
[self startSpeaking:pushdic[@"Content"]];
}
self.contentHandler(self.bestAttemptContent);
}
对于自定义推送的有几点需要注意一下
1、音频文件格式是 aiff,wav,caf
2、音频文件必须放到 app 的 mainBundle 目录中
3、音频文件的播放时间必须在 30s 内,否则将被系统默认通知声音替代。
如果您在集成的过程中有遇到问题您可以留言或者私信我。文章若有表述不正确的地方还请各位大佬指出。