package com.example.jaq.changwithyourname;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import com.alibaba.verificationsdk.demo.R;
import com.alibaba.verificationsdk.ui.IActivityCallback;
import com.alibaba.verificationsdk.ui.VerifyActivity;
import com.alibaba.verificationsdk.ui.VerifyType;
import com.alibaba.wireless.security.open.SecurityGuardManager;
import com.alibaba.wireless.security.open.securitybody.ISecurityBodyComponent;
import com.alibaba.wireless.security.open.securitybody.SecurityBodyDefine;
import com.alibaba.wireless.security.open.SecException;
import org.json.JSONObject;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
/**
* A login screen that offers login via email/password.
*/
public class LoginActivity extends AppCompatActivity {
private static final String[] list = new String[]{
"短信", "语音", "划一划", "邮件","摇一摇", "滚一滚"
};
private static final String[] list2 = new String[]{
"划一划", "摇一摇", "滚一滚"
};
private UserLoginTask mAuthTask = null;
// UI references.
private AutoCompleteTextView miplView;
private EditText mphoneView;
private final static String LOG_TAG = "LoginActivity";
private Spinner mySpinner;
private Spinner mySpinnerNoServer;
private String ipAddress;
private int choiseIndex=1,choiseNoServerIndex;
private TextView mStatus;
String mIP,mPhone,mMail;
private SharedPreferences.Editor editor;
SharedPreferences settings;
private String sessionid;
private String mStatusText;
void saveip(String ip)
{
SharedPreferences mySharedPreferences= getSharedPreferences("test",
this.MODE_PRIVATE);
SharedPreferences.Editor editor = mySharedPreferences.edit();
editor.putString("ip", ip);
editor.commit();
}
String getip()
{
SharedPreferences mySharedPreferences= getSharedPreferences("test",
this.MODE_PRIVATE);
return mySharedPreferences.getString("ip","");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
/*初始化无线保镖SDK*******************必选*第一步***************************************************************************************************/
Context context = this.getApplicationContext();
// VerifyActivity.setEnv(VerifyActivity.DAILY);
/*初始化无线保镖SDK***************************************************************************************************************************/
this.mySpinner = (Spinner) findViewById(R.id.way);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
this.mySpinner.setAdapter(adapter);
this.mySpinner.setSelection(0, true);
this.mySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
choiseIndex = arg2+1;
}
public void onNothingSelected(AdapterView<?> arg0) {
}
});
String STORE_NAME = "Settings";
settings = getSharedPreferences(STORE_NAME, MODE_PRIVATE);
editor = settings.edit();
this.mySpinnerNoServer = (Spinner) findViewById(R.id.noserver);
this.mStatus = (TextView) findViewById(R.id.status);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list2);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
this.mySpinnerNoServer.setAdapter(adapter);
this.mySpinnerNoServer.setSelection(-1, true);
this.mySpinnerNoServer.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
choiseNoServerIndex = arg2+1;
}
public void onNothingSelected(AdapterView<?> arg0) {
arg0.setVisibility(View.VISIBLE);
}
});
miplView = (AutoCompleteTextView) findViewById(R.id.email);
miplView.setText(settings.getString("ip",this.getip()));
mphoneView = (EditText) findViewById(R.id.password);
mphoneView.setText(settings.getString("phone",""));
mphoneView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
if (id == R.id.login || id == EditorInfo.IME_NULL) {
return true;
}
return false;
}
});
Button mEmailSignInButton = (Button) findViewById(R.id.email_sign_in_button);
if (mEmailSignInButton != null) {
mEmailSignInButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
String ip = miplView.getText().toString();
ipAddress = ip;
saveip(ip);
editor.putString("ip",ip);
String phone = mphoneView.getText().toString();
editor.putString("phone",phone);
editor.apply();
mMail = getmail();
if(mMail==null)
{
setReturnValue("验证方式不支持");
return;
}
mIP = miplView.getText().toString();
mPhone = mphoneView.getText().toString();
mAuthTask = new UserLoginTask(ip, phone);
mAuthTask.execute((Void) null);
}
});
}
mEmailSignInButton = (Button) findViewById(R.id.risk_check);
if (mEmailSignInButton != null) {
mEmailSignInButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
String ip = miplView.getText().toString();
ipAddress = ip;
saveip(ip);
VerifyType index;
switch (choiseNoServerIndex)
{
case 1:index=VerifyType.NOCAPTCHA;break;
case 2:index=VerifyType.SHAKING;break;
case 3:index=VerifyType.TILTBALL;break;
default: {
setReturnValue("验证方式不支持");
return;
}
}
callSDKDoVerification(index,null);
}
});
}
}
private String readInputStreamToString(HttpURLConnection connection) {
String result = null;
StringBuffer sb = new StringBuffer();
InputStream is = null;
try {
is = new BufferedInputStream(connection.getInputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String inputLine = "";
while ((inputLine = br.readLine()) != null) {
sb.append(inputLine);
}
result = sb.toString();
}
catch (Exception e) {
result = null;
}
finally {
if (is != null) {
try {
is.close();
}
catch (IOException e) {
}
}
}
return result;
}
/*调用风险采集**********第二步******************************************************************************************************/
void onCollectionDone(String token) {
getAuthType(token,
mIP,
mMail,
mPhone);
}
Runnable doJAQVerfificationASync = new Runnable() {
@Override
public void run() {
int timeout = 12;
String token=null;
try {
int flag = SecurityBodyDefine.OPEN_SECURITYBODY_FLAG_FORMAT_GENERAL;
int env = SecurityBodyDefine.OPEN_SECURITYBODY_ENV_ONLINE;
HashMap<String, String> extendParam = null;
ISecurityBodyComponent sbComponent;
sbComponent = SecurityGuardManager
.getInstance(LoginActivity.this.getApplicationContext()).getSecurityBodyComp();
token = sbComponent.getSecurityBodyDataEx(null,
null,
"0335",
extendParam,
flag,
env);
// token = securityVerification.doJAQVerfificationSync(null, timeout);
if (null != token) {
Log.e(LOG_TAG, String.format("spamRegisterImp Result: %s", token));
onCollectionDone(token);
}
} catch (SecException e) {
setReturnValue("com.alibaba.wireless.security.open.SecException"+e.getErrorCode());
}
}
};
/*调用风险采集***********************************************************************************************************************/
/*调用风险识别****************第三步************************************************************************************************/
void getAuthType(String token, String ip, String mail, String phone) {
try {
URL url = new URL("http://" + ip + ":8080/action/wtoken=" + token + "&&mail=" + mail + "&&phone=" + phone);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
String dataString = readInputStreamToString(urlConnection);
JSONObject obj = new JSONObject(dataString);
final String strCaptcha_type=obj.optString("captcha_type");
final String captcha_client_need_info=obj.optString("captcha_client_need_info");
final VerifyType type;
switch (Integer.parseInt(strCaptcha_type))
{
case 1:type = VerifyType.SMS;break;
case 2:type = VerifyType.CALL;break;
case 3:type = VerifyType.NOCAPTCHA;break;
case 5:type = VerifyType.SHAKING;break;
case 6:type = VerifyType.TILTBALL;break;
default:
setReturnValue("不支持");
return;
}
this.runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO: 16/6/30 这里是错的!!!!
callSDKDoVerification(type,captcha_client_need_info);
}
});
} catch (Exception e) {
setReturnValue(e.toString());
}
}
/*****************************************************************************************************************/
/*从服务器做二次验证******第六步*********************************************************************************************************/
Runnable verifySessionIDWithServer = new Runnable() {
@Override
public void run() {
try {
// NSString* formaturl = @"http://%@:8080/action/sessionid=%@";
URL url = new URL("http://" + ipAddress + ":8080/action/sessionid=" + sessionid);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader in = new InputStreamReader(urlConnection.getInputStream());
/**********第七步*********************************获得聚安全的返回值*/
String dataString = readInputStreamToString(urlConnection);
JSONObject obj = new JSONObject(dataString);
int ret = obj.getInt("second_check_result");
setReturnValue(ret == 1 ? "二次验证成功" : "二次验证失败");
} catch (Exception e) {
setReturnValue(mStatusText + "接口异常" + e.toString());
}
}
};
/*****************************************************************************************************************/
void checkWithSessionId() {
try {
Thread.sleep(500);
new Thread(verifySessionIDWithServer).start();
} catch (InterruptedException e) {
}
}
public void onResult(int retInt, Map code) {
switch (retInt) {
case VerifyActivity.VERIFY_SUCC:
Log.e(LOG_TAG, (String) code.get("sessionID"));
sessionid = (String) code.get("sessionID");
setReturnValue("验证通过:" + (String) code.get("sessionID"));
checkWithSessionId();
break;
case VerifyActivity.VERIFY_FAILED:
Log.e(LOG_TAG, (String) code.get("errorCode"));
Log.e(LOG_TAG, (String) (null != code.get("errorMsg") ? code.get("errorMsg") : ""));
VerifyActivity.finishVerifyUI();
setReturnValue((String) (null != code.get("errorMsg") ? code.get("errorMsg") : ""));
break;
}
}
/*风险验证********************第四步***************************************************************************************************/
public void callSDKDoVerification(VerifyType selectedIndex,String data) {
if (data==null) {
//**********************************不进行风险采集情况下的风险验证******************************************************************************************
//
//
//
VerifyActivity.startSimpleVerifyUI(LoginActivity.this, selectedIndex,"0335",null,new IActivityCallback() {
@Override
//返回按钮回调
public void onNotifyBackPressed() {
LoginActivity.this.setReturnValue("操作取消");
}
/*风险验证回调***************第五步********************************************************************************************************/
@Override
public void onResult(int retInt, Map code) {
LoginActivity.this.onResult(retInt, code);
}
});
}else
{
Map<String, String> params = new HashMap<>();
//设置params,目前只需设置 VerifyActivity.APP_DATA
params.put(VerifyActivity.APP_DATA, data);
VerifyActivity.startVerifyUI(LoginActivity.this,params,selectedIndex, "0335",null,new IActivityCallback() {
@Override
//返回按钮回调
public void onNotifyBackPressed() {
LoginActivity.this.setReturnValue("操作取消");
}
/*风险验证回调***************第五步********************************************************************************************************/
@Override
public void onResult(int retInt, Map code) {
LoginActivity.this.onResult(retInt, code);
}
});
}
}
/*风险验证************************************************************************************************************************/
public static final int MSAuthTypeSms=1,
MSAuthTypeCall=2,
MSAuthTypeSlide=3,
MSAuthTypeMail=4,
MSAuthBallShake=5,
MSAuthBallRoll=6;
void setReturnValue(final String sxxx)
{
this.runOnUiThread(new Runnable() {
@Override
public void run() {
mStatusText = sxxx;
mStatus.setText(sxxx);
}
});
}
String getmail()
{
String mail = null;
switch (choiseIndex) {
case MSAuthTypeSms:
mail = "test_sms@test.com";
break;
case MSAuthTypeCall:
mail = "test_phone@test.com";
break;
case MSAuthTypeSlide:
mail = "test_hua@test.com";
break;
case MSAuthBallShake:
mail = "test_shake@test.com";
break;
case MSAuthBallRoll:
mail = "test_gun@test.com";
break;
}
return mail;
}
@Override
public void onStart() {
super.onStart();
}
@Override
public void onStop() {
super.onStop();
}
public class UserLoginTask extends AsyncTask<Void, Void, Boolean> {
private final String mEmail;
private final String mPassword;
UserLoginTask(String email, String password) {
mEmail = email;
mPassword = password;
}
@Override
protected Boolean doInBackground(Void... params) {
try {
// Simulate network access.
Thread.sleep(500);
new Thread(doJAQVerfificationASync).start();
} catch (InterruptedException e) {
return false;
}
return true;
}
@Override
protected void onCancelled() {
mAuthTask = null;
}
}
}
FAQ
关于此文档暂时还没有FAQ