지난번에 안드로이드 앱이랑 aws cognito를 연결시킨 앱에 회원가입 기능을 추가하여 구현해보았다.
이번에는 인증 코드를 재전송하는 기능을 구현해보자.
먼저 인증 코드 재전송 버튼을 만들자.
activity_ok.xml은 다음과 같다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".OkActivity"
android:orientation="vertical"
android:gravity="center">
<TextView
android:id="@+id/ok_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="마지막 단계입니다!\n
인증 메일이 아래의 이메일 주소로 전송되었습니다!\n
24시간 이내로 인증을 완료해주세요!"
android:textSize="16dp"
android:textStyle="bold" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center"
android:layout_marginTop="40dp"
>
<TextView
android:id="@+id/signUpUsername2_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="이메일 주소"
android:textSize="16dp"
android:textStyle="bold" />
<TextView
android:id="@+id/signUpUsername2"
android:layout_width="300dp"
android:layout_height="50dp"
android:gravity="center"
android:textStyle="bold"
android:textColor="@color/black"
android:textSize="20dp"
android:text="이메일" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center"
android:layout_marginTop="40dp"
>
<TextView
android:id="@+id/code_name_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="인증 코드"
android:textSize="16dp"
android:textStyle="bold" />
<EditText
android:id="@+id/code_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="text" />
<Button
android:id="@+id/Re_Ok_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="재전송" />
</LinearLayout>
<Button
android:id="@+id/Ok_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:text="확인" />
</LinearLayout>
인증 코드 재전송 버튼을 만들고 UI를 살짝 바꾸었다.
다음은 인증 코드를 재전송할 수 있게 코드를 작성했다.
OkAcitivty에 코드는 다음과 같다.
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.amazonaws.mobile.client.AWSMobileClient;
import com.amazonaws.mobile.client.Callback;
import com.amazonaws.mobile.client.results.SignUpResult;
import com.amazonaws.mobile.client.results.UserCodeDeliveryDetails;
public class OkActivity extends AppCompatActivity {
String TAG = AuthActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ok);
// 인증 확인 버튼
Button Ok_button = findViewById(R.id.Ok_button);
// 인증 재전송 버튼
Button Re_Ok_button = findViewById(R.id.Re_Ok_button);
// SingUpActivity 에서 사용된 username 정보를 가져와 TextView에 넣는다.
TextView TextView = findViewById(R.id.signUpUsername2);
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String username = bundle.getString("email");
TextView.setText(username);
// 인증 버튼
Ok_button.setOnClickListener(new View.OnClickListener() {
// 인증 코드 확인
@Override
public void onClick(View v) {
EditText code_name = findViewById(R.id.code_name);
String code = code_name.getText().toString();
AWSMobileClient.getInstance().confirmSignUp(username, code, new Callback<SignUpResult>() {
@Override
public void onResult(final SignUpResult signUpResult) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d(TAG, "Sign-up callback state: " + signUpResult.getConfirmationState());
if (!signUpResult.getConfirmationState()) {
final UserCodeDeliveryDetails details = signUpResult.getUserCodeDeliveryDetails();
Toast.makeText(getApplicationContext(), "Confirm sign-up with: " + details.getDestination(), Toast.LENGTH_SHORT).show();
} else {
// 회원가입이 완료되면 로그인 창으로 이동
Toast.makeText(getApplicationContext(), "성공적으로 회원가입 되셨습니다.", Toast.LENGTH_SHORT).show();
Intent i = new Intent(OkActivity.this, AuthActivity.class);
startActivity(i);
finish();
}
}
});
}
@Override
public void onError(Exception e) {
Log.e(TAG, "Confirm sign-up error", e);
}
});
}
});
// 인증 코드 재전송 버튼
Re_Ok_button.setOnClickListener(new View.OnClickListener() {
// 인증 코드 재전송
@Override
public void onClick(View v) {
AWSMobileClient.getInstance().resendSignUp(username, new Callback<SignUpResult>() {
@Override
public void onResult(SignUpResult signUpResult) {
Log.i(TAG, "A verification code has been sent via" +
signUpResult.getUserCodeDeliveryDetails().getDeliveryMedium()
+ " at " +
signUpResult.getUserCodeDeliveryDetails().getDestination());
Toast.makeText(getApplicationContext(), "인증 메일이 재전송 되었습니다.", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Exception e) {
Log.e(TAG, String.valueOf(e));
}
});
}
});
}
// 뒤로가기 2번 눌러야 종료
private final long FINISH_INTERVAL_TIME = 1000;
private long backPressedTime = 0;
@Override
public void onBackPressed() {
long tempTime = System.currentTimeMillis();
long intervalTime = tempTime - backPressedTime;
// 뒤로 가기 할 경우 SignActivity 화면으로 이동
if (0 <= intervalTime && FINISH_INTERVAL_TIME >= intervalTime)
{
Intent i = new Intent(OkActivity.this, SignUpActivity.class);
startActivity(i);
finish();
}
else
{
backPressedTime = tempTime;
Toast.makeText(getApplicationContext(), "한번 더 누르면 종료됩니다.", Toast.LENGTH_SHORT).show();
}
}
}
인증코드 재전송 코드를 추가하여 쉽게 재전송 기능을 구현해보았다.
다음에는 비밀번호를 잊어버렸을 때 재설정하는 기능을 구현해보도록 하겠다.
참고
'Develop > Java' 카테고리의 다른 글
[Java] 자바 Android 다이얼로그(Dialog) 구현 (0) | 2021.07.19 |
---|---|
[AWS] 아마존 웹 서비스 Android + Amazon Cognito 비빌번호 재설정 (0) | 2021.07.18 |
[AWS] 아마존 웹 서비스 Android + Amazon Cognito 회원가입 구현 (2) | 2021.07.16 |
[AWS] 아마존 웹 서비스 Android + Amazon Cognito 로그인 구현 (0) | 2021.07.15 |
[AWS] 아마존 웹 서비스 Android + Amazon Cognito 구현 (0) | 2021.07.14 |