第一次使用socket网络请求实现本地通知的总结

一.
先说一下我的项目使用本地通知的环境:
1.人脸机有人人脸识别开门的时候,识别人脸,并把此人信息发送给服务器。
2.服务器接受到此人信息后立即发送给手机端。
3.这就要求手机端能够保持实时接收数据,我用的是socket长连接,保持网络连接不断开。
4.手机端接收到数据后解析显示。

二.
socket保持网络不断开的方法:
这里的网络请求不是要从服务器获取数据,只是为了保持和服务器的链接,而且为了在App在哪个页面都能保持这个链接,所以在一登录的时候就发送一个socket网络请求,这里的socket的请求体可以随便写,只要能连上服务器就可以,我用的是登录指令,如下:

    NSDictionary *parmDictionary= [NSDictionary dictionaryWithObjectsAndKeys:user,@"user",
                                   password,@"password",
                                   @"",@"cardnumber",
                                   @"",@"visitmobil",
                                   @"",@"visitname",
                                   @"",@"deviceid",
                                   @"",@"newpassword",
                                   @"",@"messageID",
                                   @"1",@"userType",nil];
NSDictionary *jsonDictionary=[NSDictionary dictionaryWithObjectsAndKeys:@"Login",@"command",
                                  parmDictionary,@"parameter",nil];

这样就和服务器连接上了,而保持不断开的方法,只要注销掉socket关闭连接的代理方法就可以,如下:

//- (void)viewWillDisappear:(BOOL)animated{
//    [self disconnect :clientSocket];
//}
//
////断开连接
//-(void) disconnect:(AsyncSocket *)sock{
//    NSLog(@"device socket exit!!!");
//    [sock setDelegate:nil];
//    [sock disconnect];
//    [_clientSocket release]; 
//}

这样你的项目就和服务器保持了一直连接状态,只要服务器又数据发过来,你就可以接收到了。

三. 下面说一下实现本地通知

1.如果有服务器发送来数据,会在下面这个方法里接收到,创建通知:

- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
//这里接收到数据
接收到数据后,创建通知 
// 1.创建通知
      UILocalNotification *localNotification = [[UILocalNotification alloc] init];
                        
 // 2.设置通知的必选参数
   // 设置通知显示的内容
       localNotification.alertBody = @"您有一条通知,请注意查看!";
   // 设置通知的发送时间
       localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:3];
        localNotification.soundName = @"win.aac";
    //消息数量
        localNotification.applicationIconBadgeNumber = [[[UIApplication sharedApplication] scheduledLocalNotifications] count]+1;
          //localNotification.applicationIconBadgeNumber = 1;
   // 设置锁屏状态下, "滑动XXX"
         localNotification.hasAction = YES;
         localNotification.alertAction = @"解锁查看!";
                        
   //  NSDictionary *infoDic = [NSDictionary dictionaryWithObject:@"name" forKey:@"key"];
//                        
   //   localNotification.userInfo = infoDic;
                        
  // 3.发送通知
      根据通知的发送时间(fireDate)发送通知
          [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
}

这样就发送了一个通知,而显示通知这里有两种情况:

AppDelegate.m

1.程序在前台

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    NSLog(@"接收到本地通知");
        
    // 查看当前的状态出于(前台: 0)/(后台: 2)/(从后台进入前台: 1)
    NSLog(@"applicationState.rawValue: %zd", application.applicationState);
    
    // 执行响应操作
    // 如果当前App在前台,执行操作
    if (application.applicationState == UIApplicationStateActive) {
        NSLog(@"执行前台对应的操作");
        //我这里做了一个弹窗提示。        
    } else if (application.applicationState == UIApplicationStateInactive) {
        // 后台进入前台
        NSLog(@"执行后台进入前台对应的操作");
        
    } else {
        // 当前App在后台
        NSLog(@"执行后台对应的操作");
    }
}

我是做了一个alert弹窗提示,不重点细说了。
2.程序在后台,弹出条幅,点击通知条幅,唤醒App。
首先

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    NSLog(@"接收到本地通知");
        
    // 查看当前的状态出于(前台: 0)/(后台: 2)/(从后台进入前台: 1)
    NSLog(@"applicationState.rawValue: %zd", application.applicationState);
    
    // 执行响应操作
    // 如果当前App在前台,执行操作
    if (application.applicationState == UIApplicationStateActive) {
        NSLog(@"执行前台对应的操作");
                
    } else if (application.applicationState == UIApplicationStateInactive) {
        // 后台进入前台
        NSLog(@"执行后台进入前台对应的操作");
                
    } else {
        // 当前App在后台
        NSLog(@"执行后台对应的操作");
    }
}

然后,在后台的代理方法和后台进入前台的代理方法里

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    
    [[UIApplication sharedApplication]beginBackgroundTaskWithExpirationHandler:nil];
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    [[UIApplication sharedApplication]endBackgroundTask:UIBackgroundTaskInvalid];
    [application setApplicationIconBadgeNumber:0];   //清除角标
    //[application cancelAllLocalNotifications];
}

另外:如果通知弹窗没有声音,检查一下info-plist里的voip 是否设置好了。

注意:此文章只是自己的总结,并不是一个技术博客,仅供参考,如有问题,欢迎留言。

补充一下:上面socket连接,并不是我写的那么简单几句话,他还包括很多方法和代理方法,我只是简单说了一下怎么保持连接的流程,如果有想详细了解socket的使用的同学,请私信我。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,710评论 4 376
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,839评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,295评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,776评论 0 223
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,198评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,074评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,200评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,986评论 0 214
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,733评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,877评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,348评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,675评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,393评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,209评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,212评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,003评论 2 280

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,546评论 6 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,112评论 18 139
  • 百日初临,糕分三块香千瞬。 烛温光润,母意连刀刃。 秀口轻吹,祝愿平生顺。 随风趁,教诲真谆,雨后逢佳讯。
    冰熙舍人阅读 956评论 2 16
  • 天快亮了吗?终于可以“逃离”了。看到这个词,谁能会想得到,是从妈妈家逃离呢?一提到妈妈,人们会自然联想到的词是慈爱...
    健康是福_4889阅读 172评论 0 0
  • 这周阳光出来了,雨神终于走了。辞职在家几天休息,心态也在不断发生变化。春天,到处鲜花盛开。怎么拍都是这么漂亮!没想...
    Annbaby阅读 136评论 0 0