주요 내용으로 건너뛰기

[안드로이드] 앱 안에 인증문자 받아오기(2) - 인증번호 저장하기

앱 안에 인증문자 받아오기(1) - 문자 데이터 받아오기

앞의 포스팅에서 문자 데이터를 받아왔다. 이제 받아온 문자데이터에서 인증번호만 쏙 빼오면 된다. 코드를 보기전에 대략적으로 얘기해보자면 정규표현식으로 인증번호의 패턴을 저장해서 그걸 빼오면 된다. 뭔소린지 모르겠으면 코드를 보자.

// 앞의 포스팅을 봤다면 알겠지만, sms는 SMS 본문이 담겨있는
// StringBuilder 객체로 toString메서드로 String객체에 담는다
String smsBody = sms.toString();

// "\\d{6}" : 일반적으로 인증번호는 6자리 숫자로 \\d는 숫자, {6}는 자리수이다
Pattern pattern = Pattern.compile("\\d{6}");

// matcher에 smsBody와 위에서 만든 Pattern 객체를 매치시킨다
Matcher matcher = pattern.matcher(smsBody);

String authNumber = null;

// 패턴과 일치하는 문자열이 있으면 그 첫번째 문자열을 authNumber에 담는다
if (matcher.find()) {
    authNumber = matcher.group(0);
}

자, 이걸로 인증번호만 쏙 뽑아오게 되었다. 물론 인증번호가 6자리 숫자가 아니라면 다른 패턴을 넣어야겠지만 그때는 정규표현식만 바꿔주면 된다. 이제 그 다음에는 인증번호를 자동으로 입력하게 만드는 것이다. 임시로 인증번호가 입력되는 액티비티를 InputNumberActivity, 액티비티 내에 인증번호가 입력될 EditText를 editTextInputNumber라고 하자.

// inputAuthNumber메서드에서 접근해야 하기 때문에 static
private static EditText editTextInputNumber;

// SMSReceiver에서 접근해야하기 때문에 static
public static void inputAuthNumber(String authNumber) {
    
    if (authNumber != null) {
        // editTextInputNumber에 받아온 인증번호를 입력
        editTextInputNumber.setText(authNumber);
    }
}
if (authNumber != null) {
    
    // static 메서드인 inputAuthNumber를 통해 authNumber를 넘긴다
    InputNumberActivity.inputAuthNumber(authNumber);
    
}

InputNumberActivity에서는 인증번호가 입력될 EditText editTextInputNumber와 인증번호를 넘겨받아 editTextInputNumber에 입력해줄 메서드 inputAuthNumber를 각각 static으로 만들어 놓는다. 그리고 SMSReceiver에서는 인증번호가 저장된 String 객체를 위의 메서드로 넘겨주면 끝. 사실은 핸들러 이용해서 해야된다고 생각해서 엄청 삽질했는데 옆에서 보다못한 대표님이 알려주심...ㅋ... 여튼 이러면 된다.

안드로이드 애플리케이션 개발자

구본욱 님의 창작활동을 응원하고 싶으세요?

댓글

SNS 계정으로 간편하게 로그인하고 댓글을 남겨주세요.
#15
[안드로이드] 앱 안에 인증문자 받아오기(1) - 문자 데이터 받아오기
#17
[안드로이드] 다이얼로그 프래그먼트(Dialog Fragment) 사용하기(1) - 커스텀 다이얼로그 만들기