IM-iOS退出后台接受消息,app退出后台能接收到推送

简介: App被失活状态的时候可以走苹果的APNS;但是在活跃的时候却接受不到推送!那就用到本地推送:UILocalNotification 消息神器。处理不好可能会有很多本地推送到来,那么问题来了要在什么地方去注册通知?什么地方去移除通知?一、要在什么地方去注册通知- (void)applicat...

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];

 

}

因为手机不活跃的时候不能立即发通知!记住是立即,又不是延迟发本地推送,所以不需要处理已经不活跃的情况!要在进入前台的时候移除通知,要不然下次在进入后台会在此注册通知!就会显示两条本地推送!

 

相关文章
|
2月前
|
运维 iOS开发 Windows
windows电脑备案ios APP获取公钥和证书指纹Sha-1值的方法
在阿里云进行APP备案、在备案IOS端的环节的时候,发现需要我们将p12证书安装在电脑上,再用xcode或或钥匙串访问来获取这个证书的公钥和sha-1值。 但是大部分开发uniapp应用的同学们,或者进行发布的运维人员的电脑都是windows,无法按照阿里云的教程来获取ios的公钥和sha-1。备案就被卡主了。 这里介绍下另一个方法,就是使用香蕉云编来在线上传证书获取。如下图所示,打开香蕉云编后,找到下图这个功能
534 0
|
4月前
|
人工智能 IDE 前端开发
写给尊贵的 Tare Pro 用户的喂饭级 IOS APP 开发指南
本文介绍了如何利用 AI IDE Trae,从零开始快速开发一个 iOS 应用《回声》。通过 AI 辅助完成需求梳理、原型设计、编码与调试,展示了 AI 在整个开发流程中的强大助力。
537 0
|
8月前
|
Swift iOS开发 开发者
苹果app上架-ios上架苹果商店app store 之苹果支付In - App Purchase内购配置-优雅草卓伊凡
苹果app上架-ios上架苹果商店app store 之苹果支付In - App Purchase内购配置-优雅草卓伊凡
1205 13
苹果app上架-ios上架苹果商店app store 之苹果支付In - App Purchase内购配置-优雅草卓伊凡
|
8月前
|
存储 数据安全/隐私保护 开发者
苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
335 8
苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
|
10月前
|
安全 数据安全/隐私保护 Android开发
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
1675 75
|
9月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
395 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
9月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
397 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
9月前
|
人工智能 程序员 API
iOS|记一名 iOS 开发新手的前两次 App 审核经历
啥,这玩意也有新手保护期?
265 0
|
11月前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
1109 11
|
12月前
|
传感器 iOS开发 UED
探索iOS生态系统:从App Store优化到用户体验提升
本文旨在深入探讨iOS生态系统的多个方面,特别是如何通过App Store优化(ASO)和改进用户体验来提升应用的市场表现。不同于常规摘要仅概述文章内容的方式,我们将直接进入主题,首先介绍ASO的重要性及其对开发者的意义;接着分析当前iOS平台上用户行为的变化趋势以及这些变化如何影响应用程序的设计思路;最后提出几点实用建议帮助开发者更好地适应市场环境,增强自身竞争力。

热门文章

最新文章

下一篇
oss云网关配置