文档章节

iOS推送消息

hell03W
 hell03W
发布于 2016/01/31 13:36
字数 680
阅读 32
收藏 0

    最近公司的项目中, 从产品设计上来讲, 推送这部分的功能做的还是很不合理的.

    在当前的项目中, 用户的很多操作都依赖推送消息来完成, 通过推送消息来触发一些事件, 然后app做一些操作, 但是有个很严重的问题就是, 服务器发送的推送消息, 并不能100%的被用户收到, 就算用户收到了推送消息, 我们的程序也并不一定能够收到并处理这条推送消息, 这就使得app一些重要的操作无法被触发, 导致用户体验会很不好. 

    推送消息在一个app中的地位. 我认为推送在app中的地位是不能太重要的, 因为并不是100%能够被收到并处理的. 推送适合做的是, 比如推送一条新的公告, 给用户推送新的产品, 或者给用户推荐什么东西, 推送最多只能起到一个提醒的作用, 并不适合依赖推送去完成一些重要的功能

    对于对推送消息的处理, 我是这么做的, 在AppDelegate中的代理方法中接收推送消息, 然后以通知的方式向推送消息的处理类发送一个定向的通知. 在Appdelegate中, 在创建应用的时候, 先创建一个推送消息的处理类, 并持有这个类. 在推送消息初始化时候添加推送消息的监听通知, dealloc中移除通知, 在接收到通知后, 对通知消息做相应的判断, 并作不同的处理.

- (instancetype)init
{
    if (self = [super init]) {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleRemoteNotification:) name:@"LittleBeeRemoteNotification" object:nil];
    }
    return self;
}

- (void)handleRemoteNotification:(NSNotification *)noti
{
    NSLog(@"noti = %@", noti);
    NSDictionary *userInfo = noti.userInfo;
    NSString *type = [userInfo objectForKey:@"type"];
    
    UIApplicationState applicationState = [UIApplication sharedApplication].applicationState;
    
    if ([type isEqualToString:@"ac01"]) {
        //如果是从后台进入的, 则直接打开公告页面
        if (applicationState == UIApplicationStateInactive) {
            [self openNoticeWithNoticeId:[userInfo objectForKey:@"id"]];
        }
        else if (applicationState == UIApplicationStateActive){
            [[NSNotificationCenter defaultCenter] postNotificationName:@"niticeApplicationStateActive" object:nil];
        }
    }
    else if ([type isEqualToString:@"ac02"]){
        [self requestOrderDetailsWithOrderId:[userInfo objectForKey:@"id"] operationType:@"ac02"];
    }
    else if ([type isEqualToString:@"ac03"]){
        [self requestOrderDetailsWithOrderId:[userInfo objectForKey:@"id"] operationType:@"ac03"];
    }
    else if ([type isEqualToString:@"ac04"]){
        
    }
    else if ([type isEqualToString:@"ac05"]){
        
    }
}

通过AppDelegate拿到当前正在展示的navi

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
UINavigationController *navi = [appDelegate.tabbar selectedViewController];

AppDelegate中的代理方法中收到通知消息并发送通知

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    NSLog(@"application:didReceiveRemoteNotification:");
    // Required,For systems with less than or equal to iOS6
    [JPUSHService handleRemoteNotification:userInfo];
    [[NSNotificationCenter defaultCenter] postNotificationName:@"LittleBeeRemoteNotification" object:_pushMshHandle userInfo:userInfo];
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    
    NSLog(@"application:didReceiveRemoteNotification:fetchCompletionHandler:");
    // IOS 7 Support Required
    [JPUSHService handleRemoteNotification:userInfo];
    completionHandler(UIBackgroundFetchResultNewData);
    
    [[NSNotificationCenter defaultCenter] postNotificationName:@"LittleBeeRemoteNotification" object:_pushMshHandle userInfo:userInfo];
}


    

© 著作权归作者所有

hell03W
粉丝 9
博文 145
码字总数 109892
作品 0
朝阳
程序员
私信 提问
Phonegap各类商业插件

【Phonegap商业插件服务】[目前插件已经支持到Phonegap最新版本] 1.phonegap-百度社会化分享-andriod插件 v2.0 【该插件支持微信分享和朋友圈分享,qq好友分享,微博分享】 2.phonegap百度社...

夜澜小雨
2015/07/15
1K
0
苹果 iOS 10 更新消息汇总,iPhone 4s 可能用不了

自从iOS 7放弃沿用数代的拟物化界面,开启全新的扁平化系统以来,iOS每一年都在前作的基础上进行完善,使iOS更加的好用、完美。去年6月,苹果发布了新一代操作系统iOS 9,并在9月份发布新款i...

oschina
2016/05/30
5.1K
29
迈绝伦团队工作汇总

项目负责人:余志恒 up_java后台:无 mz_java后台:在做消息推送功能 bwk后台:无 项目负责人:季景胜 up_Android:无 upzg_Android:无 mzqk_Android:无 bwk_Android:家中有事请假两天 项...

风化的骆驼
2016/12/23
1
0
fir.im Weekly - 每个程序员都应当拥有的技能树

本周收集了一些优秀的 iOS & Android 开发资源和程序员 IT 技能拓展的 Tips. 知道创宇研发技能表 v3.0 作为程序员可能都听说过【知道创宇】,他们是一家黑客文化浓厚的安全公司。这张技能表为...

风起云飞fir_im
2015/09/06
0
0
苹果已经准备向运营商伙伴发布 iOS 8.0.1 测试版

距离苹果9月9日媒体发布会只剩下4天的时间了,毫无疑问的是苹果会在发布会上公布 iOS 8 相关的计划。现在,根据 BGR 网站报告,苹果已经准备向运营商合作伙伴发布 iOS 8.0.1 测试版。目前,i...

oschina
2014/09/06
237
0

没有更多内容

加载失败,请刷新页面

加载更多

【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)

文字检测是文字识别过程中的一个非常重要的环节,文字检测的主要目标是将图片中的文字区域位置检测出来,以便于进行后面的文字识别,只有找到了文本所在区域,才能对其内容进行识别。 文字检...

雪饼
今天
16
0
思维导图XMind 8 Pro 绿化方法(附序列号)

按部就班: Step 1 -全新下载最新版本的 Xmind 8(注必须是英文官方的版本,中文代{过}{滤}理网站的版本修改过,无法使用pj); Step 2 -安装完毕后,点击文末的下载按钮下载pj补丁文件包,将...

一只小青蛙
今天
10
0
数据结构(ER数据库)设计规范

表命名规范 表命名的规则分为3个层级,层级之间通过_分割,例如b_r_identity、d_l_identity。规约为: [leavel]_[type]_[name] [leavel] 表示数据库表的层级和功能,分为: s:业务无关的系统...

随风溜达的向日葵
今天
10
0
阿里Sentinel控制台源码修改-对接Apollo规则持久化

https://github.com/alibaba/Sentinel/wiki/%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Sentinel 动态规则扩展 https://github.com/alibaba/Sentinel/wiki......

jxlgzwh
昨天
14
0
在Linux系统中创建SSH服务器别名

如果你经常通过 SSH 访问许多不同的远程系统,这个技巧将为你节省一些时间。你可以通过 SSH 为频繁访问的系统创建 SSH 别名,这样你就不必记住所有不同的用户名、主机名、SSH 端口号和 IP 地...

老孟的Linux私房菜
昨天
16
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部