기억 저장소

클라우드 기반 인공지능 개발과 DevOps 실무

프론트엔드/안드로이드 스튜디오

안드로이드 스튜디오 : 토큰 가져오기

하늘.98 2022. 3. 14. 15:32

로그인이나 인증 한 상태에서 이용을 할 수 있게 나누는 것은 토큰이다.

토큰을 통해 인증 및 로그인 한 상태인지 알 수 있다 . 

 

작성자는 레트로 핏을 통해 토큰을 가져왔다! 

 

아래는 로그인 을 하는 코드 이다. 

Button btnDone = findViewById(R.id.btnDone);

btnDone.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // 1. 이메일과 비번을 가져온다
        String email = editEmail.getText().toString().trim();
        String password = editPasswd.getText().toString().trim();
        // 2. 이메일이 정상적인지 확인한다.
        if(email.isEmpty()){
            Toast.makeText(LoginActivity.this, "이메일이 올바르지 않습니다.",
                    Toast.LENGTH_SHORT).show();
            return;
        }
        // 3. 비밀번호 갯수가 정상적인지 확인한다.
        if(password.isEmpty() || password.length() < 4 ||
                password.length() > 12){
            Toast.makeText(LoginActivity.this, "비밀번호 길이가 맞지 않습니다.",
                    Toast.LENGTH_SHORT).show();
            return;
        }

        showProgress("로그인 중입니다...");
        // 4. 네트워크 통해서 API 호출한다.
        Retrofit retrofit = NetworkClient.getRetrofitClient(LoginActivity.this);
        UserApi api = retrofit.create(UserApi.class);

        // 바디에 데이터 담아서 보낸다.
        UserReq userReq = new UserReq(email, password);
        Call<UserRes> call = api.userLogin(userReq);
        call.enqueue(new Callback<UserRes>() {
            @Override
            public void onResponse(Call<UserRes> call, Response<UserRes> response) {
                Log.i("MyMemoApp", ""+response.code());

                dismissProgress();

                // 5. 호출 결과를 보고, 처리해줄 코드를 작성한다.
                if(response.isSuccessful()){
                    // 1. accessToken을 저장하고,
                    SharedPreferences sp = getSharedPreferences(Utils.PREFERENCES_NAME, MODE_PRIVATE);

                    String accessToken = response.body().getAccess_token();

                    SharedPreferences.Editor editor = sp.edit();
                    editor.putString("accessToken", accessToken);
                    editor.apply();

                    // 2. 메인액티비티를 띄운다.
                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                    startActivity(intent);
                    finish();
                }else{

                }
            }
            @Override
            public void onFailure(Call<UserRes> call, Throwable t) {
                dismissProgress();
            }

        });

 

아래는 받아온 토큰을 사용하는 방법이다. 

토큰이 있는 경우와 없는 경우 다른  xml로 보여주는 코드이다. 

 

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        SharedPreferences sp = getSharedPreferences(Utils.PREFERENCES_NAME, MODE_PRIVATE);
        accessToken = sp.getString("accessToken", "");

        if(accessToken.isEmpty()){
            // 로그인 액티비티를 띄운다.
            Intent intent = new Intent(MainActivity.this, LoginActivity.class);
            startActivity(intent);
            finish();
        }else{
            Intent intent = new Intent(MainActivity.this, SelectActivity.class);
            startActivity(intent);
            finish();
        }

    }
});

// 저장소 정보
public static final String PREFERENCES_NAME = "자신의 저장소 적기";