지난번에 안드로이드 앱이랑 aws cognito를 연결시킨 앱에 비밀번호 재설정 기능을 추가하여 구현해보았다.
이번에는 회원가입 로그인 시 에러 메시지 기능을 추가해보려고 한다.우리가 실제로 회원가입이나 로그인을 할 때 에러 메시지가 나오는 것을 확인할 수 있다.간단하게라도 토스트 메시지로 에러 메시지가 나오게끔 해보자.코드는 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
'Develop > Java' 카테고리의 다른 글
[Java] 자바 Android 액티비티나 서비스에서 다른 서비스 종료시키기 (0) | 2021.08.05 |
---|---|
[Java] 자바 Android UsageStatsManage를 통해 현재 실행중인 앱 확인 (1) | 2021.07.22 |
[Java] 자바 Android 다이얼로그(Dialog) 구현 (0) | 2021.07.19 |
[AWS] 아마존 웹 서비스 Android + Amazon Cognito 비빌번호 재설정 (0) | 2021.07.18 |
[AWS] 아마존 웹 서비스 Android + Amazon Cognito 인증코드 재전송 (0) | 2021.07.17 |