Java源码示例:org.jivesoftware.smack.packet.Registration
示例1
/**
* Changes the password of the currently logged-in account. This operation can only
* be performed after a successful login operation has been completed. Not all servers
* support changing passwords; an XMPPException will be thrown when that is the case.
*
* @throws IllegalStateException if not currently logged-in to the server.
* @throws org.jivesoftware.smack.XMPPException if an error occurs when changing the password.
*/
public void changePassword(String newPassword) throws XMPPException {
Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(connection.getServiceName());
reg.setUsername(StringUtils.parseName(connection.getUser()));
reg.setPassword(newPassword);
PacketFilter filter = new AndFilter(new PacketIDFilter(reg.getPacketID()),
new PacketTypeFilter(IQ.class));
PacketCollector collector = connection.createPacketCollector(filter);
connection.sendPacket(reg);
IQ result = (IQ)collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
// Stop queuing results
collector.cancel();
if (result == null) {
throw new XMPPException("No response from server.");
}
else if (result.getType() == IQ.Type.ERROR) {
throw new XMPPException(result.getError());
}
}
示例2
/**
* Deletes the currently logged-in account from the server. This operation can only
* be performed after a successful login operation has been completed. Not all servers
* support deleting accounts; an XMPPException will be thrown when that is the case.
*
* @throws IllegalStateException if not currently logged-in to the server.
* @throws org.jivesoftware.smack.XMPPException if an error occurs when deleting the account.
*/
public void deleteAccount() throws XMPPException {
if (!connection.isAuthenticated()) {
throw new IllegalStateException("Must be logged in to delete a account.");
}
Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(connection.getServiceName());
// To delete an account, we set remove to true
reg.setRemove(true);
PacketFilter filter = new AndFilter(new PacketIDFilter(reg.getPacketID()),
new PacketTypeFilter(IQ.class));
PacketCollector collector = connection.createPacketCollector(filter);
connection.sendPacket(reg);
IQ result = (IQ)collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
// Stop queuing results
collector.cancel();
if (result == null) {
throw new XMPPException("No response from server.");
}
else if (result.getType() == IQ.Type.ERROR) {
throw new XMPPException(result.getError());
}
}
示例3
/**
* Gets the account registration info from the server.
*
* @throws org.jivesoftware.smack.XMPPException if an error occurs.
*/
private synchronized void getRegistrationInfo() throws XMPPException {
Registration reg = new Registration();
reg.setTo(connection.getServiceName());
PacketFilter filter = new AndFilter(new PacketIDFilter(reg.getPacketID()),
new PacketTypeFilter(IQ.class));
PacketCollector collector = connection.createPacketCollector(filter);
connection.sendPacket(reg);
IQ result = (IQ)collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
// Stop queuing results
collector.cancel();
if (result == null) {
throw new XMPPException("No response from server.");
}
else if (result.getType() == IQ.Type.ERROR) {
throw new XMPPException(result.getError());
}
else {
info = (Registration)result;
}
}
示例4
/**
* Creates a new account using the specified username, password and account attributes.
* The attributes Map must contain only String name/value pairs and must also have values
* for all required attributes.
*
* @param username the username.
* @param password the password.
* @param attributes the account attributes.
* @throws org.jivesoftware.smack.XMPPException if an error occurs creating the account.
* @see #getAccountAttributes()
*/
public void createAccount(String username, String password, Map<String, String> attributes)
throws XMPPException
{
if (!supportsAccountCreation()) {
throw new XMPPException("Server does not support account creation.");
}
Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(connection.getServiceName());
reg.setUsername(username);
reg.setPassword(password);
for(String s : attributes.keySet()){
reg.addAttribute(s, attributes.get(s));
}
PacketFilter filter = new AndFilter(new PacketIDFilter(reg.getPacketID()),
new PacketTypeFilter(IQ.class));
PacketCollector collector = connection.createPacketCollector(filter);
connection.sendPacket(reg);
IQ result = (IQ)collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
// Stop queuing results
collector.cancel();
if (result == null) {
throw new XMPPException("No response from server.");
}
else if (result.getType() == IQ.Type.ERROR) {
throw new XMPPException(result.getError());
}
}
示例5
public boolean register(String user, String pass) {
Log.i(LOG_TAG, "RegisterTask.run()...");
if (xmppManager.isRegistered()) {
Log.i(LOG_TAG, "Account registered already");
return true;
}
final Registration registration = new Registration();
PacketFilter packetFilter = new AndFilter(new PacketIDFilter(
registration.getPacketID()), new PacketTypeFilter(
IQ.class));
PacketCollector collector = xmppManager.getConnection().createPacketCollector(packetFilter);
registration.setType(IQ.Type.SET);
registration.addAttribute("username", user);
registration.addAttribute("password", pass);
if (xmppManager.getConnection().isConnected()) {
xmppManager.getConnection().sendPacket(registration);
IQ result = (IQ) collector.nextResult(REGISTER_TIME_OUT);
collector.cancel();
if(result == null) {
Log.d(LOG_TAG, "The server didn't return result after 60 seconds.");
return false;
} else if (result.getType() == IQ.Type.ERROR) {
if(result.getError().toString().contains("409")) {
return true;
} else {
return false;
}
} else if (result.getType() == IQ.Type.RESULT) {
return true;
}
return false;
} else {
Log.d(LOG_TAG, "connection is not connected");
return false;
}
}
示例6
/**
* 注册
*
* @param account 注册帐号
* @param password 注册密码
* @return 1、注册成功 0、服务器没有返回结果2、这个账号已经存在3、注册失败
*/
public String regist(String account, String password) {
if (getConnection() == null)
return "0";
Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(getConnection().getServiceName());
// 注意这里createAccount注册时,参数是UserName,不是jid,是"@"前面的部分。
reg.setUsername(account);
reg.setPassword(password);
// 这边addAttribute不能为空,否则出错。所以做个标志是android手机创建的吧!!!!!
reg.addAttribute("android", "geolo_createUser_android");
PacketFilter filter = new AndFilter(new PacketIDFilter(reg.getPacketID()), new PacketTypeFilter(IQ.class));
PacketCollector collector = getConnection().createPacketCollector(filter);
getConnection().sendPacket(reg);
IQ result = (IQ) collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
// Stop queuing results停止请求results(是否成功的结果)
collector.cancel();
if (result == null) {
Log.e("regist", "No response from server.");
return "0";
} else if (result.getType() == IQ.Type.RESULT) {
Log.v("regist", "regist success.");
return "1";
} else { // if (result.getType() == IQ.Type.ERROR)
if (result.getError().toString().equalsIgnoreCase("conflict(409)")) {
Log.e("regist", "IQ.Type.ERROR: " + result.getError().toString());
return "2";
} else {
Log.e("regist", "IQ.Type.ERROR: " + result.getError().toString());
return "3";
}
}
}
示例7
/**
* 注册
*
* @param account 注册帐号
* @param password 注册密码
* @return 0、 服务器没有返回结果<br>
* 1、注册成功 <br>
* 2、这个帐号已经存在 <br>
* 3、注册失败
*/
public String regist(String account, String password) {
if (!isConnected()) {
return "0";
}
Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(getConnection().getServiceName());
reg.setUsername(account);
reg.setPassword(password);
reg.addAttribute("android", "geolo_createUser_android");
//数据包过滤器
PacketFilter filter = new AndFilter(new PacketIDFilter(reg.getPacketID()), new PacketTypeFilter(IQ.class));
PacketCollector collector = getConnection().createPacketCollector(filter);
getConnection().sendPacket(reg);
IQ result = (IQ) collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
//停止请求result(是否成功的结果)
collector.cancel();
if (result == null) {
L.e(LOGTAG, "No response from server.");
return "0";
} else if (result.getType() == IQ.Type.RESULT) {
return "1";
} else {
if (result.getError().toString().equalsIgnoreCase("conflict(409)")) {
L.e(LOGTAG, "IQ.Type.ERROR: " + result.getError().toString());
return "2";
} else {
L.e(LOGTAG, "IQ.Type.ERROR: " + result.getError().toString());
return "3";
}
}
}
示例8
/**
* Creates the given account on the given XMPP server.
*
* @blocking
* @param server the server on which to create the account
* @param username for the new account
* @param password for the new account
* @return <code>null</code> if the account was registered, otherwise a {@link Registration
* description} is returned which may containing additional information on how to register an
* account on the given XMPP server or an error code
* @see Registration#getError()
* @throws XMPPException exception that occurs while registering
*/
public static Registration createAccount(String server, String username, String password)
throws XMPPException {
Connection connection = new XMPPConnection(server);
try {
connection.connect();
Registration registration = getRegistrationInfo(connection, username);
/*
* TODO registration cannot be null, can it?
*/
if (registration != null) {
// no in band registration
if (registration.getError() != null) return registration;
// already registered
if (registration.getAttributes().containsKey("registered")) return registration;
// redirect
if (registration.getAttributes().size() == 1
&& registration.getAttributes().containsKey("instructions")) return registration;
}
AccountManager manager = connection.getAccountManager();
manager.createAccount(username, password);
} finally {
connection.disconnect();
}
return null;
}
示例9
/**
* 注册。网络操作不可以在主线程中进行。多线程无法等待return,所以必须使用Handler
*
* @param account 登陆账户
* @param password 登录密码
* @param handler 处理信息的Handler
*/
public void regist(final String account, final String password, final Handler handler) {
new Thread(){
@Override
public void run() {
//如果无法连接服务器,Handle Error
if (getConnection() == null) {
Log.e("------->", "ERROR");
handler.sendEmptyMessage(ERROR);
return;
}
//如果已经是登录状态,Handle Failure
if (getConnection().isAuthenticated()) {
Log.e("------->", "hasAuthenticated");
handler.sendEmptyMessage(FAILURE);
return;
}
//如果状态正常则配置注册信息
Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(getConnection().getServiceName());
reg.setUsername(account);
reg.setPassword(password);
reg.addAttribute("H-S-A-2015", "ThronBird");
//配置Filter过滤器,注明包ID信息
PacketFilter filter = new AndFilter(
new PacketIDFilter(reg.getPacketID()),
new PacketTypeFilter(IQ.class));
//用Filter过滤器配置Collector接受器以便接受信息,并发送封包
PacketCollector collector =
getConnection().createPacketCollector(filter);
getConnection().sendPacket(reg);
//等待信息,注明超时时间
IQ result = (IQ) collector.nextResult(
SmackConfiguration.getPacketReplyTimeout());
//接收到信息就可以取消掉Collector了,处理接受的信息
collector.cancel();
if(result == null) {
handler.sendEmptyMessage(ERROR);
return;
}
if(result.getType() == IQ.Type.RESULT) {
handler.sendEmptyMessage(SUCCESS);
return;
}
//以上是超时或者成功的情况,一下是失败的情况(已有/失败)
if(result.getError().toString().equalsIgnoreCase("conflict(409)")) {
handler.sendEmptyMessage(EXIST);
return;
}
handler.sendEmptyMessage(FAILURE);
}
}.run();
}
示例10
public void run() {
Log.i(LOGTAG, "RegisterTask.run()...");
if (!xmppManager.isRegistered()) {
newUsername = username;
if (username.isEmpty()){ newUsername = newRandomUUID(); }
newPassword = password;
if (password.isEmpty()) { newPassword = newRandomUUID(); }
Registration registration = new Registration();
PacketFilter packetFilter = new AndFilter(new PacketIDFilter(
registration.getPacketID()), new PacketTypeFilter(
IQ.class));
PacketListener packetListener = new PacketListener() {
public void processPacket(Packet packet) {
Log.d("RegisterTask.PcktLstnr",
"processPacket().....");
Log.d("RegisterTask.PcktLstnr", "packet="
+ packet.toXML());
if (packet instanceof IQ) {
IQ response = (IQ) packet;
if (response.getType() == IQ.Type.ERROR) {
if (!response.getError().toString().contains(
"409")) {
Log.e(LOGTAG,
"Unknown error while registering XMPP account! "
+ response.getError()
.getCondition());
}
} else if (response.getType() == IQ.Type.RESULT) {
xmppManager.setUsername(newUsername);
xmppManager.setPassword(newPassword);
Log.d(LOGTAG, "username=" + newUsername);
Log.d(LOGTAG, "password=" + newPassword);
Editor editor = sharedPrefs.edit();
editor.putString(Constants.XMPP_REGISTERED, "true");
editor.remove(Constants.XMPP_USERNAME);
editor.remove(Constants.XMPP_PASSWORD);
editor.putString(Constants.XMPP_USERNAME,
newUsername);
editor.putString(Constants.XMPP_PASSWORD,
newPassword);
editor.apply();
Log
.i(LOGTAG,
"Account registered successfully");
xmppManager.runTask();
}
}
}
};
connection.addPacketListener(packetListener, packetFilter);
registration.setType(IQ.Type.SET);
registration.setTo(xmppHost);
Map<String, String> attributes = new HashMap<String, String>();
attributes.put("username", newUsername);
attributes.put("password", newPassword);
if (!email.isEmpty()) {
attributes.put("email", email);
}
if (!name.isEmpty()) {
attributes.put("name", name);
}
registration.setAttributes(attributes);
//registration.setAttributes();
//registration.addAttribute("username", newUsername);
//registration.addAttribute("password", newPassword);
connection.sendPacket(registration);
} else {
Log.i(LOGTAG, "Account registered already");
xmppManager.runTask();
}
}
示例11
public void run() {
Log.i(LOGTAG, "RegisterTask.run()...");
if (!xmppManager.isRegistered()) {
final String newUsername = newRandomUUID();
final String newPassword = newRandomUUID();
//客户端发送到服务器注册的数据包,Packet的子类
Registration registration = new Registration();
/**
* 数据包的ID和类型的过滤器
*/
PacketFilter packetFilter = new AndFilter(new PacketIDFilter(
registration.getPacketID()), new PacketTypeFilter(
IQ.class));
/**
* 数据包的监听
*/
PacketListener packetListener = new PacketListener() {
public void processPacket(Packet packet) {
Log.d("RegisterTask.PacketListener",
"processPacket().....");
Log.d("RegisterTask.PacketListener", "packet="
+ packet.toXML());
//服务器回复客户端
if (packet instanceof IQ) {
IQ response = (IQ) packet;
if (response.getType() == IQ.Type.ERROR) { //注册失败
if (!response.getError().toString().contains(
"409")) {
Log.e(LOGTAG,
"Unknown error while registering XMPP account! "
+ response.getError()
.getCondition());
}
} else if (response.getType() == IQ.Type.RESULT) { //注册成功
xmppManager.setUsername(newUsername);
xmppManager.setPassword(newPassword);
Log.d(LOGTAG, "username=" + newUsername);
Log.d(LOGTAG, "password=" + newPassword);
//把用户名和密码保存到共享引用
Editor editor = sharedPrefs.edit();
editor.putString(Constants.XMPP_USERNAME,
newUsername);
editor.putString(Constants.XMPP_PASSWORD,
newPassword);
editor.commit();
Log.i(LOGTAG,
"Account registered successfully");
xmppManager.runTask();
}
}
}
};
// 给注册的Packet设置Listener,因为只有等到正真注册成功后,我们才可以交流
connection.addPacketListener(packetListener, packetFilter);
registration.setType(IQ.Type.SET);
// registration.setTo(xmppHost);
// Map<String, String> attributes = new HashMap<String, String>();
// attributes.put("username", rUsername);
// attributes.put("password", rPassword);
// registration.setAttributes(attributes);
registration.addAttribute("username", newUsername);
registration.addAttribute("password", newPassword);
registration.addAttribute("imsi", "460000001232300");
registration.addAttribute("imei", "324234343434434");
// 向服务器端,发送注册Packet包,注意其中Registration是Packet的子类
connection.sendPacket(registration);
} else {
Log.i(LOGTAG, "Account registered already");
xmppManager.runTask();
}
}