导言
前两天产品司理期望在B端的App上实现订单告诉的语音提示功用,类似于微信、支付宝的收款到账告诉。遂展开调研,最终在拜读各位大佬的文章后,终于依据 Notification Service Extension 实现此功用,在此记录一笔。
何为 Notification Service Extension
Notification Service Extension 是 iOS 10 推出的体系扩展。它提供了对长途推送告诉音讯
的阻拦预处理功用。
实现思路
创立一个推送扩展(Notification Service Extension)
,在长途告诉音讯到达时进行阻拦并解析音讯中的内容,再依据订单类型,对告诉的声响差异化设置。然后达到播映不同的语音的目的。
1. 创立 Extension 的 AppID
Extension
是依赖于主App的插件。其生命周期受体系办理,不受主App办理。首要咱们需要登录苹果的开发者账号,为推送扩展
创立它自己的App ID
。
创立ID时,我在
capabilities
中选中了App Group
项。App Group
用于创立Extension
与主App的共享数据空间。便利今后存储在线生成的语音文件,用来播报订单号与金额。(写本文时没有这个需求,所以暂时不必设置)
2. 创立描绘文件 Profile
依照正常流程,创立Extension
的描绘文件。
3. 项目工程添加 Notification Extendsion
3.1 主工程装备
主工程的Background Mode
依照如下勾选:
3.2 创立扩展
点击 File -> New -> Target,创立一个Notification Service Extension
。
3.3 装备扩展
创立完结后,导入描绘文件。
4. 生成语音文件
经过上面的步骤,咱们的扩展已经装备完结。下面持续生成语音文件。因为现在项目中订单的各种状态所对应的提示是固定的。所以直接运用科大讯飞的在线语音合成,得到不同的语音文件。
现在语音文件一致放到了主项目中的Resource文件目录下:
5. Extension 编码
完结Extendsion
装备,并准备好语音文件后。咱们可以进入到编码部分。
对长途推送的阻拦处理,都集中在NotificationService.m
文件。
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];
/// 解析推送音讯
NSMutableDictionary *extras = [NSMutableDictionary dictionaryWithDictionary: self.bestAttemptContent.userInfo];
/// 拿到订单类型
NSNumber *msgType = extras[@"msgType"];
/// 依据订单类型,拿到对应音频文件名称
NSString *soundName = [self soundNameByNotifyType:msgType.integerValue];
/// 差异化设置推送声响
self.bestAttemptContent.sound = ISNOTEMPTY_STRING(soundName) ? [UNNotificationSound soundNamed:soundName] : [UNNotificationSound defaultSound];
NSLog(@"(%@)%@", soundName, msgType);
self.contentHandler(self.bestAttemptContent);
}
-(NSString *)soundNameByNotifyType:(MDBShopMallOrderType)type{
NSString *soundName = @"";
switch (type) {
case MDBShopMallOrderTypeNew:
soundName = @"新订单.mp3";
break;
case MDBShopMallOrderTypeWriteOff:
soundName = @"核销.mp3";
break;
case MDBShopMallOrderTypeError:
soundName = @"配送反常.mp3";
break;
case MDBShopMallOrderTypeRefund:
soundName = @"退款.mp3";
break;
default:
soundName = @"";
break;
}
return soundName;
}
调试
我运用Knuff模拟长途推送告诉音讯。具体的音讯格局,请自行查阅推送平台的文档阐明。
最重要的是,假如期望Notification Extension
生效,那么mutable-content
字段必须设置为 1
。
感谢
iOS15适配本地告诉功用及语音播报探索
iOS13微信收款到账语音提示开发总结