国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android開發工程中集成mob短信驗證碼功能的方法

2019-12-12 06:21:25
字體:
來源:轉載
供稿:網友

一.前言

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

這里寫圖片描述

二.實現過程

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

1.key申請

申請地址:http://www.mob.com,在產品中心選擇短信驗證碼SDK,然后完成相應的注冊和申請工作;
進入自己的后臺中心,就可以看見自己的App Key和App Secret:

這里寫圖片描述

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

2.下載SDK

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

這里寫圖片描述 

下載后大概是這樣:

這里寫圖片描述

3.集成過程

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

3.1.配置SDK

這已經是使用第三方接口的老規矩了。官網文檔我就不貼了,著實看著不舒服,在這里只貼自己的。

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

這里寫圖片描述

然后在build.gradle中添加依賴項

這里寫圖片描述

在AndroidManifest中添加相應權限和注冊相應的activity

 <!-- mob短信 需要的權限 --> <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的,這個activity應該可以不需要了,自己沒試過,就先在這注冊著吧) --> <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.調用接口發送短信

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

初始化: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();  //回調函數  registerPage.setRegisterCallback(new EventHandler()  {   public void afterEvent(int event, int result, Object data)   {   // 解析結果   if (result == SMSSDK.RESULT_COMPLETE)   {   //提交驗證碼成功   if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE)   {   }   //提交驗證碼成功,此時已經驗證成功了   else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE)   {   }   }   }  });  registerPage.show(LoginActivity.this);  } });

2)無GUI

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

//我只提供一些關鍵代碼,其他部分就不提供了,太多,看起來太雜public class ActivityMessageRegister extends Activity { private static final int CODE_ING = 1;   //已發送,倒計時 private static final int CODE_REPEAT = 2;  //重新發送 private static final int SMSDDK_HANDLER = 3;  //短信回調 private int TIME = 60;//倒計時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);  } }; // 注冊回調監聽接口 SMSSDK.registerEventHandler(eventHandler); } //監聽函數 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://獲取驗證碼   new AlertDialog.Builder(ActivityMessageRegister.this)    .setTitle("發送短信")    .setMessage("我們將把驗證碼發送到以下號碼:/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());//對驗證碼進行驗證->回調函數   break;  default:   break;  } } } Handler handler = new Handler() { public void handleMessage(Message msg) {  switch (msg.what)  {  case CODE_ING://已發送,倒計時   getCodeButton.setText("重新發送("+--TIME+"s)");   break;  case CODE_REPEAT://重新發送   getCodeButton.setText("獲取驗證碼");   getCodeButton.setClickable(true);   break;  case SMSDDK_HANDLER:   int event = msg.arg1;   int result = msg.arg2;   Object data = msg.obj;   //回調完成   if (result == SMSSDK.RESULT_COMPLETE)   {   //驗證碼驗證成功   if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE)   {    Toast.makeText(ActivityMessageRegister.this, "驗證成功", 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");   //暫時為空    //user.setUserIdCard(userIdCard);    //user.setUserImage("");    //暫時為空    //注冊->服務器    UserController.userRegister(user, handler);    }   }   //已發送驗證碼    else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE)   {    Toast.makeText(getApplicationContext(), "驗證碼已經發送",     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");//錯誤描述    int status = object.optInt("status");//錯誤代碼    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://手機號是否已存在   String result_code_2 = msg.getData().getString("result").toString();   if("1".equals(result_code_2))   {   errPhoneText.setText("手機號碼已經注冊,請換用其他號碼");   resultMap.put("phone", false);   }   else   {   errPhoneText.setText("");   resultMap.put("phone", true);   }   break;  } } };}

OK,基本就大功告成。

三.問題

集成中可能會出現幾個問題:

1.無法接收短信驗證碼

mob默認是開啟了智能驗證的,也意味著如果一個號碼通過了一次驗證碼驗證,那之后再次進行短信驗證時,就會智能驗證通過,而此時是不會接收到驗證碼的,因為mob不會下發驗證碼。這就對我們的測試造成了一定的影響,有時候,我們始終無法接收到驗證碼,原因就在這里。進入后臺,將智能驗證功能關閉就可以了。后臺中心->短信設置->智能驗證
這里寫圖片描述

2.短信驗證成功后,并未執行相應的代碼,而是返回到了某一個界面

還是有可能是因為智能驗證的原因。

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)   {   //官方文檔中說了,如果是智能驗證只需要在這里對data進行判斷就可以了   if((Boolean)data)//是智能驗證   {    //如果增加了這條if語句,那么就算關閉了智能驗證,此時的data強制轉換成了Boolean也是為true的,所以并不會執行后面的相應代碼,所以,如果在集成的時候不需要智能驗證,最好的方式就是不去管這個功能。   }   else   {    //非智能   }   }  }  }

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

以上就是本文的全部內容,希望對大家學習Android軟件編程有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柳林县| 凤翔县| 东台市| 精河县| 荔浦县| 河南省| 昌吉市| 秦安县| 从江县| 江华| 水城县| 安新县| 保德县| 江阴市| 沁阳市| 大英县| 黄石市| 临湘市| 巩义市| 望谟县| 舟山市| 玉门市| 宜丰县| 特克斯县| 会理县| 稷山县| 乐昌市| 康平县| 公安县| 高唐县| 鹤庆县| 崇信县| 南部县| 华亭县| 永靖县| 信宜市| 渭源县| 清苑县| 垦利县| 呈贡县| 武平县|