Develop/Java

[AWS] 아마존 웹 서비스 Android + Amazon Cognito 에러 메시지

JunJangE 2021. 7. 21. 12:10

지난번에 안드로이드 앱이랑 aws cognito를 연결시킨 앱에 비밀번호 재설정 기능을 추가하여 구현해보았다.

 

[AWS] 아마존 웹 서비스 Android + Amazon Cognito 비빌번호 재설정

지난번에 안드로이드 앱이랑 aws cognito를 연결시킨 앱에 인증코드 재전송 기능을 추가하여 구현해보았다. [AWS] 아마존 웹 서비스 Android + Amazon Cognito 인증코드 재전송 지난번에 안드로이드 앱이랑

fre2-dom.tistory.com

이번에는 회원가입 로그인 시 에러 메시지 기능을 추가해보려고 한다.우리가 실제로 회원가입이나 로그인을 할 때 에러 메시지가 나오는 것을 확인할 수 있다.간단하게라도 토스트 메시지로 에러 메시지가 나오게끔 해보자.코드는 AuthActivity에서 로그인 함수에 대한 코드이다.

    // 로그인 함수
    private void showSignIn() {

        // 아이디 비밀번호 순
        EditText login_id = findViewById(R.id.login_id);
        EditText login_paw = findViewById(R.id.login_paw);

        String username = login_id.getText().toString();
        String password = login_paw.getText().toString();


        AWSMobileClient.getInstance().signIn(username, password, null, new Callback<SignInResult>() {
            @Override
            public void onResult(final SignInResult signInResult) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Log.d(TAG, "Sign-in callback state: " + signInResult.getSignInState());
                        switch (signInResult.getSignInState()) {
                            case DONE:
                                Toast.makeText(getApplicationContext(), "환영합니다!", Toast.LENGTH_SHORT).show();
                                Intent i = new Intent(AuthActivity.this, MainActivity.class);
                                startActivity(i);
                                finish();
                                break;
                            case SMS_MFA:
                                Toast.makeText(getApplicationContext(), "Please confirm sign-in with SMS.", Toast.LENGTH_SHORT).show();
                                break;
                            case NEW_PASSWORD_REQUIRED:
                                Toast.makeText(getApplicationContext(), "Please confirm sign-in with new password.", Toast.LENGTH_SHORT).show();
                                break;
                            default:
                                Toast.makeText(getApplicationContext(), "Unsupported sign-in confirmation: " + signInResult.getSignInState(), Toast.LENGTH_SHORT).show();
                                break;
                        }

                    }
                });
            }


            @Override
            public void onError(Exception e) {

                Log.e(TAG, "Sign-in error : " + e.getMessage());

                if (e.getMessage().contains("Missing required parameter USERNAME")) {


                    errorMessage("아이디와 비밀번호를 입력해주세요.");

                } else if (e.getMessage().contains("Incorrect username or password.")) {
                    errorMessage("아이디와 비밀번호가 일치하지 않습니다.");

                } else if (e.getMessage().contains("User does not exist.")) {
                    errorMessage("존재하지 않는 아이디입니다.");

                } else if (e.getMessage().contains("Unable to execute HTTP request")) {

                    errorMessage("네트워크가 원활하지 않습니다.\n네트워크 연결 상태를 확인하세요.");

                } else if (e.getMessage().contains("User is not confirmed.")) {


                    // 다이어로그 생성
                    Handler mHandler = new Handler(Looper.getMainLooper());
                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            AlertDialog.Builder ad = new AlertDialog.Builder(AuthActivity.this);
                            ad.setIcon(R.mipmap.ic_launcher);
                            ad.setTitle("인증 코드 미승인");
                            ad.setMessage("인증 코드를 승인하지 않았습니다.\n인증 코드를 승인하러 가시겠습니까?");

                            // 확인버튼
                            ad.setPositiveButton("확인", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {

                                    // 이메일에 문제가 없으면 인증 코드 창으로 이동
                                    Intent i = new Intent(AuthActivity.this, OkActivity.class);
                                    i.putExtra("email",username); // username을 인증 코드 창에서 사용하기 위해
                                    startActivity(i);
                                    finish();
                                    dialog.dismiss();
                                }
                            });

                            // 취소버튼
                            ad.setNegativeButton("취소", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    dialog.dismiss();
                                }
                            });
                            ad.show();
                        }
                    });

                }
            }
        });
    }

아이디와 비밀번호 관련해서 에러 메시지가 나오고 이메일 인증이 되지 않은 아이디일 경우 다이어로그가 생성되여 이메일 인증을 할 수 있게 도와준다. 

다음으로 메시지 함수를 만든다.

코드는 다음과 같다.

    // 에러 메시지
    public void errorMessage(String message){
        Handler mHandler = new Handler(Looper.getMainLooper());
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
            }
        });
    }

위 코드를 모드 작성했다면 실행시켜 다음 결과 영상과 같이 나오는지 확인한다.

<결과 영상>

다른 액티비티에서도 에러 메시지가 생기는데 관련 모든 코드는 깃 허브에서 확인할 수 있다.

github

 

GitHub - junjange/aws-Learning: aws 학습

aws 학습. Contribute to junjange/aws-Learning development by creating an account on GitHub.

github.com