ONE Goal,ONE Passion !
现在大多数app 在注册时会使用手机号直接注册,这样到挺方便的.不过对开发者来说就要去集成一些短信验证的sdk了.用的比较多的当属mob.com网址的api.
http://dashboard.mob.com/#/main/index 注册用户,注册了用户后才能创建应用.
如图:
点击添加后会生成app key,以及app secret.
注意: 应用名一定要和工程应用名一致.
新建一个项目,项目名要和申请key时的名一致.开始集成:
我们的项目一般不要求有gui;只需将SMSSDK下的libs底下的文件移到你要使用的项目的相应位置即可。下载官方sdk.
如图:
如果在编译时提示ndkassembleerror之类的错误,请尝试在local.property里添加你的ndk路径
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>
<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 | 当前服务暂不支持此国家 | 当前服务暂不支持此国家,请选择其它国家 |