android客户端接收 openfire 服务器发送来的消息: 客户端代码如下: Java代码 package com.example.openfiretestimport org.jivesoftware.smack.Chatimport org.jivesoftware.smack.ChatManagerimport org.jivesoftware.smack.ChatManage。
android客户端接收 openfire 服务器发送来的消息:
客户端代码如下:
Java代码
package com.example.openfiretest
import org.jivesoftware.smack.Chat
import org.jivesoftware.smack.ChatManager
import org.jivesoftware.smack.ChatManagerListener
import org.jivesoftware.smack.ConnectionConfiguration
import org.jivesoftware.smack.MessageListener
import org.jivesoftware.smack.XMPPConnection
import org.jivesoftware.smack.packet.Message
import android.os.Bundle
import android.os.Handler
import android.app.Activity
import android.content.Intent
import android.view.Menu
import android.view.View
import android.view.View.OnClickListener
import android.view.Window
import android.widget.CheckBox
import android.widget.EditText
import android.widget.Toast
步骤一:用户输入邮箱地址,客户端进行邮箱格式验证,并把邮箱发往服务器验证是否已注册。
通过查找smack的API文档,我没有发现有专门的方法用于用户名唯一性的验证,倒是在注册的时候,如果用户名已存在,服务器会返回一个“conflict”的异常,通过这个异常可以判断用户名的唯一性。但向服务器提交注册请求得进行到第三步的时候才会进行,这时候用户已输入了邮箱验证码,昵称,密码等信息,如果这时候再告诉用户用户名已存在,那么用户之前的输入就全作废了,这样的用户体验无疑很不好,所以我们得在用户输入邮箱地址的时候即时验证用户名的唯一性,并把结果反馈给用户。
通过不断地查找资料,最终发现org.jivesoftware.smackx.search.UserSearchManager这个类可以提供用户名,昵称,邮箱等信息的查找。但使用这个类有个前提:必须得通过用户验证。也就是说得登录之后才能使用这个类,否则服务器会返回“not-anthorized”的异常。由于我们是用于用户注册的过程中,不可能已经登录。于是又通过不断地查找smackAPI文档,最终发现了org.jivesoftware.smack.XMPPConnection.loginAnonymously()方法,看方法名我们可以知道该方法是用来进行匿名登录的,使用此方法的前提是服务器要开启对匿名登录的支持。
用loginAnonymously()这个方法,然后通过使用UserSearchManager类确实能够查找服务器中的用户名,但是用邮箱作用户名,则会查找不到,这是因为在XMPP协议中,用户名都是采用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)