編輯:關於Android編程
這篇文章主要介紹發送驗證碼和校驗驗證碼的功能,用到一個第三方平台Bmob,那Bmob是什麼呢?Bmob可以開發一個雲存儲的移動應用軟件,他提供了大量的標准的API接口,根據需要接入相關服務,開發者可以更加專注於應用的開發,讓產品交付更快速,驗證碼功能就是其中一個。
一、跟其他第三方一樣,我們開發之前要做一些准備工作。
1、首先,去官網注冊一個帳號:http://www.bmob.cn/;
2、然後就可以創建應用了;具體怎麼做Bmob說得很清楚了(官方操作介紹),如果你不想看,我簡單說一下:點擊右上角“我的控制台”,進入後點擊“創建應用”,如圖
然後填應用名,下面的根據需要選,如果實在不知選什麼,就選最下面的其他,這樣就好了,如圖:
3、獲取Application ID和REST API Key;點擊左下角的設置,右邊就有應用密鑰了。
系統會幫你生成四個值,解釋如下,其中Application ID是等下初始化的時候要用到的。
Application ID,SDK初始化必須用到此密鑰
REST API Key,REST API請求中HTTP頭部信息必須附帶密鑰之一
Secret Key,是SDK安全密鑰,不可洩漏,在雲端邏輯測試雲端代碼時需要用到
Master Key,超級權限Key。應用開發或調試的時候可以使用該密鑰進行各種權限的操作,此密鑰不可洩漏
4、創建短信驗證碼模版,只有審核通過之後的自定義短信模板才可以被使用,如果自定義的短信模板其狀態顯示審核中或者審核失敗,再調用該方法則會以默認模板來發送驗證碼,開發者提交短信驗證碼模板時需注意以下幾點:
1)、模板中不能有【】和 [] ,否則審核不通過;
2)、如果你提交的短信模板無法發送,則有可能包含一些敏感監控詞,具體通過查閱《短信關鍵字監控參考文檔》(我會連同源碼一起發)來查看提交內容是否合法。
3)、一天一個應用給同一手機號發送的短信不能超過10條,否則會報10010錯誤,其他錯誤碼可查看:短信功能相關錯誤碼 。
支持自定義簽名。注:官方簽名屬於獨立通道,自定義簽名屬於共享通道,短信接收速度和穩定性會有所差異。
短信簽名是指短信內容裡【】 括起來的名稱,簽名字數為3~8個字,且不能有任何非文字字符。
模板內容支持3個變量:%appname%(您填寫的應用名稱),%smscode% (統生成的6位驗證碼),%ttl%(驗證碼有效時間,單位為分鐘)。
若無需使用到變量則不用再加“%”,直接填寫實際名稱即可。
我今天創建了3個審核不通過的,我就納悶了,後來我才看到上面這幾點才發現錯誤,像下圖就是審核不通過的:
5、下載短信驗證碼的SDK,下載後發現裡面只有一個jar包。
注意:每個 Bmob 帳戶有 10 條免費額度的短信數量用於測試,超過需要購買短信條數才能繼續使用。
二、接下來就開始寫客戶端的代碼了,之前寫了一片關於跨界面倒計時的文章,(鏈接:跨界面倒計時,再也不怕倒計時過程中Activity被銷毀了)今天就用那個程序來接著完成這次的驗證碼,哈哈哈,我是不是很懶呢。。。。不過其實布局也很簡單,關鍵是下面。
1、導入jar包,我前面寫過一篇文章是關於Android Studio導入jar包的文章(鏈接:Android Studio下導入jar包(以andbase.jar為例)),這裡就簡單帶過。將jar文件放到libs目錄下,接下來右鍵項目,選擇open module settings,然後選擇APP後點擊右邊的dependencies,再點擊右上角的加號,選擇第二個File dependenc以後會彈出窗口,選擇剛才的jar包,最後點OK,OK。
2、SMS初始化。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = this; Log.e(TAG, "onStart 方法調用"); // SMS初始化 BmobSMS.initialize(mContext, "還記得嗎?這裡填剛才拿到的Application ID"); init(); }
3、點擊按鈕請求發送短信驗證碼。先看下布局吧:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <EditText android:id="@+id/activity_main_et_phone" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="phone" android:hint="請填寫手機號碼"/> <Button android:id="@+id/activity_main_btn_countdown" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/activity_main_et_phone" android:layout_margin="8dp" android:layout_centerHorizontal="true" android:background="@drawable/shape" android:textColor="@color/white" android:text="@string/countdown"/> <EditText android:id="@+id/activity_main_et" android:layout_below="@id/activity_main_btn_countdown" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請輸入驗證碼"/> <Button android:id="@+id/activity_main_btn_send" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="8dp" android:layout_centerHorizontal="true" android:layout_below="@id/activity_main_et" android:background="@drawable/shape" android:textColor="@color/white" android:text="@string/send"/> </RelativeLayout>
給“獲取驗證碼”按鈕設置點擊事件:倒計時和請求發送短信驗證碼
btnCountdown.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 將按鈕設置為不可用狀態 btnCountdown.setEnabled(false); // 啟動倒計時的服務 startService(mIntent); // 通過requestSMSCode方式給綁定手機號的該用戶發送指定短信模板的短信驗證碼 BmobSMS.requestSMSCode(mContext, etPhone.getText().toString(), "天才", new RequestSMSCodeListener() { @Override public void done(Integer smsId, BmobException ex) { if (ex == null) {//驗證碼發送成功 Log.e("bmob", "短信id:" + smsId);//用於查詢本次短信發送詳情 } } }); } });
驗證驗證碼
<pre name="code" class="java">btnSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String number = etNumber.getText().toString(); if (!TextUtils.isEmpty(number)){ <span > </span>// 通過verifySmsCode方式可驗證該短信驗證碼 BmobSMS.verifySmsCode(mContext,etPhone.getText().toString(), number, new VerifySMSCodeListener() { @Override public void done(BmobException ex) { if(ex==null){//短信驗證碼已驗證成功 Log.e("bmob", "驗證通過"); }else{ Log.e("bmob", "驗證失敗:code ="+ex.getErrorCode()+",msg = "+ex.getLocalizedMessage()); } } }); } } });
別忘了在AndroidManifest.xml裡面添加權限:
<!--允許聯網 --> <uses-permission android:name="android.permission.INTERNET" /> <!--獲取GSM(2g)、WCDMA(聯通3g)等網絡狀態的信息 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--獲取wifi網絡狀態的信息 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
我的例子就寫到這裡了,不過還有一個知識點:查詢短信發送狀態。我把官網的貼一下(根據自己的業務決定要不要這個功能,o(︶︿︶)o 唉,其實就是我懶,哈哈哈):
// 通過querySmsState方式可查詢指定smsId的發送狀態 BmobSMS.querySmsState(context, smsId, new QuerySMSStateListener() { @Override public void done(SmsState state, BmobException ex) { if(ex==null){ Log.i("smile","短信狀態:"+state.getSmsState()+",驗證狀態:"+state.getVerifyState()); } } });
注:SmsState包含兩種狀態:
1、smsState(短信狀態) :SUCCESS(發送成功)、FAIL(發送失敗)、SENDING(發送中)。
2、verifyState(驗證狀態):true(已驗證)、false(未驗證)。
以上所述是小編給大家介紹的Android中用Bmob實現短信驗證碼功能的方法詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對本站網站的支持!
ATCID主要用來處理PC端傳輸過來的AT命令,從AT命令實際處理的地方來說,主要分為3類: 1. 需要Modem來處理的AT命令; 2. 需
(1)主要用了paint ,canvas 兩個類中的方法 (2)主要用了畫線和畫圓的方法。 (3)drawline(起始點軸坐標,起始點y軸坐標,終點軸坐標,終點y軸坐標
先看看效果:其實畫畫板的原理很簡單,就是首先記錄下按下屏幕的點,然後每移動一下就讓這兩次移動的點連線,周而復始,圖像就由很多條直線構成了。核心代碼 :public cla
一、JNI到底是干嘛用的百度都能查到的官方解釋我就不多說了。我自己的理解是兩方面,一方面主要用於各種復雜算法的執行,C的效率高自不必說,更重要的是so的破解難度要遠遠大於