• 使用xcode实现IM的那些坑


    想用xcode基于XMPP实现即时通讯,mac必须安装openfire(xmpp服务器),mysql(本地数据库,用于配置openfire),JDK(打开openfire必须本地具备java环境),xmpp客户端(主要用于测试,本文以adium为例)

    1.mysql的安装和配置

    直接oracle官网上下载最新的mysql for mac,next安装

    配置:http://www.cnblogs.com/xiaozhiblog/p/5664521.html(推荐原文链接)

    终端输入:mysql --version显示command not found

    配置环境变量:创建同步链接(个人感觉此步比较鸡肋,没实质性作用)

    $ cd /usr/local/bin/

    $ sudo ln -fs /usr/local/mysql/bin/mysql mysql

    修改root密码:

    先关闭mysql服务:sudo /usr/local/mysql/support-files/mysql.server stop

    以安全模式开启mysql:sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables,此时已经打开mysql,活动检测器中能看见mysqld的进程

    然后新建basic窗口!!!!

    逐行输入

    mysql -u root
    UPDATE mysql.user SET authentication_string=PASSWORD('*****') WHERE User='root';
    FLUSH PRIVILEGES;
    q
    修改完成后,mysql -u root -p 输入改后密码,进入mysql>  修改成功
    如果不是经常跟数据库打交道,mysql对应的GUI软件workbench可以不装,终端完全可以实现基本功能

    2.openfire的安装和配置

    下载最新的openfire安装文件

    官方下载站点:http://www.igniterealtime.org/downloads/index.jsp#openfire

    next安装后打不开???

    别慌,是因为系统未安装JAVA

    3.java的安装和配置

    上官网安装最新的JDK,装好之后配置java的环境变量

    cd ~/

    vim .bash_profile

    插入

    JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home //JAVA安装目录

    PATH=$JAVA_HOME/bin:$PATH:.

    CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.

    export JAVA_HOME

    export PATH

    export CLASSPATH

    保存后退出

    回到openfire,java安装第一次openfire是能打开的,但后续打不开了,为什么???别慌,接着配置openfire中的java环境

    打开终端,按顺序输入以下命令:(注意细小的标点符号,建议逐一复制命令到终端运行)

                                               ①:sudo chmod -R 777 /usr/local/openfire/bin

                                                ②:sudo su

                                                ③:cd /usr/local/openfire/bin

                                                ④:export JAVA_HOME=`/usr/libexec/java_home`

                                               ⑤:echo $JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home     //java安装目录

                                               ⑥:   cd /usr/local/openfire/bin

                                                ⑦:  ./openfire.sh

    此时终端显示监听端口,openfire已经打开。后续打开只需要从系统偏好中直接打开

    打开后,open admin console,进一步配置openfire

    数据库选mysql

    驱动选择默认的com.mysql.jdbc.Driver

    数据库URL:[host-name]改为localhost  [database-name]改为openfire(若未在mysql中配置openfire数据库,报错,后文会讲这一问题)

    解决字符串编码的问题,可以添加 ?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8

    完整的url格式为 jdbc:mysql://localhost:3306/openfire?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8

    用户名和密码对应mysql中的root账户和密码

    如果是第一次登陆,账号是admin,密码是admin,随便设置一个邮箱,改个密码,ok,配置完成!

    进图openfire后台管理界面

    前期的MySQL数据库准备工作如下:

    <1>设置/usr/local/openfire文件夹的访问权限为可读写

    方法1:在finder中前往文件夹/usr/local/,右键openfire文件夹,显示简介

    点击如图右下角中的锁图标解锁,并设置权限为:可以读写

    方法2:打开终端,输入如下命令

    sudo chmod 777 /usr/local/openfire

    其中777表示授权可读写权限,000表示无访问权限

    <2>在终端中,登陆MySQL

    mysql -u root -p

    然后输入数据库的root密码

    <3>创建数据库openfire

    create database openfire;

    <4>导入openfire资源文件夹 resources/database下的数据表

    use openfire;
    source /usr/local/openfire/resources/database/openfire_mysql.sql

     在终端出现一排导入过程

     <5>刷新权限

    flush privileges;

    <6>退出MySQL

    exit
    

    3.使用adium在自定义服务器上交互

    安装adium后直接打开,此时会添加账户,账户必须是后台存在的账户!!!可现在后台创建账户

    绿色小人表示已经登录在线的用户

    添加jabbar 账户

    链接服务器写本地的域:127.0.0.1 ,端口是5222,表示从客户端到服务器

    为了测试,我这里创建了两用户,注意第一次登录时会创建本地证书,信任就行了

    添加好友,adium上就可以实现通信啦!

    练习人类型选xmpp

    test账户添加godlove,别搞混了,切换到godlove账户时,会受到验证请求,

    终于到最后一步了,在xcode中导入XMPPFrameWork后创建客户端实现通信。

    简单的写下步骤

    a.导入XMPP.h头文件

    b.viewDidLoad中中创建并初始化XMPPStream对象(初始化流对象时jid要带域名127.0.0.1),声明相应的代理,并加入主队列

    self.stream connectWithTimeout:error

    c.实现XMPPStreamDelegate中的一些方法

    -didConnect

    -didAuthenticate

    -didReceiveMessage

    话不多说,直接上代码

    #import "ViewController"
    #import "XMPP.h"
    
    @interface ViewController ()<XMPPStreamDelegate>
    
    @property(nonatomic,strong) XMPPStream *stream;
    
    @end
    
    @implementation ViewController
    
    - (XMPPStream *)stream
    {
        if (!_stream) {
            _stream = [[XMPPStream alloc] init];
            [_stream addDelegate:self delegateQueue:dispatch_get_current_queue()];
        }
        return _stream;
    }
    
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        [self.stream setMyJID:[XMPPJID jidWithString:@"test123@127.0.0.1"]];
        [self.stream setHostName:@"127.0.0.1"];
        [self.stream setHostPort:5222];
        
        NSError *error = nil;
        [self.stream connectWithTimeout:1.0f error:&error];
        
        if (error) {
            NSLog(@"connectWithTimeout : %@",error);
        }
    }
    
    
    - (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
    {
        NSString *msg = [[message elementsForName:@"body"] lastObject];
        NSLog(@"%@",msg);
        
    }
    
    - (void)xmppStreamDidConnect:(XMPPStream *)sender
    {
        NSError *error = nil;
        [self.stream authenticateWithPassword:@"test123" error:&error];
        if (error) {
            NSLog(@"authenticateWithPassword : %@",error);
        }
    }
    
    
    - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender
    {
        XMPPPresence *presence = [XMPPPresence presence];
        [self.stream sendElement:presence];
    }
    
    
    - (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error
    {
        NSLog(@"didNotAuthenticate : %@",error);
    } 

    效果图

  • 相关阅读:
    oracle 安装
    C++中 接口的定义 COM
    linux查看及改变运行级别
    BSD Apache GPL LGPL MIT
    DES MAC PIN HEX
    c语言字符输出格式化
    oracle
    Windows C++ 子目录数量
    GetProcAddress 宏
    How do I install Adobe Flash on Debian Wheezy?
  • 原文地址:https://www.cnblogs.com/xiaoerheiwatu/p/6659504.html
Copyright © 2020-2023  润新知