遇到困難:並沒有找到在客戶端直接發送驗證碼到郵箱的代碼
解決困難:之前沒有找到免費發送手機驗證碼的接口,所以打算用郵箱發送驗證碼,后來有個同學告訴我用mob可以免費發送短信,於是改成發送短信驗證碼。
步驟:
1. 第一步當然是注冊賬號
2. 點擊 進入后台→選擇 SecurityCodeSDK→點擊 立即使用→選擇應用的平台→獲取App key和App Secret
3. 下載sdk,解壓后是這樣的:
4. 之后安裝官網導入sdk[官網鏈接]http://wiki.mob.com/android-%E7%9F%AD%E4%BF%A1sdk%E9%9B%86%E6%88%90%E6%96%87%E6%A1%A3/
5. 配置好后,添加權限
6. 我這里是自定義界面,當然也可以使用系統自帶界面。代碼調用:

//初始化SMSSDK private void initSDK() { SMSSDK.initSDK(forgetPassword.this, "18e3768f516a3", "e05f202526cd41dcf17d2498d6a7aeeb"); EventHandler eventHandler = new EventHandler() { @Override public void afterEvent(int event, int result, Object data) { Message msg = new Message(); msg.arg1 = event; msg.arg2 = result; msg.obj = data; msg.what = SMSDDK_HANDLER; handler.sendMessage(msg); } }; // 注冊回調監聽接口 SMSSDK.registerEventHandler(eventHandler); }

1 getNumber.setOnClickListener(new View.OnClickListener() { 2 @Override 3 public void onClick(View v) { 4 userPhone = phoneNumber.getText().toString(); 5 new AlertDialog.Builder(forgetPassword.this) 6 .setTitle("發送短信") 7 .setMessage("我們將把驗證碼發送到以下號碼:\n" + "+86:" + userPhone) 8 .setPositiveButton("確定", new DialogInterface.OnClickListener() { 9 @Override 10 public void onClick(DialogInterface dialog, int which) { 11 SMSSDK.getVerificationCode("86", userPhone); 12 getNumber.setClickable(false); 13 new Thread(new Runnable() { 14 @Override 15 public void run() { 16 for (int i = 60; i > 0; i--) { 17 handler.sendEmptyMessage(CODE_ING); 18 if (i <= 0) { 19 break; 20 } 21 try { 22 Thread.sleep(1000); 23 } catch (InterruptedException e) { 24 e.printStackTrace(); 25 } 26 } 27 handler.sendEmptyMessage(CODE_REPEAT); 28 } 29 }).start(); 30 } 31 }) 32 .create() 33 .show(); 34 } 35 });

check.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SMSSDK.submitVerificationCode("86", userPhone, checkNunber.getText().toString());//對驗證碼進行驗證->回調函數 } });

Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case CODE_ING://已發送,倒計時 getNumber.setText("重新發送(" + --TIME + "s)"); break; case CODE_REPEAT://重新發送 getNumber.setText("獲取驗證碼"); getNumber.setClickable(true); break; case SMSDDK_HANDLER: int event = msg.arg1; int result = msg.arg2; Object data = msg.obj; //回調完成 if (result == SMSSDK.RESULT_COMPLETE) { //驗證碼驗證成功 if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) { Toast.makeText(forgetPassword.this, "驗證成功", Toast.LENGTH_LONG).show(); } //已發送驗證碼 else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) { Toast.makeText(getApplicationContext(), "驗證碼已經發送", Toast.LENGTH_SHORT).show(); } else { ((Throwable) data).printStackTrace(); } } if(result==SMSSDK.RESULT_ERROR) { try { Throwable throwable = (Throwable) data; throwable.printStackTrace(); JSONObject object = new JSONObject(throwable.getMessage()); String des = object.optString("detail");//錯誤描述 int status = object.optInt("status");//錯誤代碼 if (status > 0 && !TextUtils.isEmpty(des)) { Toast.makeText(getApplicationContext(), des, Toast.LENGTH_SHORT).show(); return; } } catch (Exception e) { //do something } } break; } } };