美文网首页
iOS实现支付宝收款播报---优化

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

作者: 小打小闹hx | 来源:发表于2017-11-06 16:57 被阅读326次

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

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

    相关文章

      网友评论

          本文标题:iOS实现支付宝收款播报---优化

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