前端时间打了n天游戏,旷了n篇博客,今天终于干了点正事了。。。
1、手机验证码
我是调用的掌淘科技免费的SMSSDK,虽然个人开发编辑不了短信模板,但也够可以了,毕竟是免费的嘛。
调用流程:
a、申请appkey和appsecert,下面这里有详解
http://bbs.mob.com/forum.php?mod=viewthread&tid=8212&extra=page%3D1
b、在项目根目录的build.gradle中添加依赖
c、在使用SMSSDK模块的build.gradle中添加这个,把appKey和appSecret填成自己的就行
d、无界面代码调用
d-1、注册监听回调
EventHandler eventHandler = new EventHandler() { public void afterEvent(int event, int result, Object data) { // afterEvent会在子线程被调用,因此如果后续有UI相关操作,需要将数据发送到UI线程 Message msg = new Message(); msg.arg1 = event; msg.arg2 = result; msg.obj = data; new Handler(Looper.getMainLooper(), new Handler.Callback() { @Override public boolean handleMessage(@NonNull Message msg) { int event = msg.arg1; int result = msg.arg2; Object data = msg.obj; if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) { if (result == SMSSDK.RESULT_COMPLETE) { // TODO 处理成功得到验证码的结果 // 请注意,此时只是完成了发送验证码的请求,验证码短信还需要几秒钟之后才送达 } else { // TODO 处理错误的结果 ((Throwable) data).printStackTrace(); } } else if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) { if (result == SMSSDK.RESULT_COMPLETE) { // TODO 处理验证码验证通过的结果 } else { // TODO 处理错误的结果 ((Throwable) data).printStackTrace(); } } // TODO 其他接口的返回结果也类似,根据event判断当前数据属于哪个接口 return false; } }).sendMessage(msg); } };
SMSSDK.registerEventHandler(eventHandler);//通过这行代码注册监听回调
d-2、申请验证码
SMSSDK.getVerificationCode("86", phone);
d-3、提交验证
SMSSDK.submitVerificationCode("86", phone, code);
d-4、注销
// 使用完EventHandler需注销,否则可能出现内存泄漏 protected void onDestroy() { super.onDestroy(); SMSSDK.unregisterEventHandler(eventHandler); }
2、注册&登录
a、判断手机号是否已经注册(是否已经存在于数据库)
注册:未注册则将数据转化为json对象通过okhttp发送至服务器
登录:从服务器向客户端传输用户信息并存储至本地
客户端:
public class LogAndRegister{ //这个函数用于判断是否已经注册,如果注册了就回传用户信息,并用sendRegRes接口将数据传输至LoginActivity public static boolean snetenceHaveRegist(final String phone, final sendRgRes sendRgRes){ new Thread(new Runnable() { @Override public void run() { MediaType mediaType=MediaType.parse("text/x-markdown; charset=utf-8"); String request_body=phone; Request request=new Request.Builder(). url("http://123.56.137.134/XiaoYiServer/sentenceRegd") .post(RequestBody.create(mediaType,request_body)).build(); OkHttpClient okHttpClient=new OkHttpClient(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.d("LogAndRegister-------","phone查询请求失败"); } @Override public void onResponse(Call call, Response response) throws IOException { //response.body只能调一次 String body=response.body().string(); Log.d("LogAndRegister-------",body); sendRgRes.sendRgRes(body); } }); } }).start(); return false; } //这个函数用于向服务器发送用户信息,并将成功或失败信息通过sendRegSucc接口传回LoginActivity public static void Login(final JSONObject jsonObject, final SendRegSucc sendRegSucc){ new Thread(new Runnable() { @Override public void run() { MediaType mediaType=MediaType.parse("application/json; charset=utf-8"); Request request=new Request.Builder() .url("http://123.56.137.134/XiaoYiServer/Regis") .post(RequestBody.create(mediaType,jsonObject.toJSONString())).build(); OkHttpClient okHttpClient=new OkHttpClient(); Call call=okHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { sendRegSucc.sendRegSucc(false); } @Override public void onResponse(Call call, Response response) throws IOException { sendRegSucc.sendRegSucc(true); } }); } }).start(); } public interface sendRgRes{ public void sendRgRes(String body); } public interface SendRegSucc{ public void sendRegSucc(boolean succ); } }
服务器端:
//将用户信息存储至数据库 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); InputStream is=request.getInputStream(); InputStreamReader ir=new InputStreamReader(is); BufferedReader br=new BufferedReader(ir); StringBuffer sb=new StringBuffer(); String s=""; while((s=br.readLine())!=null) { sb.append(s); } br.close(); ir.close(); is.close(); JSONObject jsonObject=JSON.parseObject(sb.toString()); try { Connection con=DBUtil.lin("XiaoYi"); Statement stmt=con.createStatement(); String sql="insert into user values(((select max(id) form user)+1),'"+jsonObject.getString("username")+"','" +jsonObject.getString("phone")+"',null,null)"; stmt.executeUpdate(sql); stmt.close(); con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } response.getWriter().print(true); response.getWriter().close(); }
//判断手机号是否注册,读取用户数据 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); InputStream is=request.getInputStream(); InputStreamReader ir=new InputStreamReader(is); BufferedReader br=new BufferedReader(ir); UserBean user=new UserBean(); String s=""; StringBuffer sb=new StringBuffer(); Boolean isIn=false; while((s=br.readLine())!=null) { sb.append(s); } System.out.println(sb.toString()); try { Connection con=DBUtil.lin("XiaoYi"); java.sql.Statement stmt=con.createStatement(); ResultSet rsst=stmt.executeQuery("select * from user where phone='"+sb.toString()+"'"); if(rsst.next()) { isIn=true; } user.setId(rsst.getInt("id")); user.setUsername(rsst.getString("username")); user.setHead(rsst.getString("head")); user.setPhone(rsst.getString("phone")); user.setSex(rsst.getString("sex")); rsst.close(); stmt.close(); con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } JSONObject jsonObject=JSONObject.parseObject(JSON.toJSONString(user)); br.close(); ir.close(); is.close(); if(isIn) { response.getWriter().print(isIn); } else { System.out.println(jsonObject.toJSONString()); response.getWriter().print(jsonObject.toJSONString()); } response.getWriter().close(); }