openfire+smack中一个用户为什么收到别人添加请求之后会自动发送type="subscribed

openfire+smack中一个用户为什么收到别人添加请求之后会自动发送type="subscribed,第1张

openfire+smack中一个用户为什么收到别人添加请求之后会自动发送type="subscribed

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协议中,用户名都是采用


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11571721.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存