본문으로 건너뛰기

react native google signin에서 재로그인시 signin이 이미 진행중이라는 오류

Android 기기에서 패키지가 제공하는 기본 모듈 버튼이 아니라, 커스텀 버튼에 signIn을 이용할 경우, 재로그인이 안되는 현상이 발생했다.

Warning: previous promise did not settle and was overwritten. You've called "signIn" while "signIn" was already in progress and has not completed yet.

에러코드는 아래와 같다.

ErrorCode: ASYNC_OP_IN_PROGRESS, 12502

원인

몇십분동안 패키지도 뜯어본 결과, 이 부분에서 promise가 존재하기 떄문에 exception이 발생한 문제였다.

public boolean setPromiseWithInProgressCheck(Promise promise, String fromCallsite) { 
if (this.promise != null) { rejectWithAsyncOperationStillInProgress(promise, fromCallsite);
return false;
}
this.promise = promise;
nameOfCallInProgress = fromCallsite;
return true;
}

Native module의 GoogleSigninButton은 EventEmitter로 이벤트로 onPress를 처리할 때 까지 시간이 있는데, 직접 구현할 때는 바로 실행하기 때문에 발생한 문제로 추정된다.

해결

GoogleSignin.configure({
webClientId:
'your_web_client_id',
});

await GoogleSignin.hasPlayServices({
showPlayServicesUpdateDialog: true,
});

// add this line
await new Promise((resolve) => setTimeout(resolve, 100));

const response = await GoogleSignin.signIn();
// ...

따라서 js단에서 promise를 통해 약간의 delay를 시켜줘서 문제를 해결했다.