一账劲、說(shuō)明
(1)3.x與之前的舊版本互不兼容戳护,請(qǐng)嚴(yán)格按照本文檔進(jìn)行3.x的首次集成或老版本的升級(jí)操作。
(2)3.x之前版本的集成瀑焦,請(qǐng)參考:http://wiki.mob.com/android-%e7%9f%ad%e4%bf%a1sdk%e9%9b%86%e6%88%90%e6%96%87%e6%a1%a3/
–>集成之前先要申請(qǐng)Mob的appkey與appsecret腌且;申請(qǐng)完添加短信SDK的產(chǎn)品;得到key我們開(kāi)始集成蝠猬;
請(qǐng)至Mob官網(wǎng)下載最新SDK统捶,解壓后會(huì)看到以下目錄結(jié)構(gòu):
SMSSDK下存放的是短信SDK的全部?jī)?nèi)容榆芦。
1.Eclipse
Eclipse版本的SMSSDK目錄下包含兩個(gè)工程:
SMSSDK:短信SDK核心庫(kù)(必須)
ShortMessageSDKGUI:我們提供的開(kāi)源GUI庫(kù)(非必須)
如果你不想定制自己的UI喘鸟,可以直接使用我們提供的ShortMessageSDKGUI匆绣,否則,不需要導(dǎo)入ShortMessageSDKGUI什黑。接下來(lái)崎淳,我們以使用ShortMessageSDKGUI為例說(shuō)明。
1.1愕把、首先將上述兩個(gè)工程導(dǎo)入Eclipse:
1.2拣凹、將上述兩個(gè)工程掛接到你的工程上:
右鍵你的工程→ Properties →Android
同時(shí)將SMSSDK掛接到ShortMessageSDKGUI上:
注意:如果你不需要使用ShortMessageSDKGUI,請(qǐng)直接將SMSSDK掛接到你的項(xiàng)目上恨豁。
2.Android Studio
從3.1.0版本開(kāi)始嚣镜,不再提供獨(dú)立的Android Studio版本下載,推薦AS版開(kāi)發(fā)者按照最新的maven集成方式進(jìn)行在線下載安裝橘蜜。
AS版本的SMSSDK目錄下包含以下內(nèi)容:
MobCommons.jar:Mob 通用公共庫(kù)(必須)
MobTools.jar:Mob 工具公共庫(kù)(必須)
SMSSDK-<version>.aar:SMSSDK 核心(必須)
SMSSDKGUI-<version>.aar:SMSSDK GUI 開(kāi)源庫(kù)(非必須)
HowToUse.txt:使用說(shuō)明
注意:如果你同時(shí)使用ShareSDK,保留一份公共庫(kù)就行(公共庫(kù)版本一致或兼容)菊匿。
2.1、將以上文件按需放入Android Studio項(xiàng)目所要使用SMSSDK的Module所在的Libs里面:
2.2、在Module的build.gradle里面將libs加入倉(cāng)庫(kù)(repositories):
repositories{
? ? flatDir{
? ? ? ? dirs 'libs' //就是你放aar的目錄地址
? ? }
}
2.3跌捆、在Module的build.gradle里面添加依賴(lài)(dependencies )注意:SMSSDK-<verison>徽职,是隨著版本變化的;eg:3.0.0的版本則需要改成:compile name:’SMSSDK-3.0.0′,ext:’aar’
dependencies {
? ? ....//你的其他依賴(lài)
? ? compile name:'SMSSDK-<version>',ext:'aar'
? ? compile name:'SMSSDKGUI-<version>',ext:'aar'
}
最終佩厚,你的build.gradle看起來(lái)應(yīng)該像這樣:
四姆钉、添加代碼
1.配置AndroidManifest.xml
1.1、添加以下權(quán)限:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
1.2可款、添加以下Activity:
<activity
? ?android:name="com.mob.tools.MobUIShell"
? ?android:theme="@android:style/Theme.Translucent.NoTitleBar"
? ?android:configChanges="keyboardHidden|orientation|screenSize"
? ?android:windowSoftInputMode="stateHidden|adjustResize"/>
1.3育韩、在Application節(jié)點(diǎn)下添加以下屬性:
android:name="com.mob.MobApplication"
1.4、在Application節(jié)點(diǎn)下添加以下meta-data:
<!-- 通過(guò)AndroidManifest配置AppKey和AppSecret闺鲸,如果你選擇通過(guò)代碼配置筋讨,則不需要配置以下meta-data -->
<meta-data android:name="Mob-AppKey" android:value="你的AppKey"/>
<meta-data android:name="Mob-AppSecret" android:value="你的AppSecret"/>
最終,你的AndroidManifest.xml看起來(lái)應(yīng)該像這樣:
?2.使用SDK功能
有兩種方法完成驗(yàn)證碼短信的發(fā)送和驗(yàn)證:調(diào)用可視化界面和使用無(wú)界面接口
2-1摸恍、以可視化界面完成操作
public void sendCode(Context context) {
? ? RegisterPage page = new RegisterPage();
? ? //如果使用我們的ui悉罕,沒(méi)有申請(qǐng)模板編號(hào)的情況下需傳null
? ? page.setTempCode(null);
? ? page.setRegisterCallback(new EventHandler() {
? ? ? ? public void afterEvent(int event, int result, Object data) {
? ? ? ? ? ? if (result == SMSSDK.RESULT_COMPLETE) {
? ? ? ? ? ? ? ? // 處理成功的結(jié)果
? ? ? ? ? ? ? ? HashMap<String,Object> phoneMap = (HashMap<String, Object>) data;
? ? ? ? ? ? ? ? String country = (String) phoneMap.get("country"); // 國(guó)家代碼,如“86”
? ? ? ? ? ? ? ? String phone = (String) phoneMap.get("phone"); // 手機(jī)號(hào)碼立镶,如“13800138000”
? ? ? ? ? ? ? ? // TODO 利用國(guó)家代碼和手機(jī)號(hào)碼進(jìn)行后續(xù)的操作
? ? ? ? ? ? } else{
? ? ? ? ? ? ? ? // TODO 處理錯(cuò)誤的結(jié)果
? ? ? ? ? ? }
? ? ? ? }
? ? });
? ? page.show(context);
}
2-2壁袄、以無(wú)界面接口完成操作
// 在嘗試讀取通信錄時(shí)以彈窗提示用戶(可選功能)
SMSSDK.setAskPermisionOnReadContact(true);
EventHandler eventHandler = new EventHandler() {
? ? public void afterEvent(int event, int result, Object data) {
? ? ? ? // afterEvent會(huì)在子線程被調(diào)用,因此如果后續(xù)有UI相關(guān)操作媚媒,需要將數(shù)據(jù)發(fā)送到UI線程
? ? ? ? Message msg = new Message();
? ? ? ? msg.arg1 = event;
? ? ? ? msg.arg2 = result;
? ? ? ? msg.obj = data;
? ? ? ? new Handler(Looper.getMainLooper(), new Callback() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public boolean handleMessage(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 處理成功得到驗(yàn)證碼的結(jié)果
? ? ? ? ? ? ? ? ? ? ? ? // 請(qǐng)注意嗜逻,此時(shí)只是完成了發(fā)送驗(yàn)證碼的請(qǐng)求,驗(yàn)證碼短信還需要幾秒鐘之后才送達(dá)
? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? // TODO 處理錯(cuò)誤的結(jié)果
? ? ? ? ? ? ? ? ? ? ? ? ((Throwable) data).printStackTrace();
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? } else if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
? ? ? ? ? ? ? ? ? ? if (result == SMSSDK.RESULT_COMPLETE) {
? ? ? ? ? ? ? ? ? ? ? ? // TODO 處理驗(yàn)證碼驗(yàn)證通過(guò)的結(jié)果
? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? // TODO 處理錯(cuò)誤的結(jié)果
? ? ? ? ? ? ? ? ? ? ? ? ((Throwable) data).printStackTrace();
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? // TODO 其他接口的返回結(jié)果也類(lèi)似缭召,根據(jù)event判斷當(dāng)前數(shù)據(jù)屬于哪個(gè)接口
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? }).sendMessage(msg);
? ? }
};
// 注冊(cè)一個(gè)事件回調(diào)栈顷,用于處理SMSSDK接口請(qǐng)求的結(jié)果
SMSSDK.registerEventHandler(eventHandler);
// 請(qǐng)求驗(yàn)證碼,其中country表示國(guó)家代碼嵌巷,如“86”萄凤;phone表示手機(jī)號(hào)碼,如“13800138000”
SMSSDK.getVerificationCode(country, phone);
// 提交驗(yàn)證碼搪哪,其中的code表示驗(yàn)證碼靡努,如“1357”
SMSSDK.submitVerificationCode(country, phone, code);
// 使用完EventHandler需注銷(xiāo),否則可能出現(xiàn)內(nèi)存泄漏
protected void onDestroy() {
? ? super.onDestroy();
? ? SMSSDK.unregisterEventHandler(eventHandler);
}
其中EventHandler是短信SDK的操作回調(diào)晓折,具體說(shuō)明文檔請(qǐng)參閱:短信SDK操作回調(diào)章節(jié)惑朦。
3.關(guān)于配置AppKey和AppSecret的說(shuō)明
配置AppKey和AppSecret有兩種方式:
(1)通過(guò)AndroidManifest配置
(2)通過(guò)代碼配置
以上方法擇一即可,建議使用第一種方式進(jìn)行配置漓概。
3.1漾月、通過(guò)AndroidManifest配置:
(1)在Application節(jié)點(diǎn)下添加以下屬性:
android:name="com.mob.MobApplication"
注意:如果你有自己的Application類(lèi),那么也可以讓你的Application類(lèi)繼承MobApplication即可垛耳。
(2)在Application節(jié)點(diǎn)下添加以下子節(jié)點(diǎn):
<!-- 通過(guò)AndroidManifest配置AppKey和AppSecret栅屏,如果你選擇通過(guò)代碼配置飘千,則不需要配置以下meta-data -->
<meta-data android:name="Mob-AppKey" android:value="你的AppKey"/>
<meta-data android:name="Mob-AppSecret" android:value="你的AppSecret"/>
3.2、通過(guò)代碼配置:
如果選擇通過(guò)代碼配置栈雳,則不需要繼承MobApplication护奈,只要在使用SMSSDK之前,調(diào)用以下代碼:
// 通過(guò)代碼注冊(cè)你的AppKey和AppSecret
MobSDK.init(context, "你的AppKey", "你的AppSecret");
五哥纫、代碼混淆
如果你開(kāi)啟了proguard混淆霉旗,需要在proguard的rules里面添加以下規(guī)則: