Android 문자 인증 코드 획득 방법

먼저 효과 도 를 보 여 드 리 겠 습 니 다.괜 찮 으 시 면 사고 에 대한 상세 한 설명 을 참고 하 세 요.

안 드 로 이 드 개발 에서 문자 인증 코드 에 대한 디자인 이 끊임없이 등장 하면 서 점점 더 많은 응용 프로그램 들 이 소프트웨어 의 안전성 을 향상 시 키 기 위해 서버 를 통 해 사용자 에 게 인증 코드 를 보 내 는 방식 으로 사용자 의 개인 정보의 안전성 을 보호 하기 시작 했다.사용자 가 등록 할 때의 정보 검증 이 든 사용자 가 비밀 번 호 를 찾 아 달라 고 요청 할 때의 문자 검증 이 든 그들의 작업 원 리 는 대체적으로 일치 합 니 다.프로젝트 의 필요 로 이 분야 에 관 한 지식 을 연 구 했 기 때문에 본 편 은 제 가 여러분 을 이 끌 어 현재 유행 하 는 디자인 방안 을 실현 하 겠 습 니 다.
알다 시 피 문자 인증 은 서버 측 에서 인증 코드 를 생 성하 여 사용자 가 입력 한 핸드폰 에 보 내야 한다.이 과정 은 서버 가 자발적으로 고객 에 게 인증 문 자 를 보 내야 하기 때문에 이것 은 이동 하거나 연 결 된 문자 인 터 페 이 스 를 보 내야 한다.본인 은 아직 학생 단계 에 있 기 때문에 이 인터페이스의 권한 을 얻 지 못 했다.그래서 저 는 인터넷 의 모 바 일 개발 서비스 플랫폼 을 통 해 이 기능 의 실현 을 완 성 했 습 니 다.여기 서 제 가 빌 린 플랫폼 은http://dashboard.mob.com/입 니 다.여러분 들 은 이 플랫폼 이 우리 에 게 모 바 일 응용 을 개발 하 는 데 좋 은 기술 지 도 를 제공 하여 우리 의 개발 주 기 를 크게 단축 시 킬 수 있 습 니 다.잔말 말고 오늘 의 포 인 트 를 시작 하 겠 습 니 다.
정부 에서 우리 에 게 두 가지 디자인 방식 을 제공 했다.첫 번 째 내부 GUI 를 호출 하여 실현 한다.다른 하 나 는 사용자 정의 GUI 를 통 해 이 루어 집 니 다.첫 번 째 방식 에 대해 저 는 더 이상 말 하지 않 겠 습 니 다.공식 문서 가 상세 한 실행 절 차 를 제 공 했 기 때문에 여러분 들 은 위의 절차 에 따라 실현 하면 됩 니 다.어렵 지 않 습 니 다.이번 편 은 사용자 정의 GUI 를 통 해 문자 인증 기능 을 구현 하도록 안내 하 겠 습 니 다.먼저 개발 하기 전에 공식 적 으로 제공 하 는 GUI 없 는 API 를 찾 아 본 다음 에 공식 적 으로 제공 하 는 dome 을 다운로드 하고 이런 일 을 한 후에 우 리 는 우리 의 디자인 을 시작 할 수 있다.
1.demo 의 libs 에 있 는 SMSSDK-1.1.5.jar 와 armeabi 폴 더 를 우리 프로젝트 의 libs 디 렉 터 리 에 복사 합 니 다.이것 은 공식 적 으로 제공 하 는 라 이브 러 리 jar 패키지 입 니 다.
2.AndroidManifest.xml 파일 에 권한 과 성명 Action 을 추가 합 니 다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android_sms"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<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" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.android_sms.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="cn.smssdk.SMSSDKUIShell"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateHidden|adjustResize" />
</application>
</manifest>
3.우리 의 레이아웃 파일 을 설계 합 니 다.

<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"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:text="    "
android:textColor="#00ffaa"
android:textSize="20dp" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView2"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:text="   :" />
<EditText
android:id="@+id/phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView1"
android:layout_alignBottom="@+id/textView1"
android:layout_toRightOf="@+id/textView1"
android:maxLength="11"
android:ems="11"
android:inputType="phone" >
<requestFocus />
</EditText>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_marginTop="40dp"
android:layout_below="@+id/phone"
android:text="   :"/>
<EditText
android:id="@+id/cord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_alignBaseline="@+id/textView3"
android:layout_alignBottom="@+id/textView3"
android:layout_alignLeft="@+id/phone"
android:ems="4"
android:maxLength="4"
android:inputType="phone" />
<Button
android:id="@+id/getcord"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/cord"
android:layout_marginLeft="20dp"
android:layout_marginTop="10dp"
android:layout_toRightOf="@+id/cord"
android:visibility="visible"
android:text="     " />
<Button
android:id="@+id/savecord"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/cord"
android:layout_margin="20dp"
android:text="  " />
<TextView
android:id="@+id/now"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/savecord"
android:layout_toRightOf="@+id/cord"
android:gravity="center_horizontal"
android:visibility="gone"
android:text="    "
android:textColor="#aaaaaa" />
</RelativeLayout>
4.우리 의 MainActivity:

/**
*    GUI    
* @time: 2015 7 4 
*/
public class MainActivity extends Activity implements 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(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
init();
     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;
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(MainActivity.this, "         ", Toast.LENGTH_LONG).show();
phone.requestFocus();
}
}else{
Toast.makeText(MainActivity.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(MainActivity.this, "        ", Toast.LENGTH_LONG).show();
cord.requestFocus();
}
}else{
Toast.makeText(MainActivity.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);
}
};
};
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();
handlerText.sendEmptyMessage(2);
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){//          
reminderText();
Toast.makeText(getApplicationContext(), "       ", Toast.LENGTH_SHORT).show();
}else if (event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){//              
Toast.makeText(getApplicationContext(), "        ", Toast.LENGTH_SHORT).show();
}
} else {
if(flag){
getCord.setVisibility(View.VISIBLE);
Toast.makeText(MainActivity.this, "       ,     ", Toast.LENGTH_SHORT).show();
phone.requestFocus();
}else{
((Throwable) data).printStackTrace();
int resId = getStringRes(MainActivity.this, "smssdk_network_error");
Toast.makeText(MainActivity.this, "     ", Toast.LENGTH_SHORT).show();
cord.selectAll();
if (resId > 0) {
Toast.makeText(MainActivity.this, resId, Toast.LENGTH_SHORT).show();
}
}
}
}
};
@Override
protected void onDestroy() {
super.onDestroy();
SMSSDK.unregisterAllEventHandler();
}
}
주:앱 키 와 앱 시 크 릿:http://dashboard.mob.com/계 정 을 등록 한 후 문자 메 시 지 를 보 내 는 앱 을 만 들 면 시스템 이 자동 으로 앱 키 와 앱 시 크 릿 을 생 성 합 니 다.
handlerText 는 서버 에서 인증 코드 를 보 낸 후 사용자 에 게 주 의 를 환기 시 키 기 위해 사용자 정의 디자인 의 Handker 대상 입 니 다.
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 안 드 로 이 드 가 문자 인증 코드 를 얻 는 실현 방법 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.소 편 은 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기