zoukankan      html  css  js  c++  java
  • ios xmpp开发应用后台模式接收聊天信息处理方案

    ios xmpp开发应用后台模式接收聊天信息


    最近在使用xmppframwork来实现一个聊天应用,碰到了一个问题,应用进入后台以后,就接收不到消息了;

    怎么样才能使应用被切到后台时,应用中的网络连接仍然接收数据并维持存活(像QQ iphone 一样),下面一步一步来分析。

    针对iOS应用的状态,存在以下三种情况:

    1)若iOS应用为活动状态,刚与服务器保持一个长连接,客户端与服务器通过此连接收发消息。
    2)若iOS应用为退出状态,长连接被断开,服务器向客户端发消息则通过APNS推送消息实现。
    3)若iOS应用刚刚切至后台,还没有关闭,发现长连接并没有断开,服务器通过长连接向客户端发送消息还是能发出去,但是iOS应用只有重新切至前台时才能收到消息。

    针对第三种情况,有下面的疑问:

    iOS应用刚切至后台时,连接还保持着,此时客户端在后台是否可以收服务器来的消息,然后用本地通知来通知用户?如果可以的话应该怎么做?还是说一旦切至后台,就必须通过APNS来通知用户?

    结合苹果官方文档App Programming Guide里有关Background Execution and Multitasking的章节和satckoverflow对xmpp支持后台socket问题的解答,得出以下解决方法:

    1.因为苹果只支持少数几咱类型的应用的代码可以在后台运行(例如:audio、location、voip等),所以需要在应用的(appname)-info.plist文件里,增加一个"Required background modes"的key,值设置为voip,来指定类型。

    2.ios xmppframwork里已经有这方面的支持,只要初始化xmppstream时做下面设置即可:

     
    1. //允许后台模式(注意ios模拟器上是不支持后台socket的)  
    2.  xmppStream.enableBackgroundingOnSocket = YES;  
    下面做一下测试

    先在- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message方法里加入下面代码:

    1. //程序运行在前台,消息正常显示  
    2. if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive)  
    3. {  
    4.   
    5. }else{//如果程序在后台运行,收到消息以通知类型来显示  
    6.     UILocalNotification *localNotification = [[UILocalNotification alloc] init];  
    7.     localNotification.alertAction = @"Ok";  
    8.     localNotification.alertBody = [NSString stringWithFormat:@"From: %@ %@",@"test",@"This is a test message"];//通知主体  
    9.     localNotification.soundName = @"crunch.wav";//通知声音  
    10.     localNotification.applicationIconBadgeNumber = 1;//标记数  
    11.     [[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];//发送通知  
    12. }  


    真机测试,登录后切换到后台状态,然后在电脑上用spark发一条消息到iphone上,状态栏翻出通知消息,基本成功实现了。

  • 相关阅读:
    校验参考相关备份
    API接口设计
    redis 基础配置
    Apollo 统一配置中心
    http返回状态码记录
    ngnix实战
    OAuth2三方授权
    OAuth2授权协议记录
    KMP算法
    分治法
  • 原文地址:https://www.cnblogs.com/zhujin/p/4942927.html
Copyright © 2011-2022 走看看