之前已经测试过这个方案了,可行但是仅限于测试,本身并未尝试上线,因为该需求已经改了,但是一直比较忙,现在贴上
后台持续存活的方案
找到的这个方案的实现原理就是后台定位(猜测审核很大程度过不去)
首先,接到公司的设计,接入极光推送,这当然很简单,我也十分迅速的完成了,但是当产品看的时候又提出了新的设计,设计方案如下几点。
- 在登录状态下,可以接收推送的通知。
- 在退出登录时,不可以接收推送的通知。
- 在前台状态下,接收到通知播报推送内容,并打印内容。
- 在后台模式下,接收到通知播报推送内容,并打印内容。
- 在锁屏模式下,接收到通知播报推送内容,并打印内容。
我首先解决的是1、2问题,因为android文档中,直接给出了恢复和暂停的代理方法,但是iOS端缺没有,实现的方案只能是接入别名/Tag来对指定的设备来推送
<pre>
登录成功时->设置别名@"alias"
[JPUSHService setTags:nil alias:@"alias" fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
NSLog(@"rescode: %d, \ntags: %@, \nalias: %@\n", iResCode, iTags , iAlias);
}];
退出登录时->设置别名@""
[JPUSHService setTags:nil alias:@"" fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
NSLog(@"rescode: %d, \ntags: %@, \nalias: %@\n", iResCode, iTags , iAlias);
}];
</pre>第一个问题很好解决,但是在解决第二个问题时,首先需要将文字转成声音,所以我使用了。
文本转语音技术, 也叫TTS, 是Text To Speech的缩写. iOS如果想做有声书等功能的时候, 会用到这门技术.
iOS7之后才有该功能
需要 AVFoundation 库
AVSpeechSynthesizer: 语音合成器, 可以假想成一个可以说话的人, 是最主要的接口
AVSpeechSynthesisVoice: 可以假想成人的声音
AVSpeechUtterance: 可以假想成要说的一段话
// 简单实现播放
AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:userInfo[@"aps"][@"alert"]];
AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc] init];
[synth speakUtterance:utterance];
3 其实做到现在基本可以使先前个需求了,但是我们还同时需要在后台的时候也播放语音怎么做呢?
3.1 首先要打开Remote notifications,并加入content-available: 1 这个参数.
3.2 如下图:
3.3
//后台播放音频设置
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setActive:YES error:nil];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
然后就可以真机测试了,这个实现了后台播放语音,但是iOS规定600s后程序会被挂起,到时还是不能够播放的,我开始寻找在后台一直偷偷运行的方案,�后台播放无声的音乐,�但是�审核没过,我建议还是在iOS 10之前的版本还是播放固定的声音在iOS 10之后播放语音播报的方案。
注意事项:这张图是极光问答社区相关人员给出的不保证成功,所以出现收不到,丢单也是正常的范围。
这期就是解决我题目的问题,后续我会整理一下推送的相关特性,方便大家和我查找使用,如果有iOS相关打印的问题也可以给我留言。如果喜欢请给我一个喜欢,谢谢!不会排版,多多见谅!