안드로이드 카카오 로그인시 화면 깜빡임

min21 - 30 sdk고 v2버전쓰고 있습니다.
카카오 인증을 하고 카카오 토큰으로 커스텀 토큰을 발행하는 방식인데, 카카오 로그인 인증시 아래쪽부터 새창이 떳다가 아래로 내려가는 듯한(깜빡임)현상이 있어요.

안녕하세요~

사용하고 계신 sdk의 정확한 버전과, 현재 구현 중인 로그인 코드 첨부 부탁드리겠습니다

1개의 좋아요

로그아웃하고 다시 로그인 할때 그러더라고요
"com.kakao.sdk:v2-user:2.4.2" 사용중이며,
// 로그인코드(코틀린)
@Suppress(“NAME_SHADOWING”)
class KaKaoLogin {
interface IKLoginResult
{
//var accessToken : String?
fun onKakaoLoginResult(user: User?)
}
var user:User? = null
var accessToken : String? = null
var listener:IKLoginResult? = null

// 로그인 callback 구성
val callback: (OAuthToken?, Throwable?) -> Unit = { token, error ->

    if (error != null) {
        Log.e("TAG", "로그인 실패", error)
        if(listener != null)
            listener!!.onKakaoLoginResult(null)
    }
    else if (token != null)
    {
        Log.i("TAG", "로그인 성공 ${token.accessToken}")

        UserApiClient.instance.me { user, error ->

            if (error != null)
            {
                Log.e("TAG", "사용자 정보 요청 실패", error)
            }
            else if (user != null)
            {
                Log.i("TAG", "사용자 정보 요청 성공" +
                        "\n회원번호: ${user.id}" +
                        "\n이메일: ${user.kakaoAccount?.email}" +
                        "\n닉네임: ${user.kakaoAccount?.profile?.nickname}" +
                        "\n프로필사진: ${user.kakaoAccount?.profile?.thumbnailImageUrl}")

                this.user = user
                if(listener != null) {
                    this.accessToken = token.accessToken
                    listener!!.onKakaoLoginResult(user)
                   // listener!!.accessToken = token.accessToken
                   // Log.e("TAG", "accessToken : " + token.accessToken)
                }
            }
        }
    }
}

fun login(context: Context)
{
    // 카카오톡이 설치되어 있으면 카카오톡으로 로그인, 아니면 카카오계정으로 로그인
    if (UserApiClient.instance.isKakaoTalkLoginAvailable(context)) 
        UserApiClient.instance.loginWithKakaoTalk(context, callback = callback)
    else 
        UserApiClient.instance.loginWithKakaoAccount(context, callback = callback)
}

//로그아웃
fun onLink() {
    UserApiClient.instance.unlink { error ->
        if (error != null) {
            Log.e("TAG", "연결 끊기 실패", error)
        }
        else {
            Log.i("TAG", "연결 끊기 성공. SDK에서 토큰 삭제 됨")

        }
    }
}

companion object {
    @JvmStatic
    val instance by lazy { KaKaoLogin() }
}

}

//카카오 로그인 버튼 호출입니다.
onCreate()
KaKaoLogin.getInstance().setListener(this);

kakaoLoginImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
KaKaoLogin.getInstance().login(LoginActivity.this);
}
});

// 완료된 리스너를 오버라이드해서 JWT토큰으로 로그인을 합니다
@Override // 완료되면 호출되는 메서드
public void onKakaoLoginResult(@Nullable User user) {
progressHandler(false);
Toast.makeText(getApplicationContext(), “로그인중입니다.”, Toast.LENGTH_SHORT).show();
Log.d(TAG, “onKakaoLoginResult”);
Log.d(TAG,user.getId() + ", " +
user.getKakaoAccount().getEmail());
String accessToken = KaKaoLogin.getInstance().getAccessToken();
if (accessToken != null)
Log.d(TAG,accessToken);;
getFirebaseJwt(accessToken,LOGIN_TYPE_KAKAO).continueWithTask(new Continuation<String, Task>() {
@Override
public Task then(@NonNull Task task) throws Exception {
String firebaseToken = task.getResult();
FirebaseAuth auth = FirebaseAuth.getInstance();
return auth.signInWithCustomToken(firebaseToken);
}
}).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
FirebaseMessaging.getInstance().getToken().addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull @NotNull Task task) {
if (!task.isSuccessful()) {
Log.w(TAG, “getInstanceId failed”, task.getException());
return;
}

                        FirebaseUser user = mAuth.getCurrentUser();
                        String frieStoreDocument;
                        if(user.getEmail()!= null){
                            frieStoreDocument = user.getEmail();
                        }else{
                            frieStoreDocument = user.getUid();
                        }
                        String token = task.getResult();
                        Map<String, Object> data = new HashMap<>();
                        data.put("token", token);

                        FirebaseFirestore.getInstance().collection("Tokens")
                                .document(frieStoreDocument)
                                .set(data)
                                .addOnSuccessListener(new OnSuccessListener<Void>() {
                                    @Override
                                    public void onSuccess(Void aVoid) {
                                        progressHandler(true);
                                        Log.d(TAG, "add token to DB Success!");
                                        //updateUI(user);
                                        checkFirstRun(mAuth.getCurrentUser().getUid());
                                        requestFinish();
                                    }
                                })
                                .addOnFailureListener(new OnFailureListener() {
                                    @Override
                                    public void onFailure(@NonNull Exception e) {
                                        Log.d(TAG,"add token to DB failed...");
                                    }
                                });


                    }
                });
            } else {
                progressHandler(true);
                Toast.makeText(getApplicationContext(), "로그인 실패.", Toast.LENGTH_LONG).show();
                if (task.getException() != null) {
                    Log.e(TAG, task.getException().toString());
                }
            }
        }
    });
}

보내주신 코드는 확인해봤는데 정확하게 어떤 현상에 대해서 말씀하시는 것인지 이해하지 못해서 동영상 첨부해주시면 좀 더 이슈 파악하는데 수월할 것 같습니다.

추가로 로그아웃 코드에서 UserApiClient.instance.unlink() 를 호출하고 계신데, 해당 기능은 앱과 사용자 계정을 연결 해제하는 기능으로 일반적으로 기대하는 로그아웃과는 조금 다른 기능입니다.

logout 설명 문서unlink 설명 문서 확인해보시고 코드 수정하시면 좋을 것 같습니다.

KakaoTalk_20210527_115930236.mp4.txt (785.8 KB)

확장자 mp4입니다

동영상 첨부해주셔서 감사합니다.

첨부해주신 동영상에서 보이는 현상은 카카오톡으로 로그인 하기 기능이 실행될 때 로그인하기 위해서 잠깐 카카오톡을 띄우게 되는데, 그 때 발생하는 현상으로 정상적인 동작입니다.

제조사별로 안드로이드OS를 커스텀하기 때문에 특정 디바이스에서는 해당 현상이 발생하지 않을 수 있습니다.

감사합니다.

1개의 좋아요