Mob手机验证

来源:互联网 发布:手机淘宝铃声 编辑:程序博客网 时间:2024/06/05 17:26

第一步我们要在Mob官网注册账号然后下载SDK


在这里介绍两种手机验证码的形式一种是封装好的activit试图一种是自定义的试图

将以上文件按需放入Android Studio项目所要使用SMSSDK的Module所在的Libs里面:



2.2、在Module的build.gradle里面将libs加入仓库(repositories):
repositories{ flatDir{ dirs 'libs' //就是你放aar的目录地址 }}
2.3、在Module的build.gradle里面添加依赖(dependencies ):
dependencies { ....//你的其他依赖 compile name:'SMSSDK-<version>',ext:'aar' compile name:'SMSSDKGUI-<version>',ext:'aar'}
最终,你的build.gradle看起来应该像这样:

四、添加代码
1.配置AndroidManifest.xml
1.1、添加以下权限:
<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" />
1.2、添加以下Activity:
<activity android:name="com.mob.tools.MobUIShell" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:windowSoftInputMode="stateHidden|adjustResize"/>
1.3、在Application节点下添加以下属性:
android:name="com.mob.MobApplication"
1.4、在Application节点下添加以下meta-data:
<!-- 通过AndroidManifest配置AppKey和AppSecret,如果你选择通过代码配置,则不需要配置以下meta-data --><meta-data android:name="Mob-AppKey" android:value="你的AppKey"/><meta-data android:name="Mob-AppSecret" android:value="你的AppSecret"/>
最终,你的AndroidManifest.xml看起来应该像这样:

 2.在Activity中注册sdk
2.1、在你的主Activity的onCreate方法中添加以下代码以完成sdk的注册:
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 如果希望在读取通信录的时候提示用户,可以添加下面的代码,并且必须在其他代码调用之前,否则不起作用;如果没这个需求,可以不加这行代码 SMSSDK.setAskPermisionOnReadContact(boolShowInDialog) // 创建EventHandler对象 eventHandler = new EventHandler() { public void afterEvent(int event, int result, Object data) { if (data instanceof Throwable) { Throwable throwable = (Throwable)data; String msg = throwable.getMessage(); Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); } else { if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) { // 处理你自己的逻辑 } } } }; // 注册监听器 SMSSDK.registerEventHandler(eventHandler);}
其中EventHandler是短信SDK的操作回调,具体说明文档请参阅:短信SDK操作回调章节。
2.2、在onDestroy中注销SDK:
protected void onDestroy() { super.onDestroy(); SMSSDK.unregisterEventHandler(eventHandler);}
3.关于配置AppKey和AppSecret的说明
配置AppKey和AppSecret有两种方式:
(1)通过AndroidManifest配置
(2)通过代码配置
以上方法择一即可,建议使用第一种方式进行配置。
3.1、通过AndroidManifest配置:
(1)在Application节点下添加以下属性:
android:name="com.mob.MobApplication"
注意:如果你有自己的Application类,那么也可以让你的Application类继承MobApplication即可。
(2)在Application节点下添加以下子节点:
<!-- 通过AndroidManifest配置AppKey和AppSecret,如果你选择通过代码配置,则不需要配置以下meta-data --><meta-data android:name="Mob-AppKey" android:value="你的AppKey"/><meta-data android:name="Mob-AppSecret" android:value="你的AppSecret"/>
3.2、通过代码配置:
如果选择通过代码配置,则不需要继承MobApplication,只要在使用SMSSDK之前,调用以下代码:
// 通过代码注册你的AppKey和AppSecretMobSDK.init(context, "你的AppKey", "你的AppSecret");
五、代码混淆
如果你开启了proguard混淆,需要在proguard的rules里面添加以下规则:
# SMSSDK-dontwarn com.mob.**-keep class com.mob.**{*;}-dontwarn cn.smssdk.**-keep class cn.smssdk.**{*;}

mainactivity
调用第三方设置好的页面
// 打开注册页面
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");

phoneNumber = phone;

Log.e("PhoneNumber", phone);
// 提交用户信息(此方法可以不调用)
// registerUser(country, phone);

}
}
});
registerPage.show(this);

// 打开通信录好友列表页面
ContactsPage contactsPage = new ContactsPage();
contactsPage.show(this);

自己设置的页面
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="42dp"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20dp"
android:background="#666"
android:gravity="center"
android:text="短信验证"
android:textColor="#00ffaa"
android:textSize="24dp"
/>

<RelativeLayout
android:id="@+id/reg_rl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textView2">

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginBottom="42dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="48dp"
android:text="手机号:"
android:textSize="20dp"/>


<EditText
android:id="@+id/phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView1"
android:layout_alignBottom="@+id/textView1"
android:layout_marginRight="42dp"
android:layout_toRightOf="@+id/textView1"
android:ems="11"
android:inputType="phone"
android:maxLength="11">

<requestFocus/>

</EditText>
</RelativeLayout>

<RelativeLayout
android:id="@+id/reg_rl2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/reg_rl">

<TextView

android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:layout_alignParentLeft="true"
android:layout_marginBottom="42dp"
android:layout_marginLeft="20dp"
android:text="验证码:"
android:textSize="20dp"/>


<EditText
android:id="@+id/cord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView3"
android:layout_alignBottom="@+id/textView3"
android:layout_toRightOf="@+id/textView3"
android:layout_marginTop="20dp"
android:ems="4"
android:inputType="phone"
android:maxLength="4"/>


<Button
android:id="@+id/getcord"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="获取验证码"
android:visibility="visible"
android:layout_alignBottom="@+id/cord"
android:layout_toEndOf="@+id/cord"
android:layout_marginStart="20dp"/>
</RelativeLayout>

<Button
android:id="@+id/savecord"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_margin="20dp"
android:text="验证"/>


<TextView
android:id="@+id/now"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="提示信息"
android:textColor="#aaaaaa"
android:visibility="gone"
android:layout_alignBottom="@+id/reg_rl2"
android:layout_alignEnd="@+id/savecord"
android:layout_marginEnd="113dp"
android:layout_marginBottom="42dp"/>

</RelativeLayout>

代码

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.example.demo_one.R;

import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;

import static com.mob.tools.utils.ResHelper.getStringRes;

/**
* Created by 蜕变~成蝶 on 2017/9/13.
* 手机验证
*/

public class Activity_Register extends AppCompatActivity implements View.OnClickListener {
private EditText phone;
private EditText cord;
private TextView now;
private Button getCord;
private Button saveCord;
private String iPhone;
private String iCord;
private int time = 60;
private boolean flag = true;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.android_register);
init();

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;
handler.sendMessage(msg);
}
};

SMSSDK.registerEventHandler(eh);
}



private void init() {
phone = (EditText) findViewById(R.id.phone);
cord = (EditText) findViewById(R.id.cord);
now = (TextView) findViewById(R.id.now);
getCord = (Button) findViewById(R.id.getcord);
saveCord = (Button) findViewById(R.id.savecord);
getCord.setOnClickListener(this);
saveCord.setOnClickListener(this);
}



@Override

public void onClick(View v) {

switch (v.getId()) {
case R.id.getcord:
if(!TextUtils.isEmpty(phone.getText().toString().trim())){
if(phone.getText().toString().trim().length()==11){
iPhone = phone.getText().toString().trim();
SMSSDK.getVerificationCode("86",iPhone);
cord.requestFocus();
getCord.setVisibility(View.GONE);
}else{
Toast.makeText(Activity_Register.this, "请输入完整电话号码", Toast.LENGTH_LONG).show();
phone.requestFocus();
}
}else{
Toast.makeText(Activity_Register.this, "请输入您的电话号码", Toast.LENGTH_LONG).show();
phone.requestFocus();
}
break;

case R.id.savecord:

if(!TextUtils.isEmpty(cord.getText().toString().trim())){
if(cord.getText().toString().trim().length()==4){
iCord = cord.getText().toString().trim();
SMSSDK.submitVerificationCode("86", iPhone, iCord);
flag = false;

}else{
Toast.makeText(Activity_Register.this, "请输入完整验证码", Toast.LENGTH_LONG).show();
cord.requestFocus();
}

}else{
Toast.makeText(Activity_Register.this, "请输入验证码", Toast.LENGTH_LONG).show();
cord.requestFocus();
}
break;
default:

break;
}
}

private void reminderText() {
now.setVisibility(View.VISIBLE);
handlerText.sendEmptyMessageDelayed(1, 1000);
}



Handler handlerText =new Handler(){

public void handleMessage(Message msg) {

if(msg.what==1){

if(time>0){

now.setText("验证码已发送"+time+"秒");

time--;

handlerText.sendEmptyMessageDelayed(1, 1000);

}else{

now.setText("提示信息");

time = 60;

now.setVisibility(View.GONE);

getCord.setVisibility(View.VISIBLE);

}

}else{

cord.setText("");

now.setText("提示信息");

time = 60;

now.setVisibility(View.GONE);

getCord.setVisibility(View.VISIBLE);

}

};

};



}

}
SMSSDK.unregisterAllEventHandler();
super.onDestroy();
protected void onDestroy() {
@Override
};
}
}
}
}
Toast.makeText(Activity_Register.this, resId, Toast.LENGTH_SHORT).show();
if (resId > 0) {
cord.selectAll();
Toast.makeText(Activity_Register.this, "验证码错误", Toast.LENGTH_SHORT).show();
int resId = getStringRes(Activity_Register.this, "smssdk_network_error");
((Throwable) data).printStackTrace();
}else{

phone.requestFocus();

Toast.makeText(Activity_Register.this, "验证码获取失败,请重新获取", Toast.LENGTH_SHORT).show();

getCord.setVisibility(View.VISIBLE);

if(flag){

} else {

}

Toast.makeText(getApplicationContext(), "获取国家列表成功", Toast.LENGTH_SHORT).show();

}else if (event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){//返回支持发送验证码的国家列表

Toast.makeText(getApplicationContext(), "验证码已经发送", Toast.LENGTH_SHORT).show();

reminderText();

} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){//服务器验证码发送成功

handlerText.sendEmptyMessage(2);

startActivity(new Intent(Activity_Register.this,Activity_establish.class));
//跳转页面
Toast.makeText(getApplicationContext(), "验证码校验成功", Toast.LENGTH_SHORT).show();

if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {//提交验证码成功,验证通过

//短信注册成功后,返回MainActivity,然后提示新好友

if (result == SMSSDK.RESULT_COMPLETE) {

Log.e("event", "event="+event);

Object data = msg.obj;

int result = msg.arg2;

int event = msg.arg1;

super.handleMessage(msg);

// TODO Auto-generated method stub

public void handleMessage(Message msg) {

@Override

Handler handler=new Handler(){