Bmob发送短信验证码官方demo更新(3.5.0)版本

Bmob云后端,大家用过的话会知道很方便的,用户管理,文件上传,短信验证的功能都能轻松实现。楼主也是刚开始学习用。

sdk的更新据说挺勤的,这也导致官方给的示例文档和demo项目,在新的sdk环境下会报各种语法错误。然而做项目必须要用新的sdk,因为旧版本的文件上传等功能已经不支持了。

今天就把官方的短信验证码的demo在新sdk下的代码贴上来,供后来人参考吧(楼主用的sdk是3.5.0版的哦)

以绑定手机号的类为例,大家自行比对被注释的老版本代码和新版本的区别。

package com.bmob.demo.sms;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import cn.bmob.v3.Bmob;
import cn.bmob.v3.BmobSMS;
import cn.bmob.v3.BmobUser;
import cn.bmob.v3.exception.BmobException;
import cn.bmob.v3.listener.QueryListener;
//import cn.bmob.v3.listener.RequestSMSCodeListener;
import cn.bmob.v3.listener.UpdateListener;
//import cn.bmob.v3.listener.VerifySMSCodeListener;

import com.bmob.demo.sms.bean.User;

/**  
 * 绑定手机号  
 * @class  UserBindPhoneActivity  
 * @author smile   
 * @date   2015-6-5 下午3:08:53  
 *   
 */
public class UserBindPhoneActivity extends BaseActivity {
	
	@InjectView(R.id.iv_left)
	ImageView iv_left;
	@InjectView(R.id.et_number)
	EditText et_number;
	@InjectView(R.id.et_input)
	EditText et_input;
	
	@InjectView(R.id.tv_title)
	TextView tv_title;
	
	@InjectView(R.id.tv_send)
	TextView tv_send;
	
	@InjectView(R.id.tv_bind)
	TextView tv_bind;
	
	MyCountTimer timer;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_bind);
		ButterKnife.inject(this);
		iv_left.setVisibility(View.VISIBLE);
		tv_title.setText("绑定手机号");
	}
	
	class MyCountTimer extends CountDownTimer{  
		  
        public MyCountTimer(long millisInFuture, long countDownInterval) {  
            super(millisInFuture, countDownInterval);  
        }  
		@Override  
        public void onTick(long millisUntilFinished) {  
			tv_send.setText((millisUntilFinished / 1000) +"秒后重发");  
        }  
        @Override  
        public void onFinish() {  
        	tv_send.setText("重新发送验证码");  
        }  
    }  
	

	@OnClick(R.id.iv_left)
	public void back() {
		finish();
	}
	
	@OnClick(R.id.tv_send)
	public void send() {
		requestSMSCode();
	}
	
	@OnClick(R.id.tv_bind)
	public void bind() {
		verifyOrBind();
	}
		
	private void requestSMSCode() {
		String number = et_number.getText().toString();
		if (!TextUtils.isEmpty(number)) {
			timer = new MyCountTimer(60000, 1000);   
			timer.start();
//			Bmob.requestSMSCode(this, number, "手机号码登陆模板",new RequestSMSCodeListener() {
//
//				@Override
//				public void done(Integer smsId, BmobException ex) {
//					// TODO Auto-generated method stub
//					if (ex == null) {// 验证码发送成功
//						toast("验证码发送成功");// 用于查询本次短信发送详情
//					}else{//如果验证码发送错误,可停止计时
//						timer.cancel();
//					}
//				}
//			});
			BmobSMS.requestSMSCode(number, "手机号码登录模板", new QueryListener() {
				@Override
				public void done(Integer integer, BmobException e) {
					if (e==null){
						toast("验证码发送成功");
					}
					else {
						timer.cancel();
					}
				}
			});
		} else {
			toast("请输入手机号码");
		}
	}
	
	private void verifyOrBind(){
		final String phone = et_number.getText().toString();
		String code = et_input.getText().toString();
		if (TextUtils.isEmpty(phone)) {
			showToast("手机号码不能为空");
			return;
		}

		if (TextUtils.isEmpty(code)) {
			showToast("验证码不能为空");
			return;
		}
		final ProgressDialog progress = new ProgressDialog(this);
		progress.setMessage("正在验证短信验证码...");
		progress.setCanceledOnTouchOutside(false);
		progress.show();
		// V3.3.9提供的一键注册或登录方式,可传手机号码和验证码
//		Bmob.verifySmsCode(this,phone, code, new VerifySMSCodeListener() {
//
//			@Override
//			public void done(BmobException ex) {
//				// TODO Auto-generated method stub
//				progress.dismiss();
//				if(ex==null){
//					toast("手机号码已验证");
//					bindMobilePhone(phone);
//				}else{
//					toast("验证失败:code="+ex.getErrorCode()+",错误描述:"+ex.getLocalizedMessage());
//				}
//			}
//		});
		BmobSMS.verifySmsCode(phone, code, new UpdateListener() {
			@Override
			public void done(BmobException ex) {
				if (ex==null){
					toast("手机号码已验证");
					bindMobilePhone(phone);
				}
				else {
					toast("验证失败:code="+ex.getErrorCode()+",错误描述:"+ex.getLocalizedMessage());
				}
			}
		});
	}

	private void bindMobilePhone(String phone){
		//开发者在给用户绑定手机号码的时候需要提交两个字段的值:mobilePhoneNumber、mobilePhoneNumberVerified
		User user =new User();
		user.setMobilePhoneNumber(phone);
		user.setMobilePhoneNumberVerified(true);
		//User cur = BmobUser.getCurrentUser(UserBindPhoneActivity.this,User.class);
		User cur=BmobUser.getCurrentUser(User.class);
//		user.update(UserBindPhoneActivity.this, cur.getObjectId(),new UpdateListener() {
//
//			@Override
//			public void onSuccess() {
//				// TODO Auto-generated method stub
//				toast("手机号码绑定成功");
//				finish();
//			}
//
//			@Override
//			public void onFailure(int arg0, String arg1) {
//				// TODO Auto-generated method stub
//				toast("手机号码绑定失败:"+arg0+"-"+arg1);
//			}
//		});
			user.update(cur.getObjectId(), new UpdateListener() {
				@Override
				public void done(BmobException e) {
					if (e==null){
						toast("手机号码绑定成功");
						finish();
					}
					else{
						toast("手机号码绑定失败");
					}
				}
			});

	}

}
查看官方的类库,不难发现,新版本主要做了以下更新:

  1.将Bmob类的短信功能函数转移的类BmobSMS类中

2.许多函数不需要context参数

3.Listener的onSuccess onFailure 和为done函数

4.将许多Listener合并到原先的大Listener中,如VerifySMSCodeListener合并到了UpdateListener

想要全部代码的可以到这下载:  http://download.csdn.net/detail/sinat_32092165/9696483

 
  

你可能感兴趣的:(安卓开发)