Android SMSSDK非Gradle集成教程

一、說(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)始集成;

二、獲取SDK

請(qǐng)至Mob官網(wǎng)下載最新SDK,解壓后會(huì)看到以下目錄結(jié)構(gòu):


SMSSDK下存放的是短信SDK的全部?jī)?nèi)容。

三、導(dǎo)入SDK

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ī)則:


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容