個(gè)人在開發(fā)的過(guò)程中靶橱,總想著怎么樣去用最小的代價(jià)開發(fā)出來(lái)高質(zhì)量的產(chǎn)品,但是對(duì)于一些較好資源總是存在收費(fèi)情況营袜,因此如何在將收費(fèi)資源轉(zhuǎn)換成免費(fèi)資源就成了一種趨勢(shì)撒顿。廢話也不多說(shuō)了,直接進(jìn)入主題:
MobTech是全球領(lǐng)先的綜合性智能科技企業(yè)荚板,以數(shù)據(jù)應(yīng)用為主導(dǎo)凤壁,融合頂尖的大數(shù)據(jù)、云計(jì)算跪另、人工智能等多元先進(jìn)技術(shù)拧抖,為全球多個(gè)國(guó)家和地區(qū)的企業(yè)、開發(fā)者和機(jī)構(gòu)提供商業(yè)智能解決方案免绿、App運(yùn)營(yíng)賦能方案唧席、企業(yè)級(jí)AI智能方案、數(shù)據(jù)咨詢研究等服務(wù)嘲驾。
今天主要說(shuō)明的是MobTech的免費(fèi)短信SDK集成淌哟。
集成準(zhǔn)備
1.注冊(cè)應(yīng)用申請(qǐng)Mob的 AppKey 和 AppSecret,詳情可以點(diǎn)擊查看注冊(cè)流程
配置集成
1辽故、打開項(xiàng)目根目錄的build.gradle徒仓,在buildscrip–>dependencies 模塊下面添加 classpath ‘com.mob.sdk:MobSDK:+’,
buildscript {
repositories {
...
}
dependencies {
...
classpath "com.mob.sdk:MobSDK:2018.0319.1724"
}
}
- 在使用SMSSDK模塊的build.gradle中誊垢,添加MobSDK插件和擴(kuò)展掉弛,如下所示:
// 添加插件
apply plugin: 'com.mob.sdk'
// 在MobSDK的擴(kuò)展中注冊(cè)SMSSDK的相關(guān)信息
MobSDK {
appKey "申請(qǐng)Mob的appkey"
appSecret "申請(qǐng)Mob的AppSecret"
SMSSDK {}
}
代碼調(diào)用
SMSSDK for Android
一.集成準(zhǔn)備
1.注冊(cè)應(yīng)用申請(qǐng)Mob的 AppKey 和 AppSecret,詳情可以點(diǎn)擊查看注冊(cè)流程
二.配置集成
1喂走、打開項(xiàng)目根目錄的build.gradle殃饿,在buildscrip–>dependencies 模塊下面添加 classpath ‘com.mob.sdk:MobSDK:+’,如下所示:
buildscript {
repositories {
...
}
dependencies {
...
classpath "com.mob.sdk:MobSDK:2018.0319.1724"
}
}
2芋肠、在使用SMSSDK模塊的build.gradle中乎芳,添加MobSDK插件和擴(kuò)展,如下所示:
// 添加插件
apply plugin: 'com.mob.sdk'
// 在MobSDK的擴(kuò)展中注冊(cè)SMSSDK的相關(guān)信息
MobSDK {
appKey "申請(qǐng)Mob的appkey"
appSecret "申請(qǐng)Mob的AppSecret"
SMSSDK {}
}
三.代碼調(diào)用
1.發(fā)送驗(yàn)證碼并取得驗(yàn)證結(jié)果(如果提示489錯(cuò)誤MD5錯(cuò)誤請(qǐng)點(diǎn)擊這里)
目前SMSSDK提供兩套接口方案业栅,一種是默認(rèn)的UI集成即可秒咐,如下1-1所示;另一種是不使用我們的UI碘裕,直接調(diào)用發(fā)送和驗(yàn)證接口,如下1-2所示攒钳;
1-1.以可視化界面完成操作
public void sendCode(Context context) {
RegisterPage page = new RegisterPage();
//如果使用我們的ui帮孔,沒有申請(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;
// 國(guó)家代碼,如“86”
String country = (String) phoneMap.get("country");
// 手機(jī)號(hào)碼,如“13800138000”
String phone = (String) phoneMap.get("phone");
// TODO 利用國(guó)家代碼和手機(jī)號(hào)碼進(jìn)行后續(xù)的操作
} else{
// TODO 處理錯(cuò)誤的結(jié)果
}
}
});
page.show(context);
}
Kotin 版本
fun sendCode(context: Context) {
val page = RegisterPage()
//如果使用我們的ui文兢,沒有申請(qǐng)模板編號(hào)的情況下需傳null
page.setTempCode(null)
page.setRegisterCallback(object : EventHandler() {
fun afterEvent(event: Int, result: Int, data: Any) {
if (result == SMSSDK.RESULT_COMPLETE) {
// 處理成功的結(jié)果
val phoneMap = data as HashMap<String, Any>
// 國(guó)家代碼晤斩,如“86”
val country = phoneMap["country"] as String
// 手機(jī)號(hào)碼,如“13800138000”
val phone = phoneMap["phone"] as String
// TODO 利用國(guó)家代碼和手機(jī)號(hào)碼進(jìn)行后續(xù)的操作
} else {
// TODO 處理錯(cuò)誤的結(jié)果
}
}
})
page.show(context)
}
1-2姆坚、以無(wú)界面接口完成操作
a.注冊(cè)監(jiān)聽回調(diào)澳泵,后面執(zhí)行發(fā)送驗(yàn)證的時(shí)候才能正常收到回調(diào)
EventHandler eh=new EventHandler(){
@Override
public void afterEvent(int event, int result, Object data) {
// TODO 此處不可直接處理UI線程,處理后續(xù)操作需傳到主線程中操作
Message msg = new Message();
msg.arg1 = event;
msg.arg2 = result;
msg.obj = data;
mHandler.sendMessage(msg);
}
};
//注冊(cè)一個(gè)事件回調(diào)監(jiān)聽兼呵,用于處理SMSSDK接口請(qǐng)求的結(jié)果
SMSSDK.registerEventHandler(eh);
Kotin 版本
val eh = object : EventHandler() {
override fun afterEvent(event: Int, result: Int, data: Any?) {
// TODO 此處不可直接處理UI線程兔辅,處理后續(xù)操作需傳到主線程中操作
val msg = Message()
msg.arg1 = event
msg.arg2 = result
msg.obj = data
mHandler.sendMessage(msg)
}
}
//注冊(cè)一個(gè)事件回調(diào)監(jiān)聽,用于處理SMSSDK接口請(qǐng)求的結(jié)果
SMSSDK.registerEventHandler(eh)
如上击喂,后續(xù)判斷回調(diào)類型可參考文檔 無(wú)GUI接口調(diào)用
b.發(fā)送驗(yàn)證碼维苔,具體參數(shù)可以參考 無(wú)GUI接口調(diào)用
// 請(qǐng)求驗(yàn)證碼,其中country表示國(guó)家代碼懂昂,如“86”介时;phone表示手機(jī)號(hào)碼,如“13800138000”
SMSSDK.getVerificationCode(country, phone);
c.驗(yàn)證驗(yàn)證碼凌彬,具體參數(shù)可以參考 無(wú)GUI接口調(diào)用
// 提交驗(yàn)證碼沸柔,其中的code表示驗(yàn)證碼,如“1357”
SMSSDK.submitVerificationCode(country, phone, code);
// 使用完EventHandler需注銷铲敛,否則可能出現(xiàn)內(nèi)存泄漏
protected void onDestroy() {
super.onDestroy();
SMSSDK.unregisterEventHandler(eventHandler);
}
混淆設(shè)置
混淆設(shè)置:SMSSDK已經(jīng)做了混淆處理褐澎,再次混淆會(huì)導(dǎo)致不可預(yù)期的錯(cuò)誤,請(qǐng)?jiān)谀幕煜_本中添加如下的配置原探,跳過(guò)對(duì)SMSSDK的混淆操作:
-keep class com.mob.**{*;}
-keep class cn.smssdk.**{*;}
-dontwarn com.mob.**
注意事項(xiàng)
SMSSDK默認(rèn)會(huì)添加一套開源的GUI庫(kù)乱凿,如果您不需要這個(gè)庫(kù),可以在SMSSDK下設(shè)置“gui false”來(lái)關(guān)閉它
若使用GUI的自動(dòng)填充驗(yàn)證碼功能咽弦,需在SMSSDK{}中打開此設(shè)置 “autoSMS true ”
MobSDK默認(rèn)為SMSSDK提供最新版本的集成徒蟆,如果您想鎖定某個(gè)版本,可以在SMSSDK{}中設(shè)置“version “某個(gè)版本””來(lái)固定使用這個(gè)版本
在嘗試讀取通信錄時(shí)以彈窗提示用戶(可選功能),在監(jiān)聽回調(diào)前調(diào)用即可型型;
SMSSDK.setAskPermisionOnReadContact(true);
如果使用MobSDK的模塊會(huì)被其它模塊依賴段审,請(qǐng)確保依賴它的模塊也引入MobSDK插件,或在此模塊的gradle中添加:
repositories {
jcenter()
}