老铁,我今天忙了一下午就为解决这个问题,网上有一些方法,说了一堆关于这个挂到后台收到推送并且获得推送内容的问题,有很多人都说APP挂到后台一会就被杀死。但实际上可以有办法解决的。

WechatIMG3.jpeg

“后台应用刷新”便是我们问题的主角,它可以有效的阻止APP挂在后台被杀死。关于如何实现上面的问题,还听我细细说来。
首先我不就说如何集成推送的内容,直接说如何在挂到后台获取推送内容的方法。
1.首先需要打开三个开关,第一个和最后两个。

开关

如果你的需求没有语音,第一个可以关掉。无所谓的。

然后在AppDelegate里需要添加一个方法,这个方法就是APP挂到后台也不会被杀死的方法

老铁,我今天忙了一下午就为解决这个问题,网上有一些方法,说了一堆关于这个挂到后台收到推送并且获得推送内容的问题,有很多人都说APP挂到后台一会就被杀死。但实际上可以有办法解决的。

“后台应用刷新”便是我们问题的主角,它可以有效的阻止APP挂在后台被立即杀死。关于如何实现上面的问题,还听我细细说来。
首先我不就说如何集成推送的内容,直接说如何在挂到后台获取推送内容的方法。
1.首先需要打开三个开关,第一个和最后两个。

开关

如果你的需求没有语音,第一个可以关掉。无所谓的。

然后在AppDelegate里需要添加一个方法,这个方法就是APP挂到后台也不会被杀死的回调方法:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler {
//回调
NSLog(@"Received remote notification with userInfo %@", userInfo); NSString * price =[NSString stringWithFormat:@"%@",[userInfo objectForKey:@"amount"]]; completionHandler(UIBackgroundFetchResultNewData); //语音播报 AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:[NSString stringWithFormat:@"阿狸钱包提醒您:已收款%@元",price]]; AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc] init]; [synth speakUtterance:utterance]; }

你以为这样就完事了吗?这样肯定没声音,但是你却能拿到推送给你的数据,接下来还有几个方法。都要在AppDelegate里实现:

- (void)applicationWillTerminate:(UIApplication *)application {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. UIApplication* app = [UIApplication sharedApplication];
__block UIBackgroundTaskIdentifier bgTask;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
if (bgTask != UIBackgroundTaskInvalid)
{
bgTask = UIBackgroundTaskInvalid;
}
});
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
if (bgTask != UIBackgroundTaskInvalid)
{
bgTask = UIBackgroundTaskInvalid;
}
});
}); }
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSError *setCategoryErr = nil;
![Uploading WechatIMG395_980830.jpeg . . .] NSError *activationErr = nil;
[[AVAudioSession sharedInstance]
setCategory: AVAudioSessionCategoryPlayback
error: &setCategoryErr];
[[AVAudioSession sharedInstance]
setActive: YES
error: &activationErr]; return YES;
}

哦对了,完成上面还是不能拿到推送内容,因为少了一个推送里很重要的字段,而这个字段就是服务器推送内容里必须要加的内容那就是:

WechatIMG395.jpeg

"content-avilable" =1 这个字段千万千万千万不能少。
如果你的服务器开发小哥哥不知道怎么传,来,我把后端的demo也粘贴给你。

WechatIMG201.png

以上便能实现所谓的APP挂到后台也能接受到推送内容并且语音播放的解决方法!希望能帮到你们。我之所以写这篇文章是因为,网上没有一个解决方法够详细,很多人都很迷茫(包括我)。

好了,废话不多说了,如果你觉得这篇文章轻松的解决了你的问题,麻烦点赞+关注+评论!

加QQ群:543911881 (记得备注,么么哒)点赞+关注+评论!!!最好能打赏哈哈哈~

作者:Sylars
链接:http://www.jianshu.com/p/c06133d576e4
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

iOS,APP退到后台,获取推送成功的内容并且语音播报内容。的更多相关文章

  1. iOS刚进入后台接受推送、打开推送调转到相应的界面

    刚进入后台的时候消息处理时候我用了本地推送!可以看我前边写的博客,怎么处理刚进入后台接收推送的案例,链接 /** 注释:打开推送的三种方式:-peter 1.apns的时候,结束进程退出后台:启动的时 ...

  2. iOS---iOS10适配iOS当前所有系统的远程推送

    一.iOS推送通知简介 众所周知苹果的推送通知从iOS3开始出现, 每一年都会更新一些新的用法. 譬如iOS7出现的Silent remote notifications(远程静默推送), iOS8出 ...

  3. 使用SignalR ASP.NET Core来简单实现一个后台实时推送数据给Echarts展示图表的功能

    什么是 SignalR ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功能添加到应用程序的功能. 实时 web 功能使服务器端代码可以立 ...

  4. 李洪强iOS经典面试题154- 通知与推送

    李洪强iOS经典面试题154- 通知与推送   通知与推送 本地通知和远程推送通知对基本概念和用法? image 本地通知和远程推送通知都可以向不在前台运行的应用发送消息,这种消息既可能是即将发生的事 ...

  5. EasyPusher手机直播推送是如何实现后台直播推送的

    本文由EasyDarwin开源团队成员John提供:http://blog.csdn.net/jyt0551/article/details/52276062 EasyPusher Android是使 ...

  6. Android、iOS和Windows Phone中的推送技术

    推送并不是什么新技术,这种技术在互联网时代就已经很流行了.只是随着进入移动互联网时代,推送技术显得更加重要.因为在智能手机中,推送从某种程度上,可以取代使用多年的短信,而且与短信相比,还可以向用户展示 ...

  7. hbuilder APP服务器端(C#)推送

     实现推送有多种方法和技术手段,我这边是使用三方“个推”去实现对特定用户的推送.我自己是关联业务,对下一步任务代办人进行消息通知.   1 .个推账号申请和配置 1.1.IOS需要推送证书 参考网址: ...

  8. PHP Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用php实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...

  9. Ruby Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用Ruby实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推 ...

随机推荐

  1. Uploadify API在项目上的应用

    在项目开发中,前端使用easyui,jq的时候,我么涉及到导入的时候都要用到这个上传插件,用法是: 1:先初始化上传控件 2:打开导入的easyui dialog弹出框,dialog里面将上传的inp ...

  2. roguelike地图的随机生成算法

    如果要想自己设计一个roguelike游戏,那么需要你有一个随机地图生成,我在indienova上看到一篇文章,描述了一个roguelike算法,然后自己用unity实现了一个下. 原文地址:随机生成 ...

  3. jQuery 如何获取ASP.NET服务器控件的值

    由于ASP.NET网页运行后,服务器控件会随机生成客户端id,jquery获取时候不太好操作,总结有以下3种方法: 服务器控件代码:<asp:TextBox ID="txtUserID ...

  4. input输入框修改后自动跳到最后一个字符

    <input class="m-form-control" onpaste="return false" placeholder="直播间名称& ...

  5. js引用类型的赋值

    在开发中,有时候需要将数组或者对象的值赋予其他另一个变量,但是两个变量之间会相互影响,因为在将引用类型的值赋给其他变量时,赋予的其实是内存中的存储地址 var arr = [1,2,3,4,5] va ...

  6. UpdateObjectClient 空白目录有问题

    UpdateObjectClient 如果目标文件夹下面有空白目录的话 有可能造成无法下载所有文件

  7. bzoj 3996: [TJOI2015]线性代数【最小割】

    把转置矩阵看成逆矩阵吓傻了233 首先按照矩乘推一下式子: \[ D=\sum_{i=1}^n a[i]*(\sum_{j=1}^n a[j]*b[j][i])-c[i] \] \[ D=(\sum_ ...

  8. JDK 重要目录结构

    \bin 目录包含 Java 的开发工具,包括 Java 编译器 javac.exe.Java 解释器 java.exe 等: javac:Java 编译器,用来将 Java 程序编译成字节码 jav ...

  9. js-metisMenu

    metisMenu是js的菜单插件,可以实现可折叠的二级菜单效果. 1 bootstrap折叠(Collapse) 直接引用bootstrap.js或者bootstrap.min.js就可以支持该插件 ...

  10. redis集群模式

    1 弊端和优势 弊端:相比单机模式,集群模式会在节点之间同步数据,会降低20%-30%的性能,同时增加架构复杂性,提高硬件成本和学习成本. 优势:增加冗余,避免单点故障.单机模式如果要重启,必然会丢失 ...