您的位置:首页 > 其它

集成Mob第三方的短信验证码功能

2017-12-26 08:40 302 查看
本博客集成了第三方的短信验证码验证功能,说一下步骤吧

首先去官网注册一个账号,然后登陆,创建一个应用

Mob官网



刚开始创建的应用是没有短信验证的功能的,需要我们手动添加这个功能,看图,这里有个Appkey和App Secret一会要使用到的



箭头指向的地方需要自己点击+号,把短信验证的功能添加到你创建的应用,如果想添加其他的都可以添加,反正添加了也不会用。

添加成功之后点击左边的SMSSDK有个下拉框,里面有说明,短信设置之类的



功能添加完了之后集成了,去官网下载SDK



这里有个问题,就是现在这个官网从3.1.0版本开始,不再提供独立的Android Studio版本下载,推荐AS版开发者按照最新的maven集成方式进行在线下载安装。

意思就是使用Gradle方式集成,下载SDK的时候会有个提示的



没写明白,我也是问客服才明白,一个在Model的Gradle,一个在Project的Gradle

下面是Project的Gradle的配置

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

repositories {
google()
jcenter()
}
repositories {
maven {
url "http://mvn.mob.com/android"
}
}

dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
classpath "com.mob.sdk:MobSDK:+"

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
google()
jcenter()
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}
再然后就是Model的Gradle配置了

apply plugin: 'com.android.application'
apply plugin: "com.mob.sdk"
android {
compileSdkVersion 26
defaultConfig {
applicationId "jc.com.mobsdk"
minSdkVersion 19
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
MobSDK {
//写你创建应用的appkey和appsecret
appKey "233d09e62563c"
appSecret "f79eed1d1ec1b5644464a2a998b482c1"
SMSSDK {}
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}


然后等graldle完就集成完毕了

下面就写了一个小例子,测试一下。上代码

<?xml version="1.0" encoding="utf-8"?>
<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">

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_alignParentStart="true"
android:layout_toStartOf="@+id/button"/>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取验证码"
android:id="@+id/button"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"/>

<Button
android:layout_width="wrap_content"

4000
android:layout_height="wrap_content"
android:text="点击验证"
android:id="@+id/button2"
android:layout_below="@+id/button"
android:layout_alignStart="@+id/button"/>

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText2"
android:layout_below="@+id/editText"
android:layout_alignParentStart="true"
android:layout_alignEnd="@+id/editText"/>

</RelativeLayout>

package jc.com.mobsdk;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
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 org.json.JSONObject;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;

import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;
import cn.smssdk.utils.SMSLog;
import jc.com.mobsdk.R;

public class MainActivity extends AppCompatActivity {
private Button btn1, btn2;
private EditText edt1, edt2;
private String phone;

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

btn1 = (Button) findViewById(R.id.button);
btn2 = (Button) findViewById(R.id.button2);
edt1 = (EditText) findViewById(R.id.editText);
edt2 = (EditText) findViewById(R.id.editText2);

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

};
SMSSDK.registerEventHandler(eh);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//                Toast.makeText(getApplicationContext(), "123", Toast.LENGTH_SHORT).show();
//SMSSDK.getVerificationCode("1", "4432487596");
SMSSDK.getVerificationCode("86", edt1.getText().toString());
phone = edt1.getText().toString();
}
});

btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SMSSDK.submitVerificationCode("86", phone, edt2.getText().toString());
}
});
}

Handler mHandler = new Handler() {
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) {
System.out.println("--------result" + event);
//短信注册成功后,返回MainActivity,然后提示新好友
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {//提交验证码成功
Toast.makeText(getApplicationContext(), "提交验证码成功", Toast.LENGTH_SHORT).show();
startActivity(new Intent(MainActivity.this, HomeActivity.class));
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
//已经验证
Toast.makeText(getApplicationContext(), "验证码已经发送", Toast.LENGTH_SHORT).show();
} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
//已经验证
Toast.makeText(getApplicationContext(), "获取国家列表成功", Toast.LENGTH_SHORT).show();
//                    textV.setText(data.toString());
}

} else {
//				((Throwable) data).printStackTrace();
//				Toast.makeText(MainActivity.this, "验证码错误", Toast.LENGTH_SHORT).show();
//					Toast.makeText(MainActivity.this, "123", Toast.LENGTH_SHORT).show();
int status = 0;
try {
((Throwable) data).printStackTrace();
Throwable throwable = (Throwable) data;

JSONObject object = new JSONObject(throwable.getMessage());
String des = object.optString("detail");
status = object.optInt("status");
if (!TextUtils.isEmpty(des)) {
Toast.makeText(MainActivity.this, des, Toast.LENGTH_SHORT).show();
return;
}
} catch (Exception e) {
SMSLog.getInstance().w(e);
}
}
}
};

//将资源的图片保存到本地图片
public static void savePic(Context context) {
File pic = new File("/sdcard/logo_bluetooth.png");
if (!pic.exists()) {
try {
//把资源文件转成bitmap
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);

//再转成字节数组
ByteArrayOutputStream out = new ByteArrayOutputStream();
int i = 100;
bitmap.compress(Bitmap.CompressFormat.PNG, i, out);
byte[] array = out.toByteArray();

//最后通过流在保存
FileOutputStream fos = new FileOutputStream(pic);
fos.write(array);
fos.close();
} catch (FileNotFoundException e) {
// TODO: handle exception
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();

}

}
}

protected void onDestroy() {
super.onDestroy();
SMSSDK.unregisterAllEventHandler();
}

;

}
效果如下



然后点击验证,如果验证码正确就会跳转到新的页面



这样就算集成成功啦。忘了一件事,需要在清单文件配置一下,要不然报错

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="jc.com.mobsdk">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.GET_TASKS" />

<application
android:name="com.mob.MobApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.mob.tools.MobUIShell"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity android:name=".HomeActivity"></activity>
</application>

</manifest>



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: