最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android開發(fā)工程中集成mob短信驗(yàn)證碼功能的方法

 更新時(shí)間:2016年05月24日 11:55:42   作者:不正經(jīng)的小二哥  
這篇文章主要介紹了Android開發(fā)工程中集成mob短信驗(yàn)證碼功能的方法,感興趣的小伙伴們可以參考一下

一.前言

現(xiàn)在的app基本上都需要用到短信功能,注冊時(shí)或者有消息通知時(shí)需要給用戶發(fā)送一條短信,但是對于個(gè)人開發(fā)者來說,去買第三方的短信服務(wù)實(shí)在是有點(diǎn)奢侈,很好的是mob為我們提供了免費(fèi)的短信驗(yàn)證碼服務(wù)功能,我不是打廣告,的確覺得這項(xiàng)服務(wù)很不錯(cuò)。那么下面就簡單講一下如何在自己的工程里集成mob的短信功能,其實(shí)整個(gè)流程并不復(fù)雜,只是個(gè)人覺得mob的官方文檔有點(diǎn)小亂,官方Demo也有點(diǎn)小復(fù)雜,同時(shí)有一些細(xì)節(jié)地方容易被忽視,也會(huì)導(dǎo)致一些問題。
PS:太喜歡mob的logo了。

這里寫圖片描述

二.實(shí)現(xiàn)過程

本篇只涉及Android,如果是IOS系統(tǒng),還望自己斟酌,希望本篇文章也能給您提供幫助,同時(shí)IDE是Android Studio。

1.key申請

申請地址:http://www.mob.com,在產(chǎn)品中心選擇短信驗(yàn)證碼SDK,然后完成相應(yīng)的注冊和申請工作;
進(jìn)入自己的后臺(tái)中心,就可以看見自己的App Key和App Secret:

這里寫圖片描述

整體趨勢欄給我們展示了一些短信服務(wù)使用情況。未上線登記時(shí),我們可以免費(fèi)使用20條/天,如果需求量比較大,我們可以在自己的工程里集成了mob短信,然后上線登記,應(yīng)該可以獲得更多的免費(fèi)短信條數(shù),暫未嘗試。

2.下載SDK

在SDK下載欄目選擇SMS for Android,然后選擇相應(yīng)IDE對應(yīng)的SDK即可(本篇IDE是as)

這里寫圖片描述 

下載后大概是這樣:

這里寫圖片描述

3.集成過程

申請到了key和secret后就是集成到自己的工程中了。mob主要提供兩種接口方式:1)使用官方自帶的UI;2)使用無GUI接口。

3.1.配置SDK

這已經(jīng)是使用第三方接口的老規(guī)矩了。官網(wǎng)文檔我就不貼了,著實(shí)看著不舒服,在這里只貼自己的。

首先是在工程的libs下添加jar包和.aar文件。

這里寫圖片描述

然后在build.gradle中添加依賴項(xiàng)

這里寫圖片描述

在AndroidManifest中添加相應(yīng)權(quán)限和注冊相應(yīng)的activity

 <!-- mob短信 需要的權(quán)限 -->
 <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" />
<!--在application中注冊activity -->
 <!-- Mob短信(如果使用無GUI的,這個(gè)activity應(yīng)該可以不需要了,自己沒試過,就先在這注冊著吧) -->
 <activity
  android:name="com.mob.tools.MobUIShell"
  android:configChanges="keyboardHidden|orientation|screenSize"
  android:theme="@android:style/Theme.Translucent.NoTitleBar"
  android:windowSoftInputMode="stateHidden|adjustResize" >
 </activity>

3.2.調(diào)用接口發(fā)送短信

前面提到了,mob短息提供有GUI和無GUI的兩種方式,無論哪種方式,都需要對SMSSDK先初始化,再調(diào)用接口。

初始化:SMSSDK.initSDK(LoginActivity.this, "App Key", "App Secret");

1)有GUI,即使用mob提供的界面

這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

方法如下:

 registerText.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
  //首先初始化SMSSDK
  SMSSDK.initSDK(LoginActivity.this, "App Key", "App Secret");
  RegisterPage registerPage = new RegisterPage();
  //回調(diào)函數(shù)
  registerPage.setRegisterCallback(new EventHandler()
  {
   public void afterEvent(int event, int result, Object data)
   {
   // 解析結(jié)果
   if (result == SMSSDK.RESULT_COMPLETE)
   {
   //提交驗(yàn)證碼成功
   if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE)
   {
   }
   //提交驗(yàn)證碼成功,此時(shí)已經(jīng)驗(yàn)證成功了
   else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE)
   {
   }
   }
   }
  });
  registerPage.show(LoginActivity.this);
  }
 });

2)無GUI

這種情況一般是使用自己的activity界面,然后集成短信功能,比如一個(gè)簡單的注冊。

//我只提供一些關(guān)鍵代碼,其他部分就不提供了,太多,看起來太雜
public class ActivityMessageRegister extends Activity 
{
 private static final int CODE_ING = 1;   //已發(fā)送,倒計(jì)時(shí)
 private static final int CODE_REPEAT = 2;  //重新發(fā)送
 private static final int SMSDDK_HANDLER = 3;  //短信回調(diào)
 private int TIME = 60;//倒計(jì)時(shí)60s

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_message_register);
 initView();//界面初始化
 initSDK();//短信初始化
 }
 //初始化界面
 void initView()
 {
 userPhoneText = (EditText)findViewById(R.id.user_phone_input);
 userPasswordText = (EditText)findViewById(R.id.user_password_input);
 userNameText = (EditText)findViewById(R.id.user_name_input);
 registerButton = (Button)findViewById(R.id.register_button);
 registerButton.setOnClickListener(new OnClickListener());
 loginView = (TextView)findViewById(R.id.login_view);
 getCodeButton = (Button)findViewById(R.id.get_code_button);
 getCodeButton.setOnClickListener(new OnClickListener());
 codeText = (EditText)findViewById(R.id.code_view);
 //
 ...
 //
 }
 //初始化SMSSDK
 private void initSDK()
 {
 SMSSDK.initSDK(this, "App Key", "App Secret");
 eventHandler = new EventHandler() {
  @Override
  public void afterEvent(int event, int result, Object data) {
  Message msg = new Message();
  msg.arg1 = event;
  msg.arg2 = result;
  msg.obj = data;
  msg.what = SMSDDK_HANDLER;
  handler.sendMessage(msg);
  }
 };
 // 注冊回調(diào)監(jiān)聽接口
 SMSSDK.registerEventHandler(eventHandler);
 }
 //監(jiān)聽函數(shù)
 private class OnClickListener implements View.OnClickListener
 {
 @Override
 public void onClick(View v) {
  userPhone = userPhoneText.getText().toString();
  switch (v.getId()) {
  case R.id.get_code_button://獲取驗(yàn)證碼
   new AlertDialog.Builder(ActivityMessageRegister.this)
    .setTitle("發(fā)送短信")
    .setMessage("我們將把驗(yàn)證碼發(fā)送到以下號(hào)碼:\n"+"+86:"+userPhone)
    .setPositiveButton("確定", new DialogInterface.OnClickListener()
    {
    @Override
    public void onClick(DialogInterface dialog, int which)
    {
     SMSSDK.getVerificationCode("86", userPhone);
     getCodeButton.setClickable(false);
     new Thread(new Runnable()
     {
     @Override
     public void run()
     {
      for (int i = 60; i > 0; i--)
      {
      handler.sendEmptyMessage(CODE_ING);
      if (i <= 0)
      {
       break;
      }
      try
      {
       Thread.sleep(1000);
      } catch (InterruptedException e)
      {
       e.printStackTrace();
      }
      }
      handler.sendEmptyMessage(CODE_REPEAT);
     }
     }).start();
    }
    })
    .create()
    .show();
   break;

  case R.id.register_button://注冊
   SMSSDK.submitVerificationCode("86", userPhone, codeText.getText().toString());//對驗(yàn)證碼進(jìn)行驗(yàn)證->回調(diào)函數(shù)
   break;
  default:
   break;
  }
 }
 }
 Handler handler = new Handler()
 {
 public void handleMessage(Message msg)
 {
  switch (msg.what)
  {
  case CODE_ING://已發(fā)送,倒計(jì)時(shí)
   getCodeButton.setText("重新發(fā)送("+--TIME+"s)");
   break;
  case CODE_REPEAT://重新發(fā)送
   getCodeButton.setText("獲取驗(yàn)證碼");
   getCodeButton.setClickable(true);
   break;
  case SMSDDK_HANDLER:
   int event = msg.arg1;
   int result = msg.arg2;
   Object data = msg.obj;
   //回調(diào)完成
   if (result == SMSSDK.RESULT_COMPLETE)
   {
   //驗(yàn)證碼驗(yàn)證成功
   if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE)
   {
    Toast.makeText(ActivityMessageRegister.this, "驗(yàn)證成功", Toast.LENGTH_LONG).show();
    if (check())//其他合法性的檢測
    {
    UserModel user = new UserModel();
    user.setUserId(MyUUID.getUUID());  //id
    user.setUserPhone(userPhone);
    user.setUserPassword(MD5.md5(userPassword)); //md5加密
    user.setUserGender(gender);   //性別
    user.setUserName(userName);
    user.setUserBirthday("19920401");   //暫時(shí)為空
    //user.setUserIdCard(userIdCard);
    //user.setUserImage("");    //暫時(shí)為空
    //注冊->服務(wù)器
    UserController.userRegister(user, handler);
    }

   }
   //已發(fā)送驗(yàn)證碼 
   else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE)
   {
    Toast.makeText(getApplicationContext(), "驗(yàn)證碼已經(jīng)發(fā)送",
     Toast.LENGTH_SHORT).show();
   } else
   {
    ((Throwable) data).printStackTrace();
   }
   }
   if(result==SMSSDK.RESULT_ERROR)
   {
   try {
    Throwable throwable = (Throwable) data;
    throwable.printStackTrace();
    JSONObject object = new JSONObject(throwable.getMessage());
    String des = object.optString("detail");//錯(cuò)誤描述
    int status = object.optInt("status");//錯(cuò)誤代碼
    if (status > 0 && !TextUtils.isEmpty(des)) {
    Toast.makeText(getApplicationContext(), des, Toast.LENGTH_SHORT).show();
    return;
    }
   } catch (Exception e) {
    //do something
   }
   }
   break;
  case R.id.register_status:
   String result_code = msg.getData().getString("result").toString();
   if("1".equals(result_code))
   {
   Toast.makeText(ActivityMessageRegister.this, "注冊成功", Toast.LENGTH_LONG).show();
   Intent intent = new Intent(ActivityMessageRegister.this,LoginActivity.class);
   intent.putExtra("userPhone", userPhone);
   ActivityMessageRegister.this.setResult(RESULE_CODE, intent);
   //startActivity(intent);
   finish();
   }else
   {
   Toast.makeText(ActivityMessageRegister.this, "注冊失敗", Toast.LENGTH_LONG).show();
   }
   break;
  case R.id.check_phone_exist://手機(jī)號(hào)是否已存在
   String result_code_2 = msg.getData().getString("result").toString();
   if("1".equals(result_code_2))
   {
   errPhoneText.setText("手機(jī)號(hào)碼已經(jīng)注冊,請換用其他號(hào)碼");
   resultMap.put("phone", false);
   }
   else
   {
   errPhoneText.setText("");
   resultMap.put("phone", true);
   }
   break;
  }
 }
 };
}

OK,基本就大功告成。

三.問題

集成中可能會(huì)出現(xiàn)幾個(gè)問題:

1.無法接收短信驗(yàn)證碼

mob默認(rèn)是開啟了智能驗(yàn)證的,也意味著如果一個(gè)號(hào)碼通過了一次驗(yàn)證碼驗(yàn)證,那之后再次進(jìn)行短信驗(yàn)證時(shí),就會(huì)智能驗(yàn)證通過,而此時(shí)是不會(huì)接收到驗(yàn)證碼的,因?yàn)閙ob不會(huì)下發(fā)驗(yàn)證碼。這就對我們的測試造成了一定的影響,有時(shí)候,我們始終無法接收到驗(yàn)證碼,原因就在這里。進(jìn)入后臺(tái),將智能驗(yàn)證功能關(guān)閉就可以了。后臺(tái)中心->短信設(shè)置->智能驗(yàn)證
這里寫圖片描述

2.短信驗(yàn)證成功后,并未執(zhí)行相應(yīng)的代碼,而是返回到了某一個(gè)界面

還是有可能是因?yàn)橹悄茯?yàn)證的原因。

eventHandler = new EventHandler() {
  @Override
  public void afterEvent(int event, int result, Object data) 
  {
  if (result == SMSSDK.RESULT_COMPLETE)
  {
   if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE)
   {
   //官方文檔中說了,如果是智能驗(yàn)證只需要在這里對data進(jìn)行判斷就可以了
   if((Boolean)data)//是智能驗(yàn)證
   {
    //如果增加了這條if語句,那么就算關(guān)閉了智能驗(yàn)證,此時(shí)的data強(qiáng)制轉(zhuǎn)換成了Boolean也是為true的,所以并不會(huì)執(zhí)行后面的相應(yīng)代碼,所以,如果在集成的時(shí)候不需要智能驗(yàn)證,最好的方式就是不去管這個(gè)功能。
   }
   else
   {
    //非智能
   }
   }
  }
  }

所以,最妥的方式,就是徹底舍棄掉智能驗(yàn)證功能。

以上就是本文的全部內(nèi)容,希望對大家學(xué)習(xí)Android軟件編程有所幫助。

相關(guān)文章

  • Android UI效果之繪圖篇(四)

    Android UI效果之繪圖篇(四)

    這篇文章主要介紹了Android UI效果之繪圖篇,針對Android開發(fā)中的UI效果設(shè)計(jì)模塊中Shader進(jìn)行講解,感興趣的小伙伴們可以參考一下
    2016-02-02
  • android自定義popupwindow仿微信右上角彈出菜單效果

    android自定義popupwindow仿微信右上角彈出菜單效果

    這篇文章主要為大家詳細(xì)介紹了android自定義popupwindow仿微信右上角彈出菜單效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 讓Android中RadioGroup不顯示在輸入法上面的辦法

    讓Android中RadioGroup不顯示在輸入法上面的辦法

    在Android開發(fā)中,發(fā)現(xiàn)一個(gè)問題,打開輸入法導(dǎo)致下面的radioGroup的位置發(fā)生了變化,被頂?shù)搅溯斎敕ǖ纳厦?,那么該如何解決呢?下面來看看。
    2016-08-08
  • Android Dialog仿ios9中UIAlertController控件

    Android Dialog仿ios9中UIAlertController控件

    這篇文章主要為大家詳細(xì)介紹了Android Dialog仿ios9中UIAlertController控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Android Studio使用教程(六):Gradle多渠道打包

    Android Studio使用教程(六):Gradle多渠道打包

    這篇文章主要介紹了Android Studio使用教程(六):Gradle多渠道打包,本文講解了友盟多渠道打包、assemble結(jié)合Build Variants來創(chuàng)建task、完整的gradle腳本等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • Android編程實(shí)現(xiàn)隨機(jī)生成顏色的方法示例

    Android編程實(shí)現(xiàn)隨機(jī)生成顏色的方法示例

    這篇文章主要介紹了Android編程實(shí)現(xiàn)隨機(jī)生成顏色的方法,結(jié)合實(shí)例形式分析了Android使用java Random類針對隨機(jī)數(shù)及顏色值相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • Android開發(fā)之子線程操作UI的幾種方法

    Android開發(fā)之子線程操作UI的幾種方法

    這篇文章主要介紹了Android開發(fā)之子線程操作UI的幾種方法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • Retrofit 源碼分析初探

    Retrofit 源碼分析初探

    這篇文章主要介紹了Retrofit 源碼分析初探,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Android模擬實(shí)現(xiàn)支付寶螞蟻森林效果

    Android模擬實(shí)現(xiàn)支付寶螞蟻森林效果

    這篇文章主要為大家詳細(xì)介紹了如何利用Android模擬實(shí)現(xiàn)支付寶中螞蟻森林的動(dòng)畫效果,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-09-09
  • Android中使用ContentProvider管理系統(tǒng)資源的實(shí)例

    Android中使用ContentProvider管理系統(tǒng)資源的實(shí)例

    這篇文章主要介紹了Android中使用ContentProvider管理系統(tǒng)資源的實(shí)例,講解了ContentProvider對系統(tǒng)中聯(lián)系人及多媒體資源的管理例子,需要的朋友可以參考下
    2016-04-04

最新評論

年辖:市辖区| 荔波县| 宜丰县| 慈利县| 灯塔市| 和硕县| 商洛市| 鹿邑县| 黎平县| 淮北市| 通州区| 房产| 高邮市| 荥经县| 黄陵县| 淮北市| 双城市| 武夷山市| 吴忠市| 司法| 巩义市| 枣阳市| 安福县| 定安县| 界首市| 漳平市| 梅州市| 平邑县| 永康市| 株洲县| 慈溪市| 天气| 凤翔县| 平武县| 青州市| 奉节县| 商城县| 余姚市| 洛南县| 会昌县| 沾化县|