IM-iOS退出后台接受消息,app退出后台能接收到推送
App被失活状态的时候可以走苹果的APNS;但是在活跃的时候却接受不到推送!
那就用到本地推送:UILocalNotification 消息神器。
处理不好可能会有很多本地推送到来,那么问题来了要在什么地方去注册通知?什么地方去移除通知?
一、要在什么地方去注册通知
- (void)applicationDidEnterBackground:(UIApplication *)application;
手机刚进入后台会走的方法,applicationDidEnterBackground;
我会注册一个通知:名字宏定义
/**应用获取到刷新推送消息提醒*/
#define kString_NSNotificationCenterRefreshMessageData @"kString_NSNotificationCenterRefreshMessageData"
在AppDelegate.m的 applicationDidEnterBackground方法里边添加通知
- (void)applicationDidEnterBackground:(UIApplication *)application{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(messageCome:) name:kString_NSNotificationCenterRefreshMessageData object:nil];
}
- (void)messageCome:(NSNotification *)notifi{
if (![notifi.name isEqualToString:kString_NSNotificationCenterRefreshMessageData]) {
return;
}
dispatch_async(dispatch_get_main_queue(), ^{
[self notifi:notifi];
});
}
- (void)notifi:(NSNotification *)notifi{
NSMutableString * notifiMessage = nil;
RCMessage *message = notifi.object;
if (message.conversationType == ConversationType_SYSTEM) {
notifiMessage = [[NSMutableString alloc]initWithString: @"猎上网:"];
}else if(message.conversationType == ConversationType_PRIVATE){
MessageUser *user = [[MyFMDB sharedMyFMDB] findUserWithID:[message.senderUserId intValue]];
if (user.name&&![user.name isEqualToString:@""]) {
notifiMessage = [[NSMutableString alloc]initWithString: [NSString stringWithFormat:@"%@:",user.name]];
}
}else{
return;
}
NSMutableDictionary * inforDic = [NSMutableDictionary dictionary];
UILocalNotification * locNoti = [[UILocalNotification alloc]init];
if ([message.content isKindOfClass:[RCTextMessage class]]) {
RCTextMessage *textMessage = (RCTextMessage *)message.content;
[notifiMessage appendString:textMessage.content];
[inforDic setValue:textMessage.content forKey:@"name"];
}else if([message.content isKindOfClass:[RCImageMessage class]]){
[notifiMessage appendString:@"图片"];
[inforDic setValue:@"图片" forKey:@"name"];
}else if([message.content isKindOfClass:[RCVoiceMessage class]]){
[notifiMessage appendString:@"语音"];
[inforDic setValue:@"语音" forKey:@"name"];
}else if([message.content isKindOfClass:[IMPositionMessage class]]){
[notifiMessage appendString:@"职位名片"];
[inforDic setValue:@"职位名片" forKey:@"name"];
}else if([message.content isKindOfClass:[IMSwapPhoneMessage class]]){
[notifiMessage appendString:@"交换电话"];
[inforDic setValue:@"交换电话" forKey:@"name"];
}else if([message.content isKindOfClass:[IMResumeMessage class]]){
[notifiMessage appendString:@"简历名片"];
[inforDic setValue:@"简历名片" forKey:@"name"];
}else if([message.content isKindOfClass:[TaskedPositionToHunteron class]]){
TaskedPositionToHunteron *textMessage = (TaskedPositionToHunteron *)message.content;
[notifiMessage appendString:[NSString stringWithFormat:@"PA(%@)为您定向推荐了一个新的职位( #%lld %@)。",textMessage.paName,textMessage.positionId,textMessage.positionName]];
[inforDic setValue:textMessage.paName forKey:@"paName"];
[inforDic setValue:[NSString stringWithFormat:@"%lld",textMessage.positionId] forKey:@"positionId"];
[inforDic setValue:textMessage.positionName forKey:@"positionName"];
}
//1.1 设置通知的内容
locNoti.alertAction = notifiMessage; // 锁屏状态下显示: 滑动来快点啊
locNoti.alertBody = notifiMessage;
//1.2 设置通知的发送时间
locNoti.fireDate = [NSDate date];
locNoti.userInfo =inforDic;
//1.3 设置时区,一般默认
locNoti.timeZone = [NSTimeZone defaultTimeZone];
// 设置通知发送时, 提醒数字(==0, 会自动消失)
locNoti.applicationIconBadgeNumber = 0;
locNoti.repeatInterval = 0;
// 2. 发送通知
[[UIApplication sharedApplication]scheduleLocalNotification:locNoti];
NSLog(@"====%d",[NSThread isMainThread]);
[[UIApplication sharedApplication]cancelLocalNotification:locNoti];
}
二、什么地方去移除通知
手机刚进入前台会走的方法
- (void)applicationWillEnterForeground:(UIApplication *)application{
[[NSNotificationCenter defaultCenter] removeObserver:self name:kString_NSNotificationCenterRefreshMessageData object:nil];
}
因为手机不活跃的时候不能立即发通知!记住是立即,又不是延迟发本地推送,所以不需要处理已经不活跃的情况!要在进入前台的时候移除通知,要不然下次在进入后台会在此注册通知!就会显示两条本地推送!
IM-iOS退出后台接受消息,app退出后台能接收到推送的更多相关文章
- 微信公众号开发C#系列-7、消息管理-接收事件推送
1.概述 在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息.其中,某些事件推送在发生后,是允许 ...
- C#微信公众号开发系列教程五(接收事件推送与消息排重)
微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...
- 转:C#微信公众号开发之接收事件推送与消息排重的方法
本文实例讲述了C#微信公众号开发之接收事件推送与消息排重的方法.分享给大家供大家参考.具体分析如下: 微信服务器在5秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次.这样的话,问题就来了.有这 ...
- iOS天气动画、高仿QQ菜单、放京东APP、高仿微信、推送消息等源码
iOS精选源码 TYCyclePagerView iOS上的一个无限循环轮播图组件 iOS高仿微信完整项目源码 想要更简单的推送消息,看本文就对了 ScrollView嵌套ScrolloView解决方 ...
- C#微信公众号开发系列教程(接收事件推送与消息排重)
微信服务器在5秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次.这样的话,问题就来了.有这样一个场景:当用户关注微信账号时,获取当前用户信息,然后将信息写到数据库中.类似于pc端网站的注册.可 ...
- iOS Xcode 8 打包上架 配置文件问题 此构建版本无效 推送问题 攻克 刚刚 waiting for review
煎熬... 本来xcode 7 打包正在审核了 还要修改一处购买问题 此时 xcode已经升级到xcode 8 了 升级后 很神奇 应用没报错 很好的运行 (网上很多说xib storyboard ...
- ios APP进程杀死之后和APP在后台接收到推送点击跳转到任意界面处理
https://www.jianshu.com/p/ce0dc53eb627 https://www.cnblogs.com/er-dai-ma-nong/p/5584724.html github: ...
- iOS开发——消息推送跳转
项目开发用集成是极光推送JPush 这里主要是消息推送过来处理对应界面跳转 同时看到两篇写的不错的相关博客分享一下: http://www.jianshu.com/ ...
- iOS刚进入后台接受推送、打开推送调转到相应的界面
刚进入后台的时候消息处理时候我用了本地推送!可以看我前边写的博客,怎么处理刚进入后台接收推送的案例,链接 /** 注释:打开推送的三种方式:-peter 1.apns的时候,结束进程退出后台:启动的时 ...
随机推荐
- ubuntu上lamp环境搭建
首先,介绍个彻底删除linux已经安装的软件的方法. sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-5. ...
- Ubuntu下Maven配置与Maven项目创建教程
一. Ubuntu下Maven配置 windows下Maven配置参考http://www.cnblogs.com/LexMoon/p/JavaMaven.html ubuntu下Maven地址htt ...
- css线性渐变兼容
css线性渐变兼容 background: linear-gradient(top, rgba(54, 77, 127, 0.8), rgba(54, 77, 127, 0.8)); backgrou ...
- Docker资源网站收藏
Docker资源 Docker官方英文资源: docker官网:http://www.docker.com Docker windows入门:https://docs.docker.com/windo ...
- EntityFramework Core 2.0全局过滤(HasQueryFilter)
前言 EntityFramework Core每一次版本的迭代和更新都会带给我们惊喜,每次都会尽量满足大部分使用者的需求.在EF Core 2.0版本中出现了全局过滤新特性即HasQueryFilte ...
- CDN中前端层的复制
前端层的复制是为了提高静态内容分发的性能和可扩展性.将静态内容的分发转由边缘服务器来完成是为了解决可扩展性的问题,因为这样做可以避免出现在对等点和广域网链路处的网络拥堵风险,而这两个地方的拥堵是网络延 ...
- 终于,我也要出一本C#的书了 - 我的写作历程与C#书单推荐
我之前的面试题停了很久,是因为 - 我写书去了. 前言 我于2012年3月开始工作,到现在马上就满六年了.这六年里,我从一个连Sql server是什么都不知道,只会写最简单的c#的程序员开始做起,一 ...
- dm642的中断定时器
TIMER_Handle TimerHandle0; void timer1() { ////////////定时器/////////////////////// TimerHandle0 = TI ...
- 在Ubuntu 中使用Source Code Pro字体
1.下载字体 推荐GitHub上面的项目主页上下载 Source Code Pro 2.解压 unzip SourceCodePro_FontsOnly-1.013.zip 3. 打开SourceCo ...
- Caused by: java.sql.SQLException: ResultSet is from UPDATE. No Data.
1.错误描述 org.hibernate.exception.GenericJDBCException: error executing work at org.hibernate.exception ...