XMPPFramework - 如何注册新用户帐户

2024-03-10

我正在尝试使用 XMPPFramework 连接到 Openfire 服务器并创建一个新的用户帐户。如果我已经以其他用户身份登录,此代码将创建一个新的用户帐户:

NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"jabber:iq:register"];
[query addChild:[NSXMLElement elementWithName:@"username" stringValue:userName]];
[query addChild:[NSXMLElement elementWithName:@"password" stringValue:pswd]];
NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"];
[iq addAttributeWithName:@"type" stringValue:@"set"];
[iq addAttributeWithName:@"id" stringValue:@"reg2"];
[iq addChild:query];
[xmppStream sendElement:iq];

现在我想做的是连接到服务器并创建用户帐户,而无需首先作为其他用户进行连接。我尝试在 xmppStream 中设置主机名并建立连接(如下所示),但无法连接。

NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"jabber:iq:register"];
[query addChild:[NSXMLElement elementWithName:@"username" stringValue:userName]];
[query addChild:[NSXMLElement elementWithName:@"password" stringValue:pswd]];
NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"];
[iq addAttributeWithName:@"type" stringValue:@"set"];
[iq addAttributeWithName:@"id" stringValue:@"reg2"];
[iq addChild:query];
[xmppStream sendElement:iq];

[xmppStream setHostName:@"192.168.1.5"];
[xmppStream setHostPort:5222];
NSError *error;
if (![xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error]) {
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error connecting"
                                                        message:@"See console for error details."
                                                       delegate:nil
                                              cancelButtonTitle:@"Ok"
                                              otherButtonTitles:nil];
    [alertView show];
}

关于如何连接并注册新用户有什么想法吗?


使用此代码。

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.


 ///  [[self appDelegate] connect];
    AppDelegate *delegate=[self appDelegate];
    [delegate connect];


    useSSL=NO;
    allowSelfSignedCertificates=NO;
    allowSSLHostNameMismatch=NO;
    customCertEvaluation=NO;
    isRegistering=NO;

    self.xmppStream= [[self appDelegate] xmppStream];

    BOOL *connect=[self.xmppStream isConnected];




    [self createAccount];
}

    - (void)updateAccountInfo
    {


        //NSString *domain = [[NSString alloc] initWithString:@"192.168.1.100"];

        //int port = 5222;
        NSString *usname =[[NSString alloc] initWithString:self.txtUsername.text];
        NSString *juser =[[NSString alloc] initWithString:[usname stringByAppendingString:@"your server ip"]];

        XMPPJID *jid = [XMPPJID jidWithString:juser];
        [self  xmppStream].myJID =jid;

        allowSelfSignedCertificates =  NSOnState;
        allowSSLHostNameMismatch    =  NSOnState;
        NSUserDefaults *dflts = [NSUserDefaults standardUserDefaults];

        //[dflts setObject:domain forKey:@"Account.Server"];

    //  [dflts setObject:(port ? [NSNumber numberWithInt:port] : nil)
            //    forKey:@"Account.Port"];

        [dflts setObject:juser
                  forKey:@"Account.JID"];
        [dflts setObject:@"ios"
                  forKey:@"Account.Resource"];

        [dflts setBool:useSSL                      forKey:@"Account.UseSSL"];
        [dflts setBool:allowSelfSignedCertificates forKey:@"Account.AllowSelfSignedCert"];
        [dflts setBool:allowSSLHostNameMismatch    forKey:@"Account.AllowSSLHostNameMismatch"];
        [dflts setBool:YES forKey:@"Account.RememberPassword"];

        [dflts setObject:self.txtPasswd.text forKey:@"Account.Password"];
        [dflts synchronize];



    }

    - (void)createAccount
    {
        [self updateAccountInfo];

        NSError *error = nil;
        BOOL success;

        if(![[[self appDelegate] xmppStream] isConnected])
        {

            if (useSSL)
                success = [[self  xmppStream] oldSchoolSecureConnectWithTimeout:XMPPStreamTimeoutNone error:&error];
            else
                success = [[self xmppStream] connectWithTimeout:XMPPStreamTimeoutNone error:&error];
        }
        else
        {
            //NSString *password = [[NSString alloc] initWithString:@"321" ];

            success = [[self xmppStream] registerWithPassword:self.txtPasswd.text error:&error];
        }

        if (success)
        {
            [self appDelegate].isRegistering = YES;
        }
        else
        {
            NSLog(@"not succeed ");

        }
    }
    - (void)xmppStreamDidRegister:(XMPPStream *)sender{


        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Registration" message:@"Registration with XMPP Successful!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];

    }



     - (void)xmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement *)error{

        DDXMLElement *errorXML = [error elementForName:@"error"];
        NSString *errorCode  = [[errorXML attributeForName:@"code"] stringValue];

        NSString *regError = [NSString stringWithFormat:@"ERROR :- %@",error.description];

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Registration with XMPP   Failed!" message:regError delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

        if([errorCode isEqualToString:@"409"]){

            [alert setMessage:@"Username Already Exists!"];
        }
        [alert show];
         }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XMPPFramework - 如何注册新用户帐户 的相关文章

  • 如何使用 iOS 可达性

    我正在开发一个使用网络的 iPhone 应用程序 iPhone 通过 HTTP 请求与我的服务器通信 并且应该可以在 WiFi 和 3G 上运行 我目前使用NSURLConnection initWithRequest向我的服务器发送异步请
  • UILocalNotification 在后台 10 分钟后不提示

    In didFinishLaunchingWithOptions调用函数的定时器循环httpRequest每 1 分钟间隔一次 BOOL application UIApplication application didFinishLaun
  • 使用远程图像创建 MSSticker

    我正在尝试找出使用网络上托管的图像创建 MSStickers 的方法 我可以使用本地图像创建 MSStickers 例如 NSString imagePath NSBundle mainBundle pathForResource imag
  • AFNetworking XML 请求问题

    我在用着AFNetworking 2使用 JSON 响应 它工作正常 现在我必须将其转换为 XML 而不是使用 JSON 因为服务器响应是 XML 格式的 在我搜索之后 我找到了这段代码 但它不起作用 与 Charles 我发现请求是错误的
  • 如何在 Swift 中将文件名与文件扩展名分开?

    给定包中文件的名称 我想将该文件加载到我的 Swift 应用程序中 所以我需要使用这个方法 let soundURL NSBundle mainBundle URLForResource fname withExtension ext 无论
  • 使用 NSString 进行 UTF8 解码

    我是 Objective C 新手 尝试使用以下示例将格式错误的 UTF8 编码 NSString 转换为格式良好的字符串苹果文档 http developer apple com library mac documentation Coc
  • 如何开始复杂级别的跨平台移动应用开发? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在iOS中处理1到3个手指的滑动手势

    我使用以下代码来处理代码中的 1 根手指滑动 UISwipeGestureRecognizer swipe UISwipeGestureRecognizer alloc initWithTarget self action selector
  • 如何从 ContentView 外部显示 SwiftUI 警报?

    我正在构建 Swift 应用程序 并试图找出如何显示警报 我有一个单独的 swift 文件正在执行一些计算 并且在某些条件下我希望它向用户显示警报 基本上告诉他们出了问题 然而 我见过的大多数例子都要求警报在ContentView或以其他方
  • 从 UIPickerView 的选定行设置 UIButton 的标题

    详细场景是这样的 我使用循环创建 10 个按钮并设置 0 9 的标签 点击每个按钮时 我将调用 UIPickerView 在其中加载来自不同数组的数据 到这里我就得到了预期的结果 但我希望 pickerView 中选定的行应设置为相应按钮的
  • 如何保护 iOS 应用程序免受任何操作系统攻击(在越狱设备上)

    我希望保护我的应用程序数据 以防任何操作系统攻击或越狱 iOS 设备上的未经授权的访问 在这种情况下 有什么方法可以检测此类威胁并保护应用程序数据 虽然我同意 jrturton 的说法 但如果您有想要保护的关键数据免受流氓应用程序 而不是用
  • Swift,以编程方式更改 UICollectionViewCell 和 UILabel(单元格内)的宽度

    我已将单元格 UICollectionViewCell 的宽度设置为等于 UICollectionView 的宽度 并且我尝试对该单元格中包含的 UILabel 执行完全相同的操作 我认为下面的代码准确地解释了我想要实现的目标 所以我在这里
  • AVAssetExportSession 无法导出从 iCloud 下载的视频

    我正在尝试创建从用户相册中选择的视频的缩小版本 输出的最大尺寸为 720p 因此 在检索视频时 我使用 mediumQualityFormat as the deliveryMode 如果用户设备中不存在原始视频或其中等质量版本 这会导致
  • 调整 UIImage 的大小而不将其完全加载到内存中?

    我正在开发一个应用程序 用户可以在其中尝试加载非常非常大的图像 这些图像首先在表格视图中显示为缩略图 我的原始代码会在大图像上崩溃 因此我重写它以首先将图像直接下载到磁盘 是否有一种已知的方法可以调整磁盘上图像的大小 而无需通过以下方式将其
  • UIView 圆角 - Swift 2.0?

    我会尝试将一些项目更新到 Swift 2 0 我有一个视图 左上角有一个圆角 在 Swift 没有警告 没有错误 只是没有圆角 这就是它在 Swift let maskPath UIBezierPath roundedRect conten
  • 叠加 SKScene 未显示

    我正在尝试将 SKScene 覆盖在 SCNScene 上 当我在模拟器和 iPhone6 上运行我的应用程序时 overlayScene SKScene 按预期显示 但是当我尝试在 iPhone5 上运行它 尝试了 2 个不同的设备 时
  • 如何在 UICollectionView 中将行居中?

    我有一个UICollectionView与随机细胞 有什么方法可以让我将行居中吗 默认情况下它是这样的 x x x x x x x x x x x x x x 这是所需的布局 x x x x x x x x x x x x 我必须做这样的事
  • 在 Swift 中从 Parse 加载图像

    我成功地将数据从 Parse 提取到 swift 中 但我的图像似乎没有按照我的方式工作 在我的 cellForRowAtIndexPath 方法中 我执行以下操作 var event AnyObject eventContainerArr
  • 模态转场需要点击 2 次而不是 1 次

    我的 UITableView 需要点击 2 次才能显示所选单元格的详细信息页面 一次用于选择 另一次用于显示详细信息视图 我希望有一个 CLI 直接显示所单击单元格的详细视图 我在 UITableViewManager m 中使用此方法的模
  • SpriteKit的更新函数:时间与帧率

    一般来说 我对编程和 Spritekit 很陌生 并且有兴趣探索毫秒和帧率之间的关系 以及如何使用更新函数作为两者之间的中介 帧率与毫秒 从本质上讲 帧速率和时间之间的主要区别在于时间始终一致 而帧速率则不然 由于密集的图形程序 它可能会下

随机推荐