Android之短信驗證碼

今天所使用的方案只是android手機設備集成短信驗證碼功能的方案之一。
咱們所採用的方案是使用聚合數據的短信驗證sdk。
接口文檔:https://www.juhe.cn/docs/api/...android

程序的界面以下所示:
Centerapi

實現步驟:
1.到聚合數據官網上申請短信驗證SDK數據,生成AppKey,以下圖所示:
Center服務器

2.配置工程,把相關的sdk庫導入到Project中去,:
Center網絡

3.配置AndroidManifest.xml文件,在Application節點中加入如下代碼:app

<meta-data  
    android:name="JUHE_KEY"  
    android:value="你的appkey" />

4.在src中加入MyApplication類,而且在AndroidManifest.xml文件中將application的name屬性設置爲src中定義的MyApplication(如android:name="com.bear.smscaptcha.MyApplication"),在MyApplication的onCreate()方法中調用接口初始化:ide

import com.thinkland.sdk.util.CommonFun;  
  
import android.app.Application;  
  
public class MyApplication extends Application {  
  
    @Override  
    public void onCreate() {  
        // TODO Auto-generated method stub  
        super.onCreate();  
  
        // 在使用SDK各組件以前初始化context信息,傳入ApplicationContext  
        // 注意該方法要再setContentView方法以前實現  
        /** 
         * 初始化方法 
         *  
         * @param context 
         * @needFriends 是否須要好友功能 
         */  
  
        CommonFun.initialize(getApplicationContext(), false);  
    }  
  
}

5.完成主Demo類,內容以下:this

import android.app.Activity;  
import android.content.pm.ActivityInfo;  
import android.os.Bundle;  
import android.text.Editable;  
import android.text.Html;  
import android.text.TextWatcher;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.EditText;  
import android.widget.ImageView;  
import android.widget.TextView;  
import android.widget.Toast;  
  
import com.thinkland.sdk.sms.SMSCaptcha;  
import com.thinkland.sdk.util.BaseData.ResultCallBack;  
  
public class MainActivity extends Activity implements OnClickListener{  
      
    private SMSCaptcha mCaptcha; //短信sdk主對象  
    private EditText etPhoneNum;  //手機號碼輸入框  
    private ImageView ivClear;  //清除已經輸入內容的圖標  
    private Button btnNext; //下一步按鈕  
      
    private EditText etCaptchaNum; //驗證碼輸入框  
    private Button btnSubmit; //提交驗證碼  
    private ImageView ivSmsClear;   
    private TextView tvUnreceiveIdentify;     
      
    private static final int RETRY_INTERVAL = 60; //設置一個倒計時時間  
    private int time = RETRY_INTERVAL;  
      
      
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
        setContentView(R.layout.activity_main);  
        initData();  
        setupViews();  
    }  
      
    private void initData(){  
        //初始化sdk主操做對象  
        mCaptcha = SMSCaptcha.getInstance();  
    }  
      
    /** 
     * 初始化界面控件 
     */  
    private void setupViews(){  
        btnNext = (Button) findViewById(R.id.btn_next);  
        ivClear = (ImageView) findViewById(R.id.iv_clear);  
        btnNext.setOnClickListener(this);  
        ivClear.setOnClickListener(this);  
          
        etCaptchaNum = (EditText) findViewById(R.id.et_sms_captcha);  
        btnSubmit = (Button) findViewById(R.id.btn_submit);  
        ivSmsClear = (ImageView) findViewById(R.id.iv_sms_clear);  
        btnSubmit.setOnClickListener(this);  
        ivSmsClear.setOnClickListener(this);  
        tvUnreceiveIdentify = (TextView) findViewById(R.id.tv_unreceive_identify);  
          
        etPhoneNum = (EditText) findViewById(R.id.et_write_phone);  
        etPhoneNum.setText("");  
        etPhoneNum.requestFocus();  
          
        etPhoneNum.addTextChangedListener(new TextWatcher() {  
              
            @Override  
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {  
                // TODO Auto-generated method stub  
                refreshViews(arg0);  
            }  
              
            @Override  
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,  
                    int arg3) {  
                // TODO Auto-generated method stub  
                  
            }  
              
            @Override  
            public void afterTextChanged(Editable arg0) {  
                // TODO Auto-generated method stub  
                  
            }  
        });  
    }  
      
    //根據edittext的內容來判斷是否應當出現「清除全部」的按鈕x  
    private void refreshViews(CharSequence s){  
        if(s.length() >0){  
            btnNext.setEnabled(true);  
            ivClear.setVisibility(View.VISIBLE);  
        }else{  
            btnNext.setEnabled(false);  
            ivClear.setVisibility(View.GONE);  
        }  
    }  
      
    //倒計時方法  
    private void countDown(){  
        new Thread(new  Runnable() {  
            public void run() {  
                while(time-- > 0){  
                    final String unReceive = MainActivity.this.getResources().getString(R.string.smssdk_receive_msg, time);  
                      
                    runOnUiThread(new Runnable() {  
                        public void run() {  
                            tvUnreceiveIdentify.setText(Html.fromHtml(unReceive));  
                            tvUnreceiveIdentify.setEnabled(false);  
                        }  
                    });  
                      
                    try {  
                        Thread.sleep(1000);  
                    } catch (Exception e) {  
                        // TODO: handle exception  
                    }  
                      
                }  
                time = RETRY_INTERVAL;  
            }  
        }).start();  
    }  
  
    @Override  
    public void onClick(View view) {  
            switch (view.getId()) {  
            case R.id.btn_next:  
                //刪除掉字符串中全部的空格  
                String phone = etPhoneNum.getText().toString().trim().replace("\\s*", "");  
                  
                /** 
                 * 請求短信驗證碼 
                 *  
                 * code 返回碼: 
                        服務器: 0 成功; 1 錯誤; 
                        本地: -2 本地網絡異常; -3 服務器網絡異常;-4 解析錯誤;-5初始化異常 
                    reason  返回信息 成功或錯誤緣由. 
                    result  返回結果,JSON格式.錯誤或者無返回值時爲空. 
 
                 */  
                mCaptcha.sendCaptcha(phone, new ResultCallBack() {  
                      
                    @Override  
                    public void onResult(int code, String reason, String result) {  
                        // TODO Auto-generated method stub  
                        if(code == 0){  
                            //調用成功  
                        }  
                    }  
                });  
                  
                countDown();  
                break;  
            case R.id.iv_clear:  
                etPhoneNum.getText().clear();  
                break;  
                  
            case R.id.btn_submit:  
                String phoneNumber = etPhoneNum.getText().toString().trim().replace("\\s*", "");  
                String code = etCaptchaNum.getText().toString().trim().replace("\\s*", "");  
                  
                /** 
                 * 驗證短信驗證碼 
                 *  
                 * code 返回碼: 
                        服務器: 0 成功; 1 錯誤; 
                        本地: -2 本地網絡異常; -3 服務器網絡異常;-4 解析錯誤;-5初始化異常 
                    reason  返回信息 成功或錯誤緣由. 
                    result  返回結果,JSON格式.錯誤或者無返回值時爲空. 
 
                 */  
                mCaptcha.commitCaptcha(phoneNumber, code, new ResultCallBack() {  
                      
                    @Override  
                    public void onResult(int code, String reason, String result) {  
                        // TODO Auto-generated method stub  
                        if(code == 0){  
                            //短信驗證成功  
                            Toast.makeText(MainActivity.this, "驗證成功!!!!!!!!", Toast.LENGTH_LONG).show();  
                        }else{  
                            //驗證失敗  
                            Toast.makeText(MainActivity.this, "失敗!!!!!!!!" + reason, Toast.LENGTH_LONG).show();  
                        }  
                          
                    }  
                });  
                  
                  
                break;  
                  
            case R.id.iv_sms_clear:  
                  
                break;  
  
            default:  
                break;  
            }  
    }  
      
      
}

最後,附上demo代碼的工程源碼壓縮包:
AndroidSMSCaptchaspa

相關文章
相關標籤/搜索