集成短信验证码--Mob.com

来源:互联网 发布:种植牙失败知乎 编辑:程序博客网 时间:2024/06/08 13:43

集成短信验证码–Mob.com

ONE Goal,ONE Passion !


现在大多数app 在注册时会使用手机号直接注册,这样到挺方便的.不过对开发者来说就要去集成一些短信验证的sdk了.用的比较多的当属mob.com网址的api.

第1步: 登录网站注册开发者

http://dashboard.mob.com/#/main/index 注册用户,注册了用户后才能创建应用.


第2步: 创建应用得到App key, App Secret

如图:
这里写图片描述
点击添加后会生成app key,以及app secret.
注意: 应用名一定要和工程应用名一致.


第3步: 在自己工程中做集成

新建一个项目,项目名要和申请key时的名一致.开始集成:
我们的项目一般不要求有gui;只需将SMSSDK下的libs底下的文件移到你要使用的项目的相应位置即可。下载官方sdk.
如图:
这里写图片描述
如果在编译时提示ndkassembleerror之类的错误,请尝试在local.property里添加你的ndk路径
这里写图片描述

第4步:java代码实例化

a.在使用的时候去实例化,并且注册事件.

public class MainActivity extends Activity implements View.OnClickListener {    private Button sensmsButton, verificationButton, countryButton;    private TextView countryTextView, textView2;    private EditText phonEditText, verEditText;    // 填写从短信SDK应用后台注册得到的APPKEY    private static String APPKEY = "dfa83789889c";    // 填写从短信SDK应用后台注册得到的APPSECRET    private static String APPSECRET = "cccb7ff4168648e6bb9455d00bb8d54e";    public String phString;     @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        sensmsButton = (Button) findViewById(R.id.button1);        verificationButton = (Button) findViewById(R.id.button2);        countryButton = (Button) findViewById(R.id.button3);        countryTextView = (TextView) findViewById(R.id.textView1);        textView2 = (TextView) findViewById(R.id.textView2);        phonEditText = (EditText) findViewById(R.id.editText1);        verEditText = (EditText) findViewById(R.id.editText2);        sensmsButton.setOnClickListener(this);        verificationButton.setOnClickListener(this);        countryButton.setOnClickListener(this);        SMSSDK.initSDK(this, APPKEY, APPSECRET);        EventHandler eh = 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;                System.out.println("result-----" + result);                System.out.println("data-----" + data);                handler.sendMessage(msg);            }        };        SMSSDK.registerEventHandler(eh);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.button1:// 获取验证码                if (!TextUtils.isEmpty(phonEditText.getText().toString())) {                    SMSSDK.getVerificationCode("86", phonEditText.getText()                            .toString());                    phString = phonEditText.getText().toString();                } else {                    Toast.makeText(this, "电话不能为空", Toast.LENGTH_SHORT).show();                }                break;            case R.id.button2:// 校验验证码                if (!TextUtils.isEmpty(verEditText.getText().toString())) {                    SMSSDK.submitVerificationCode("86", phString, verEditText                            .getText().toString());                } else {                    Toast.makeText(this, "验证码不能为空", Toast.LENGTH_SHORT).show();                }                break;            case R.id.button3:// 国家列表                SMSSDK.getSupportedCountries();                // SMSSDK.getCountry(arg0);                SMSSDK.getGroupedCountryList();                // SMSSDK.getCountryByMCC(arg0);                break;            default:                break;        }    }    Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            // TODO Auto-generated method stub            super.handleMessage(msg);            int event = msg.arg1;            int result = msg.arg2;            Object data = msg.obj;            Log.e("event", "event=" + event);            if (result == SMSSDK.RESULT_COMPLETE) {                // 短信注册成功后,返回MainActivity,然后提示新好友                if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {// 提交验证码成功                    Toast.makeText(getApplicationContext(), "提交验证码成功",                            Toast.LENGTH_SHORT).show();                    textView2.setText("提交验证码成功");                } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {                    Toast.makeText(getApplicationContext(), "验证码已经发送",                            Toast.LENGTH_SHORT).show();                    textView2.setText("验证码已经发送");                } else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {// 返回支持发送验证码的国家列表                    Toast.makeText(getApplicationContext(), "获取国家列表成功",                            Toast.LENGTH_SHORT).show();                    countryTextView.setText(data.toString());                }            } else {                ((Throwable) data).printStackTrace();                int resId = getStringRes(MainActivity.this,                        "smssdk_network_error");                Toast.makeText(MainActivity.this, "验证码错误", Toast.LENGTH_SHORT)                        .show();                if (resId > 0) {                    Toast.makeText(MainActivity.this, resId, Toast.LENGTH_SHORT)                            .show();                }            }        }    };    @Override    protected void onDestroy() {        // TODO Auto-generated method stub        super.onDestroy();        SMSSDK.unregisterAllEventHandler();    }}

b. 官方demo提供的xml.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity">    <EditText        android:id="@+id/editText1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentTop="true"        android:ems="10"        android:hint="手机号"        android:inputType="number">        <requestFocus />    </EditText>    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignTop="@+id/editText1"        android:layout_toRightOf="@+id/editText1"        android:text="获取验证码" />    <EditText        android:id="@+id/editText2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/editText1"        android:layout_below="@+id/button1"        android:ems="10"        android:hint="验证码"        android:inputType="number" />    <Button        android:id="@+id/button2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/editText2"        android:layout_below="@+id/editText2"        android:text="验证" />    <Button        android:id="@+id/button3"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/button2"        android:layout_centerVertical="true"        android:text="获取支持的国家列表" />    <TextView        android:id="@+id/textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/button3"        android:layout_below="@+id/button3" />    <TextView        android:id="@+id/textView2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignRight="@+id/button2"        android:layout_below="@+id/button2"        android:layout_marginTop="25dp"        android:text="TextView" /></RelativeLayout>

第5步: 添加权限

<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" />

这样就完成了集成如图点击输入手机号即可收到验证码:

这里写图片描述
输入验证码就可以进行验证了.

完整demo地址:
http://download.csdn.net/my

错误码参考

SMSSDK for Android API回调中,当result=SMSSDK.RESULT_ERROR,则data的类型为Throwable;如果这个Throwable的message就存放有json数据,你可以从中读取status的错误码信息。一部分是服务器返回的。还有一部分是SDK本地生成的。
服务器错误码:

错误码 描述 说明 400 无效请求 客户端请求不能被识别。 405 AppKey为空 请求的AppKey为空。 406 AppKey错误 请求的AppKey不存在。 407 缺少数据 请求提交的数据缺少必要的数据。 408 无效的参数 无效的请求参数。 418 内部接口调用失败 内部接口调用失败。 450 权限不足 无权执行该操作。 454 数据格式错误 请求传递的数据格式错误,服务器无法转换为JSON格式的数据。 455 签名无效 签名检验。 456 手机号码为空 提交的手机号码或者区号为空。 457 手机号码格式错误 提交的手机号格式不正确(包括手机的区号)。 458 手机号码在黑名单中 手机号码在发送黑名单中。 459 无appKey的控制数据 获取appKey控制发送短信的数据失败。 460 无权限发送短信 没有打开客户端发送短信的开关。 461 不支持该地区发送短信 没有开通给当前地区发送短信的功能。 462 每分钟发送次数超限 每分钟发送短信的数量超过限制。 463 手机号码每天发送次数超限 手机号码在当前APP内每天发送短信的次数超出限制。 464 每台手机每天发送次数超限 每台手机每天发送短信的次数超限。 465 号码在App中每天发送短信的次数超限 手机号码在APP中每天发送短信的数量超限。 466 校验的验证码为空 提交的校验验证码为空。 467 校验验证码请求频繁 5分钟内校验错误超过3次,验证码失效。 468 需要校验的验证码错误 用户提交校验的验证码错误。 469 未开启web发送短信 没有打开通过网页端发送短信的开关。 470 账户余额不足 账户的短信余额不足。 471 请求IP错误 通过服务端发送或验证短信的IP错误 472 客户端请求发送短信验证过于频繁 客户端请求发送短信验证过于频繁 473 服务端根据duid获取平台错误 服务端根据duid获取平台错误 474 没有打开服务端验证开关 没有打开服务端验证开关 475 appKey的应用信息不存在 appKey的应用信息不存在 476 当前appkey发送短信的数量超过限额 如果当前appkey对应的包名没有通过审核,每天次appkey+包名最多可以发送20条短信 477 当前手机号发送短信的数量超过限额 当前手机号码在SMSSDK平台内每天最多可发送短信10条,包括客户端发送和WebApi发送 478 当前手机号在当前应用内发送超过限额 当前手机号码在当前应用下 12小时内最多可发送文本验证码5条 500 服务器内部错误 服务端程序报错。

本地错误码:

错误码 描述 说明 600 API使用受限制 API使用受限制 601 短信发送受限 短信发送受限 602 无法发送此地区短信 无法发送此地区短信 603 请填写正确的手机号码 请填写正确的手机号码 604 当前服务暂不支持此国家 当前服务暂不支持此国家,请选择其它国家
4 0