XMPP iOS客户端 添加好友 (3)

这里记录下我实现添加好友的过程,网上虽然也有相应的例子,但说的不是很全面,其中有一篇没有给出

XMPPRoster类的初始化。我找这个类的初始化设置找了好久。不多说啦。下面开始贴代码啦。

初始化XMPPRoster   对象声明

@interface XMPPModel()<XMPPStreamDelegate,XMPPRosterDelegate>

@property (nonatomic , strong) XMPPStream *xmppStream;
@property (nonatomic , strong) XMPPRoster *xmppRoster; //用户对象
@property (nonatomic , strong) XMPPRosterCoreDataStorage *xmppRosterDataStorage;

@end

实现1  这里只是先初始化_xmppRoster 这个对象,

// 初始化方法
- (void)setupStream
{
    _xmppStream = [[XMPPStream alloc] init];
    [_xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];

    _xmppRosterDataStorage = [[XMPPRosterCoreDataStorage alloc] init];
    _xmppRoster = [[XMPPRoster alloc] initWithRosterStorage:_xmppRosterDataStorage];
//    _xmppRoster.autoFetchRoster = YES;
//    _xmppRoster.autoAcceptKnownPresenceSubscriptionRequests = YES;
//
}

实现2 下面是登陆成功的回调,在下面的回调中添加下面代码:

// 登陆成功
- (void) xmppStreamDidAuthenticate:(XMPPStream *)sender
{
    [self goOnline];
    NSLog(@"登陆成功");
    [[NSUserDefaults standardUserDefaults] setObject:@"success" forKey:XMPPLogin];
    [_xmppRoster activate:_xmppStream];
    [_xmppRoster addDelegate:self delegateQueue:dispatch_get_main_queue()];

}

上面的代码作用是将_xmppRoster对象与_xmppStream联系在一起。这样就能实现添加好友了,注意

[_xmppRosteractivate:_xmppStream];
这行代码要写在登陆成功回调的方法里,如果写在初始化

- (void)setupStream 这个方法里会出现死循环。

下面在贴下添加好友和处理好友请求的方法,下面的代码百度上又很多,主要的是上面的代码。

//
//  XMPPModel+Friend.m
//  XMPPTest
//
//  Created by qitmac000246 on 12/26/14.
//  Copyright (c) 2014 杜甲. All rights reserved.
//

#import "XMPPModel+Friend.h"

@implementation XMPPModel (Friend)

// 添加好友
- (void)addFriend:(NSString *)jidString xmppRoster:(XMPPRoster *)xmppRoster
{
    XMPPJID *jid = [XMPPJID jidWithString:[NSString stringWithFormat:@"%@@%@",jidString,@"shenqi"]];

    [xmppRoster subscribePresenceToUser:jid];
}

//接受好友请求
- (void) receiveContact:(XMPPStream *)sender presence:(XMPPPresence *)presence xmppRoster:(XMPPRoster *)xmppRoster
{
    NSString *presenceType = presence.type;

    NSString *userId = sender.myJID.user;
    NSString *presenceFromUser = presence.from.user;

    if (![presenceFromUser isEqualToString:userId])
    {

        // 用户在线
        if ([presenceType isEqualToString:@"available"]) {

        }else if([presenceType isEqualToString:@"unavailable"])
        {

        }else if ([presenceType isEqualToString:@"subscribe"])
        {
            //            NSLog(@"%@",presence.description);
            //            NSLog(@"%@",presence.from);
            XMPPJID *jid = [XMPPJID jidWithString:[NSString stringWithFormat:@"%@",presence.from]];
            [xmppRoster acceptPresenceSubscriptionRequestFrom:jid andAddToRoster:YES];
        }

    }
}
@end

原文地址:http://write.blog.csdn.net/postedit/42271089

时间: 2024-10-23 00:15:44

XMPP iOS客户端 添加好友 (3)的相关文章

XMPP iOS客户端实现三:登录、注册

1.创建一个单例模式来管理xmpp的连接和操作 1 +(XMPPManager *)share 2 { 3 static XMPPManager *_share=nil; 4 static dispatch_once_t onceToken; 5 dispatch_once(&onceToken, ^{ 6 _share=[[XMPPManager alloc] init]; 7 }); 8 return _share; 9 } 10 -(id)init 11 { 12 if (self=[su

XMPP iOS客户端实现二:xcode项目配置

1.下载XMPPFramework,下载地址:https://github.com/robbiehanson/XMPPFramework 2.创建项目并将XMPP库引入: 3.添加需要的库文件: 4.配置KissXML: OTHER_LDFLAGS  添加  -lxml2 HEADER_SEARCH_PATHS 添加  /usr/include/libxml2

【Tech】XMPP IOS客户端(三)

上一篇实现了一个美(hen)化(chou)的聊天界面,这一篇加上发送语音和图片的功能. 其实发送语音和图片最好的办法是一端上传到服务器,另一端从服务器下载:或者用File Transfer,无奈上述第一种我不会,第二种调不通,有大神路过,望不吝指教(Orz) 我这里就是直接把语音和图片都编码为base64格式,然后放在消息里面发送过去了,其中语音是录音得到,图片则掉用相机拍摄得到. 1.发送语音 设置一个录音按钮,实现点击以下录音,再点击以下停止的功能,并且在停止后,编码为base64发送出去.

XMPP iOS客户端开发(二) 通信

发送消息: - (void) sendMessage:(NSString *) message toUser:(NSString *) user { NSXMLElement *body = [NSXMLElement elementWithName:@"body"]; body.stringValue = message; NSXMLElement *msg = [NSXMLElement elementWithName:@"message"]; [msg add

猿题库 iOS 客户端架构设计(原文地址:http://gracelancy.com/blog/2016/01/06/ape-ios-arch-design/)

猿题库 iOS 客户端架构设计 序 猿题库是一个拥有数千万用户的创业公司,从2013年题库项目起步到2015年,团队保持了极高的生产效率,使我们的产品完成了五个大版本和数十个小版本的高速迭代.在如此快速的开发过程中,如何保证代码的质量,降低后期维护的成本,以及为项目越来越快的版本迭代速度提供支持,成为了我们关注的重要问题.这篇文章将阐明我们在猿题库 iOS 客户端的架构设计. MVC MVC,Model-View-Controller,我们从这个古老而经典的设计模式入手.采用 MVC 这个架构的

ios客户端发现_华为爱奇艺手机活动开发总结

这个项目自发布需求.活动原型图交付.修订需求.测试.修改.再测试通过上线可谓旷日持久.回过头来看整个项目工期主要卡在活动原型图交付这儿.而为了避免项目上线最后开发赶工期,在这次获取需求的情况下,先对除了需要图以外的模块进行了开发,并调通接口,从而在得到图之后快速完成需求.而深挖这个项目,可追到爱奇艺与华为合作交付没有顺畅达成,才促使一系列后期延期.     再拿原型图交付.修改需求.测试.修改.再测试上线这几个流程来说,每个环节对需求认识不同,就会做出一定的需求误判,而流程图及原型图又不能兼顾到

基于Doubango的iOS客户端开源框架

一.ios-ngn-statck工程 1.Tests ---功能测试 2.底层模块(c和c++) Doubango --- 基于3GPP IMS/RCS 并能用于嵌入式和桌面系统的开源框架 1) tinyWRAP --- c++代码,对c代码以面向面向对象的方式进行封装,提供给上层调用. 2) tinyDAV --- Doubango媒体音频/视频控制,tinyMedia核心框架 a) audio --- 音频 b) codecs --- 编解码器 c) msrp --- 文件传输 d)vide

仿新浪微博IOS客户端(v5.2.8)——自定义UITabBar替换系统默认的(添加“+”号按钮)

转载请标明出处:http://blog.csdn.net/android_ls/article/details/45896395 声明:仿新浪微博项目,所用所有图片资源都来源于官方新浪微博IOS客户端,编写本应用的目的在于学习交流,如涉及侵权请告知,我会及时换掉用到的相关图片. 自定义UITabBar替换系统默认的,目的是为了在UITabBar中间位置添加一个"+号按钮",下面我们来聊聊具体的实现. 1.自定义WBTabBar,让其继承自UITabBar,代码如下: // // WBT

iOS客户端的gzip解压

服务端使用gzip压缩,可以大幅度减小传输包的体积,加快客户端网络请求速度,为用户节省流量.当服务器返回的httpHeader的"Content-Encoding" 属性的值是gzip时,数据会自动被解压缩,但有时候在客户端还没拿到数据的时候,就已经被某些网关解压了,这样gzip就没有起到作用.因此可以约定其他策略,防止网关解压,例如在别的头属性中标记gzip. 如此,就需要我们自己来解压gzip数据.方法如下:添加framework库中的libbz2.1.0.dylib:给nsdat