iOS实现支付宝收款播报---优化

2017-11-06  本文已影响326人  小打小闹hx

上一篇文章我们介绍了如何在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 内,否则将被系统默认通知声音替代。

如果您在集成的过程中有遇到问题您可以留言或者私信我。文章若有表述不正确的地方还请各位大佬指出。

上一篇下一篇

猜你喜欢

热点阅读