日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

处理xmpp 离线信息,

發布時間:2025/6/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 处理xmpp 离线信息, 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉:http://blog.csdn.net/kylinbl/article/details/8965074(KylinBL的專欄

最近在使用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時做下面設置即可:

?

[cpp]?view plaincopyprint?
  • //允許后臺模式(注意ios模擬器上是不支持后臺socket的)??
  • ?xmppStream.enableBackgroundingOnSocket?=?YES;??
  • ?


    下面做一下測試,看看效果如何。

    ?

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

    ?

    [cpp]?view plaincopyprint?
  • //程序運行在前臺,消息正常顯示??
  • if?([[UIApplication?sharedApplication]?applicationState]?==?UIApplicationStateActive)??
  • {??
  • ??
  • }else{//如果程序在后臺運行,收到消息以通知類型來顯示??
  • ????UILocalNotification?*localNotification?=?[[UILocalNotification?alloc]?init];??
  • ????localNotification.alertAction?=?@"Ok";??
  • ????localNotification.alertBody?=?[NSString?stringWithFormat:@"From:?%@\n\n%@",@"test",@"This?is?a?test?message"];//通知主體??
  • ????localNotification.soundName?=?@"crunch.wav";//通知聲音??
  • ????localNotification.applicationIconBadgeNumber?=?1;//標記數??
  • ????[[UIApplication?sharedApplication]?presentLocalNotificationNow:localNotification];//發送通知??
  • }??


  • ?

    真機測試,登錄后切換到后臺狀態,然后在電腦上用spark發一條消息到iphone上,狀態欄翻出通知消息,基本成功實現了。

    ?

    -------------------------------------------------------------------------------------------------------------------------------------------------

    補充說明:

    ? ? ? ?網上查資料時,發現一個問題,如果你的應用沒有實現voip,如果按上面這種方法做,有被蘋果reject的危險;那么替代方法就是當應用進入后臺或是已經退出后,服務器端會根據用戶狀態的變化,發送消息給用戶,同時使用蘋果apns來推送新的消息通知給用戶;但我們知道,蘋果的apns在即時性和可靠性方面都是不做保證的,也就是說新消息的通知傳到蘋果那邊,蘋果不保證能成功幫你推送,也不保證即時推送,所以只能找一下看有沒有第三方的免費推送服務提供商。

    ? ? ? Google了一下,找到個叫極光推送的免費推送,正在研究中,有收獲在更新...

    ps: 離線信息,需要一個長連接的,如果斷開連接,怎樣也 無法接收到信息,

    http://stackoverflow.com/questions/5257580/iphone-xmpp-app-run-background

    轉載于:https://www.cnblogs.com/guligei/p/3517420.html

    總結

    以上是生活随笔為你收集整理的处理xmpp 离线信息,的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。