这次接入主要由收发报文和读取短信构成,收发报文中包含了HmacSHA256的验证
简单粘贴一下用到的代码
读取短信
HuaweiSdkHandler handler = new HuaweiSdkHandler(callback,context,number); smsObsever = new SmsObsever(context,handler,smsNumber); context.getContentResolver().registerContentObserver(SMS_INBOX,true,smsObsever);
class SmsObsever extends ContentObserver { private Context context; private String number = "+27820097640"; private Handler handler; private boolean wasCalled = false; private Uri SMS_INBOX = Uri.parse("content://sms/"); public void getSmsFromPhone() { ContentResolver cr =context.getContentResolver(); String[] projection = new String[] { "body", "address" };//"_id", "address", "person",, "date", "type String where = "date > " + (System.currentTimeMillis() - 2 * 1000);; Cursor cur = cr.query(SMS_INBOX, projection, where, null, "date desc"); if (null == cur) { return; } if (cur.moveToNext()) { String body = cur.getString(cur.getColumnIndex("body")); //这里我是要获取自己短信服务号码中的验证码~~ Pattern pattern = Pattern.compile("[0-9]{6}"); Matcher matcher = pattern.matcher(body); if (matcher.find()) { //存储号码 处理回调 Message message = new Message(); Bundle bundle = new Bundle(); bundle.putString("valid",matcher.group(0)); message.setData(bundle); handler.handleMessage(message); } } } public SmsObsever(Context context,Handler mhandler,String smsNumber) { super(mhandler); number = smsNumber; handler=mhandler; this.context=context; } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); //提取验证码 if(context==null||number==null) return; getSmsFromPhone(); } }
获取校验码
private String getSignture(String Body) { String packetBody = Body; String key = appKey+"&"+appSecrect+"&"+requestID; try { SecretKeySpec signKey = new SecretKeySpec(key.getBytes(),"HmacSHA256"); Mac mac = Mac.getInstance("HmacSHA256"); mac.init(signKey); return "\""+ Base64.encodeToString(mac.doFinal(packetBody.getBytes()),0).trim()+"\""; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } return null; }