接入极光推送实现前台语音播报后台锁屏自定义消息并适配版本
1.首先实现语音播报,请看我的iOS 文字转语音的三种方案
2.如何实现自定义声音
对应音频文件格式是 aiff,wav,caf 文件,文件也必须放到 app 的 mainBundle 目录中。
自定义通知声音的播放时间必须在 30s 内,如果超过这个限制,则将用系统默认通知声音替代。
可以使用 afconvert 工具来处理音频文件格式,在终端中敲入如下命令就可以将一个 mp3 文件转换成 caf 文件:
$ afconvert sound.mp3 sound.caf -d ima4 -f caff -v
14888787859072.jpg
自己在极光测试,在上图填写。
3.主要实现着3个回调函数
<pre>
iOS 10会调用下面的的函数3.2/3.3 其他调用3.1
在iOS 10默认不提示弹框、声音所以不需要做处理,3.2需要做处理处理 completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以设置 (内参数任意删除,这里我只去除了声音)
3.1///基于iOS 7 及以上的系统版本
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^) (UIBackgroundFetchResult))completionHandler
3.2
ifdef NSFoundationVersionNumber_iOS_9_x_Max
pragma mark- JPUSHRegisterDelegate
-(void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler
3.3
-(void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler
</pre>
4.实现之后还会出现一个问题重复播报,需要记录一下内容,重复返回,以下是我简单实现的方法
<pre>
if (self.recordDict.allKeys.count > 10) {
[self.recordDict removeAllObjects];
}
if (self.recordDict[string] != nil && [self.recordDict[string] isEqualToString:string]) {
return;
} else {
[self.recordDict setValue:string forKey:string];
}
</pre>
网友评论