Android中用Bmob實(shí)現(xiàn)短信驗(yàn)證碼功能的方法詳解
這篇文章主要介紹發(fā)送驗(yàn)證碼和校驗(yàn)驗(yàn)證碼的功能,用到一個(gè)第三方平臺(tái)Bmob,那Bmob是什么呢?Bmob可以開(kāi)發(fā)一個(gè)云存儲(chǔ)的移動(dòng)應(yīng)用軟件,他提供了大量的標(biāo)準(zhǔn)的API接口,根據(jù)需要接入相關(guān)服務(wù),開(kāi)發(fā)者可以更加專注于應(yīng)用的開(kāi)發(fā),讓產(chǎn)品交付更快速,驗(yàn)證碼功能就是其中一個(gè)。
一、跟其他第三方一樣,我們開(kāi)發(fā)之前要做一些準(zhǔn)備工作。
1、首先,去官網(wǎng)注冊(cè)一個(gè)帳號(hào):http://www.bmob.cn/;
2、然后就可以創(chuàng)建應(yīng)用了;具體怎么做Bmob說(shuō)得很清楚了(官方操作介紹),如果你不想看,我簡(jiǎn)單說(shuō)一下:點(diǎn)擊右上角“我的控制臺(tái)”,進(jìn)入后點(diǎn)擊“創(chuàng)建應(yīng)用”,如圖
然后填應(yīng)用名,下面的根據(jù)需要選,如果實(shí)在不知選什么,就選最下面的其他,這樣就好了,如圖:
3、獲取Application ID和REST API Key;點(diǎn)擊左下角的設(shè)置,右邊就有應(yīng)用密鑰了。
系統(tǒng)會(huì)幫你生成四個(gè)值,解釋如下,其中Application ID是等下初始化的時(shí)候要用到的。
Application ID,SDK初始化必須用到此密鑰
REST API Key,REST API請(qǐng)求中HTTP頭部信息必須附帶密鑰之一
Secret Key,是SDK安全密鑰,不可泄漏,在云端邏輯測(cè)試云端代碼時(shí)需要用到
Master Key,超級(jí)權(quán)限Key。應(yīng)用開(kāi)發(fā)或調(diào)試的時(shí)候可以使用該密鑰進(jìn)行各種權(quán)限的操作,此密鑰不可泄漏
4、創(chuàng)建短信驗(yàn)證碼模版,只有審核通過(guò)之后的自定義短信模板才可以被使用,如果自定義的短信模板其狀態(tài)顯示審核中或者審核失敗,再調(diào)用該方法則會(huì)以默認(rèn)模板來(lái)發(fā)送驗(yàn)證碼,開(kāi)發(fā)者提交短信驗(yàn)證碼模板時(shí)需注意以下幾點(diǎn):
1)、模板中不能有【】和 [] ,否則審核不通過(guò);
2)、如果你提交的短信模板無(wú)法發(fā)送,則有可能包含一些敏感監(jiān)控詞,具體通過(guò)查閱《短信關(guān)鍵字監(jiān)控參考文檔》(我會(huì)連同源碼一起發(fā))來(lái)查看提交內(nèi)容是否合法。
3)、一天一個(gè)應(yīng)用給同一手機(jī)號(hào)發(fā)送的短信不能超過(guò)10條,否則會(huì)報(bào)10010錯(cuò)誤,其他錯(cuò)誤碼可查看:短信功能相關(guān)錯(cuò)誤碼 。
支持自定義簽名。注:官方簽名屬于獨(dú)立通道,自定義簽名屬于共享通道,短信接收速度和穩(wěn)定性會(huì)有所差異。
短信簽名是指短信內(nèi)容里【】 括起來(lái)的名稱,簽名字?jǐn)?shù)為3~8個(gè)字,且不能有任何非文字字符。
模板內(nèi)容支持3個(gè)變量:%appname%(您填寫的應(yīng)用名稱),%smscode% (統(tǒng)生成的6位驗(yàn)證碼),%ttl%(驗(yàn)證碼有效時(shí)間,單位為分鐘)。
若無(wú)需使用到變量則不用再加“%”,直接填寫實(shí)際名稱即可。
我今天創(chuàng)建了3個(gè)審核不通過(guò)的,我就納悶了,后來(lái)我才看到上面這幾點(diǎn)才發(fā)現(xiàn)錯(cuò)誤,像下圖就是審核不通過(guò)的:
5、下載短信驗(yàn)證碼的SDK,下載后發(fā)現(xiàn)里面只有一個(gè)jar包。
注意:每個(gè) Bmob 帳戶有 10 條免費(fèi)額度的短信數(shù)量用于測(cè)試,超過(guò)需要購(gòu)買短信條數(shù)才能繼續(xù)使用。
二、接下來(lái)就開(kāi)始寫客戶端的代碼了,之前寫了一片關(guān)于跨界面倒計(jì)時(shí)的文章,(鏈接:跨界面倒計(jì)時(shí),再也不怕倒計(jì)時(shí)過(guò)程中Activity被銷毀了)今天就用那個(gè)程序來(lái)接著完成這次的驗(yàn)證碼,哈哈哈,我是不是很懶呢。。。。不過(guò)其實(shí)布局也很簡(jiǎn)單,關(guān)鍵是下面。
1、導(dǎo)入jar包,我前面寫過(guò)一篇文章是關(guān)于Android Studio導(dǎo)入jar包的文章(鏈接:Android Studio下導(dǎo)入jar包(以andbase.jar為例)),這里就簡(jiǎn)單帶過(guò)。將jar文件放到libs目錄下,接下來(lái)右鍵項(xiàng)目,選擇open module settings,然后選擇APP后點(diǎn)擊右邊的dependencies,再點(diǎn)擊右上角的加號(hào),選擇第二個(gè)File dependenc以后會(huì)彈出窗口,選擇剛才的jar包,最后點(diǎn)OK,OK。
2、SMS初始化。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = this; Log.e(TAG, "onStart 方法調(diào)用"); // SMS初始化 BmobSMS.initialize(mContext, "還記得嗎?這里填剛才拿到的Application ID"); init(); }
3、點(diǎn)擊按鈕請(qǐng)求發(fā)送短信驗(yàn)證碼。先看下布局吧:
<?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="請(qǐng)?zhí)顚懯謾C(jī)號(hào)碼"/> <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="請(qǐng)輸入驗(yàn)證碼"/> <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>
給“獲取驗(yàn)證碼”按鈕設(shè)置點(diǎn)擊事件:倒計(jì)時(shí)和請(qǐng)求發(fā)送短信驗(yàn)證碼
btnCountdown.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 將按鈕設(shè)置為不可用狀態(tài) btnCountdown.setEnabled(false); // 啟動(dòng)倒計(jì)時(shí)的服務(wù) startService(mIntent); // 通過(guò)requestSMSCode方式給綁定手機(jī)號(hào)的該用戶發(fā)送指定短信模板的短信驗(yàn)證碼 BmobSMS.requestSMSCode(mContext, etPhone.getText().toString(), "天才", new RequestSMSCodeListener() { @Override public void done(Integer smsId, BmobException ex) { if (ex == null) {//驗(yàn)證碼發(fā)送成功 Log.e("bmob", "短信id:" + smsId);//用于查詢本次短信發(fā)送詳情 } } }); } });
驗(yàn)證驗(yàn)證碼
<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 style="white-space:pre"> </span>// 通過(guò)verifySmsCode方式可驗(yàn)證該短信驗(yàn)證碼 BmobSMS.verifySmsCode(mContext,etPhone.getText().toString(), number, new VerifySMSCodeListener() { @Override public void done(BmobException ex) { if(ex==null){//短信驗(yàn)證碼已驗(yàn)證成功 Log.e("bmob", "驗(yàn)證通過(guò)"); }else{ Log.e("bmob", "驗(yàn)證失?。篶ode ="+ex.getErrorCode()+",msg = "+ex.getLocalizedMessage()); } } }); } } });
別忘了在AndroidManifest.xml里面添加權(quán)限:
<!--允許聯(lián)網(wǎng) --> <uses-permission android:name="android.permission.INTERNET" /> <!--獲取GSM(2g)、WCDMA(聯(lián)通3g)等網(wǎng)絡(luò)狀態(tài)的信息 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--獲取wifi網(wǎng)絡(luò)狀態(tài)的信息 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
我的例子就寫到這里了,不過(guò)還有一個(gè)知識(shí)點(diǎn):查詢短信發(fā)送狀態(tài)。我把官網(wǎng)的貼一下(根據(jù)自己的業(yè)務(wù)決定要不要這個(gè)功能,o(︶︿︶)o 唉,其實(shí)就是我懶,哈哈哈):
// 通過(guò)querySmsState方式可查詢指定smsId的發(fā)送狀態(tài) BmobSMS.querySmsState(context, smsId, new QuerySMSStateListener() { @Override public void done(SmsState state, BmobException ex) { if(ex==null){ Log.i("smile","短信狀態(tài):"+state.getSmsState()+",驗(yàn)證狀態(tài):"+state.getVerifyState()); } } });
注:SmsState包含兩種狀態(tài):
1、smsState(短信狀態(tài)) :SUCCESS(發(fā)送成功)、FAIL(發(fā)送失?。ENDING(發(fā)送中)。
2、verifyState(驗(yàn)證狀態(tài)):true(已驗(yàn)證)、false(未驗(yàn)證)。
以上所述是小編給大家介紹的Android中用Bmob實(shí)現(xiàn)短信驗(yàn)證碼功能的方法詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Android切換至SurfaceView時(shí)閃屏(黑屏閃一下)以及黑屏移動(dòng)問(wèn)題的解決方法
本文主要介紹了Android切換至SurfaceView時(shí)閃屏(黑屏閃一下)以及黑屏移動(dòng)問(wèn)題的解決方法。具有一定的參考作用,下面跟著小編一起來(lái)看下吧2017-01-01Android 實(shí)現(xiàn)圖片模糊、高斯模糊、毛玻璃效果的三種方法
在前幾天寫過(guò)一個(gè)使用glide-transformations的方法實(shí)現(xiàn)高斯模糊的方法,今天偶然間有發(fā)現(xiàn)一個(gè)大神寫的另一個(gè)方法,感覺(jué)挺不錯(cuò)的,分享一下2016-12-12Android 圖文詳解Binder進(jìn)程通信底層原理
Android系統(tǒng)中,多進(jìn)程間的通信都是依賴于底層Binder IPC機(jī)制,Binder機(jī)制是一種RPC方案。例如:當(dāng)進(jìn)程A中的Activity與進(jìn)程B中的Service通信時(shí),就使用了binder機(jī)制2021-10-10Android小組件添加到主屏幕(手機(jī)桌面)的方法實(shí)例
很多在多年前使用過(guò)Android手機(jī)的朋友,可能對(duì)于Android 4.0時(shí)代盛行的桌面小組件功能有著很深的印象,下面這篇文章主要給大家介紹了關(guān)于Android小組件添加到主屏幕(手機(jī)桌面)的相關(guān)資料,需要的朋友可以參考下2023-06-06Android檢測(cè)手機(jī)中存儲(chǔ)卡及剩余空間大小的方法(基于Environment,StatFs及DecimalFormat
這篇文章主要介紹了Android檢測(cè)手機(jī)中存儲(chǔ)卡及剩余空間大小的方法,基于Environment,StatFs及DecimalFormat實(shí)現(xiàn)該功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-01-01Android跳轉(zhuǎn)到通訊錄獲取用戶名稱和手機(jī)號(hào)碼的實(shí)現(xiàn)思路
這篇文章主要介紹了Android跳轉(zhuǎn)到通訊錄獲取用戶名稱和手機(jī)號(hào)碼的實(shí)現(xiàn)思路,當(dāng)用戶點(diǎn)擊跳轉(zhuǎn)到通訊錄界面 并取通訊錄姓名和手機(jī)號(hào)碼 ,實(shí)現(xiàn)代碼簡(jiǎn)單易懂,非常不錯(cuò)感興趣的朋友一起看看吧2016-10-10Android使用google breakpad捕獲分析native cash
這篇文章主要介紹了Android使用google breakpad捕獲分析native cash 的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04