第三方短信验证
来源:互联网 发布:淘宝被骗了钱投诉电话 编辑:程序博客网 时间:2024/04/28 18:47
这个是基于eclipse写的一个ShareSDK的短信验证
不说太多直接上代码了,里面的注释清晰
这是Activity
import java.io.ByteArrayOutputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.nio.charset.Charset;import java.security.SecureRandom;import java.security.cert.X509Certificate;import java.util.HashMap;import javax.net.ssl.HostnameVerifier;import javax.net.ssl.HttpsURLConnection;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSession;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;import rx.Observable;import rx.Subscriber;import rx.schedulers.Schedulers;import android.annotation.SuppressLint;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import cn.smssdk.EventHandler;import cn.smssdk.SMSSDK;import cn.smssdk.gui.RegisterPage;public class MainActivity extends ActionBarActivity implements OnClickListener { //sharesdk创建应用时给的两个参数,用自己的APP_KEY和APP_SECRET private static final String APP_KEY = "XXXXXXXXXXX"; private static final String APP_SECRET = "XXXXXXXXXXX"; private EventHandler eh; private EditText et_phone, et_code; private Button bt_send, bt_check_code; private String phone, code; Observable<String> myObservable; Subscriber<String> mySubscribe; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initListener(); doWork(); sdkCallback(); } private void initListener() { bt_send.setOnClickListener(this); bt_check_code.setOnClickListener(this); } private void initView() { // TODO Auto-generated method stub et_phone = (EditText) findViewById(R.id.et_phone); et_code = (EditText) findViewById(R.id.et_code); bt_send = (Button) findViewById(R.id.bt_send); bt_check_code = (Button) findViewById(R.id.bt_check_code); } @Override public void onClick(View view) { // TODO Auto-generated method stub phone = et_phone.getText().toString().trim(); code = et_code.getText().toString().trim(); switch (view.getId()) { case R.id.bt_send:// 获取短信验证 SMSSDK.getVerificationCode("86", phone); break; case R.id.bt_check_code:// 把短信里的验证码提交到服务器 // SMSSDK.submitVerificationCode("86", phone, code); RxJavaMethod2(); break; default: break; } } /** * 请求网络要开一个新线程 * 利用RxJava进行异步访问网络 * 看不懂的就自行去补习一下 */ public void RxJavaMethod2() { myObservable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> sub) { sub.onNext("这是一个简单的rxjava例子"); sub.onCompleted(); } }); // 如果没有发生异常就会先执行onNext,再执行onCompleted,只要有异常就会调用onError mySubscribe = new Subscriber<String>() { //操作 @Override public void onNext(String s) { //返回信息 String result = requestData( "https://webapi.sms.mob.com/sms/verify", "appkey=" + APP_KEY + "&phone=" + phone + "&zone=86&code=" + code); // 参考返回码:http://wiki.mob.com/android-api-错误码参考/ //这个是验证成功时返回的 ---- {status:200} System.out.println("result=" + result);//打印 返回信息 System.out.println("RxJavaMethod--------onNext"); } //操作完成 @Override public void onCompleted() { System.out.println("RxJavaMethod--------onCompleted"); } //出错调用 @Override public void onError(Throwable e) { System.out.println("RxJavaMethod--------onError"); } }; myObservable.subscribeOn(Schedulers.io()) .observeOn(Schedulers.newThread()).subscribe(mySubscribe); } /** * 初始化sdk */ public void doWork() { SMSSDK.initSDK(this, APP_KEY, APP_SECRET);// sdkUI(); } /** * 这个是sdk提供的ui */ public void sdkUI() { RegisterPage page = new RegisterPage();// 这个是sdk自带的ui page.setRegisterCallback(new EventHandler() { @Override public void afterEvent(int event, int result, Object data) { if (result == SMSSDK.RESULT_COMPLETE) { HashMap<String, Object> phoneMap = (HashMap<String, Object>) data; String country = (String) phoneMap.get("country"); String phone = (String) phoneMap.get("phone"); // 提交用户信息,这个方法是获取了手机后,你想采取的操作。 // registerUser(country, phone); System.out.println(country + phone); } } }); page.show(this); } /** * 提交的回调 */ public void sdkCallback() { eh = new EventHandler() { @Override public void afterEvent(int event, int result, Object data) { if (result == SMSSDK.RESULT_COMPLETE) { // 回调完成 if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) { // 提交验证码成功 System.out.println("成功!" + data); } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) { // 获取验证码成功 System.out.println("获取验证码成功" + data); } else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) { // 返回支持发送验证码的国家列表 System.out.println("支持发送国家列表" + data); } } else { ((Throwable) data).printStackTrace(); } } }; SMSSDK.registerEventHandler(eh); // 注册短信回调 } /** * 短信服务器端验证 发起https 请求 * * @param address * @param m * @return */ @SuppressLint("NewApi") public static String requestData(String address, String params) { System.out.println("params=" + params); HttpURLConnection conn = null; try { // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServerTrusted(X509Certificate[] certs, String authType) { } } }; // Install the all-trusting trust manager SSLContext sc = SSLContext.getInstance("TLS"); sc.init(null, trustAllCerts, new SecureRandom()); // ip host verify HostnameVerifier hv = new HostnameVerifier() { public boolean verify(String urlHostName, SSLSession session) { return urlHostName.equals(session.getPeerHost()); } }; // set ip host verify HttpsURLConnection.setDefaultHostnameVerifier(hv); HttpsURLConnection .setDefaultSSLSocketFactory(sc.getSocketFactory()); URL url = new URL(address); conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST");// POST conn.setConnectTimeout(3000); conn.setReadTimeout(3000); // set params ;post params if (params != null) { conn.setDoOutput(true); DataOutputStream out = new DataOutputStream( conn.getOutputStream()); out.write(params.getBytes(Charset.forName("UTF-8"))); out.flush(); out.close(); } conn.connect(); // 获取返回信息 if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { InputStream in = conn.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int len = -1; byte[] buffer = new byte[1024]; try { while ((len = in.read(buffer)) != -1) { baos.write(buffer, 0, len); } baos.close(); baos.close(); } catch (IOException e) { e.printStackTrace(); } return new String(baos.toByteArray(), "UTF-8"); // String result = parsRtn(conn.getInputStream()); // return result; } else { System.out.println(conn.getResponseCode() + " " + conn.getResponseMessage()); } } catch (Exception e) { e.printStackTrace(); } finally { if (conn != null) conn.disconnect(); } return null; } /** * 这个是抽取出来的方法,返回请求的参数 * * @param in * @return */ public static String parsRtn(InputStream in) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); int len = -1; byte[] buffer = new byte[1024]; try { while ((len = in.read(buffer)) != -1) { baos.write(buffer, 0, len); } in.close(); baos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return new String(baos.toByteArray()); } //在activity销毁时解绑 @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); //解绑 SMSSDK.unregisterEventHandler(eh); } //下面的不用管 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }}
接着布局文件:
<LinearLayout 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:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <EditText android:id="@+id/et_phone" android:layout_width="0dp" android:layout_height="wrap_content" android:inputType="phone" android:layout_weight="1" android:padding="10dp"/> <Button android:id="@+id/bt_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="发送"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <EditText android:id="@+id/et_code" android:layout_width="0dp" android:layout_height="wrap_content" android:inputType="phone" android:layout_weight="1" android:padding="10dp"/> <Button android:id="@+id/bt_check_code" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="验证"/> </LinearLayout></LinearLayout>
最后注意要给权限:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sms" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".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> <!-- 这个是sdk提供的一个界面的activity,现在不用!不过你可以用要在相应的MainActivity改变一下, 用sdk提供和自定义的代码已经写好测试过了 --> <activity android:name="com.mob.tools.MobUIShell" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:windowSoftInputMode="stateHidden|adjustResize" /> </application> <!-- 所需的权限 --> <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" /></manifest>
不好意思,源码已经显示上传成功了,不过找不到!没法给源码了,上面的已经是全部代码了,有空再试一下,成功再贴上!如果上面那里有不对的地方,请大家指出!
0 0
- 第三方短信验证
- 第三方短信验证
- 第三方的短信验证
- 第三方发送短信验证
- 使用第三方的短信验证码
- MOB第三方短信验证码
- 集成第三方sdk验证短信校验
- MOB第三方短信验证码
- 关于短信验证和第三方分享
- java第三方获取短信验证码
- Android studio 2.1 集成第三方短信验证类库
- Android studio 2.1 集成第三方短信验证类库
- iOS-使用第三方实现短信验证码功能
- Android之使用第三方的短信验证
- 第三方登陆,分享以及短信验证码
- Android之Mob第三方短信验证服务
- 短信验证码&分享&第三方登录&推送
- JAVA利用第三方平台发送短信验证码
- Django 笔记 user 注册 登录 及 权限
- AAC音频码流解析
- Android开发:仿微信 录音声波
- iOS开发-基于原生JS与OC方法互相调用并传值(附HTML代码)
- iOS实现背景的渐变色
- 第三方短信验证
- [kuangbin带你飞]专题六 最小生成树 H
- 矛盾律、排中律和二值原则
- iOS 修改UIProgressView的高度,自定义UIProgressView
- hive 分析函数缺陷
- 161020
- Flash卡的技术入门
- hduoj1548 对剪枝的理解
- STM32M3_GPIO寄存器&GPIO工作方式