Android集成mob短信SDK

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文件。

在AndroidManifest中添加相应权限和注册相应的activity

<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.READ_SMS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|adjustResize"/>
4.

启动SDK

在您的项目启动时,调用下面的代码:

SMSSDK.initSDK(this, "您的appkey", "您的appsecret");//在Applicaton中初始化 或者


   
   
SMSSDK.initSDK(LoginActivity. this , "App Key" , "App Secret" );//调用时在Activity中初始化

4.1短信SDK内置了开源的GUI功能,您可以通过调用下面的代码打开短信验证页面:

//打开注册页面
RegisterPage registerPage = new RegisterPage();
registerPage.setRegisterCallback(new EventHandler() {
public void afterEvent(int event, int result, Object data) {
// 解析注册结果
if (result == SMSSDK.RESULT_COMPLETE) {
@SuppressWarnings("unchecked")
HashMap<String,Object> phoneMap = (HashMap<String, Object>) data;
String country = (String) phoneMap.get("country");
String phone = (String) phoneMap.get("phone"); 

// 提交用户信息(此方法可以不调用)
registerUser(country, phone);
}
}
});
registerPage.show(context);
4.2一般是使用自己的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 ;
   }
  }
  };
}


集成中可能会出现问题:

.无法接收短信验证码

mob默认是开启了智能验证的,也意味着如果一个号码通过了一次验证码验证,那之后再次进行短信验证时,就会智能验证通过,而此时是不会接收到验证码的,因为mob不会下发验证码。这就对我们的测试造成了一定的影响,有时候,我们始终无法接收到验证码,原因就在这里。进入后台,将智能验证功能关闭就可以了。后台中心->短信设置->智能验证。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值