2020년 4월부터 앱스토어 정책 상, 소셜로그인 기능이 들어가는 경우, 아이폰은 반드시 apple 연동 로그인 기능이 포함되어야 함
...
import appleAuth, {
AppleButton,
} from '@invertase/react-native-apple-authentication';
import jwt_decode from 'jwt-decode';
...
const signInWithApple = async () => {
// performs login request
const appleAuthRequestResponse = await appleAuth.performRequest({
requestedOperation: appleAuth.Operation.LOGIN,
requestedScopes: [appleAuth.Scope.EMAIL, appleAuth.Scope.FULL_NAME],
});
const { email, email_verified, is_private_email, sub } = jwt_decode(
appleAuthRequestResponse.identityToken,
);
// get current authentication state for user
// /!\ This method must be tested on a real device. On the iOS simulator it always throws an error.
const credentialState = await appleAuth.getCredentialStateForUser(
appleAuthRequestResponse.user,
);
// use credentialState response to ensure the user is authenticated
if (credentialState === appleAuth.State.AUTHORIZED) {
// user is authenticated
setResult(`
email: ${email}
email_verified: ${email_verified}
is_private_email: ${is_private_email}
sub: ${sub}`);
}
};
...
<AppleButton
buttonStyle={AppleButton.Style.BLACK}
buttonType={AppleButton.Type.SIGN_IN}
style={{
width: 350, // You must specify a width
height: 45, // You must specify a height
}}
onPress={signInWithApple}
/>
로그아웃 기능은 함수가 있긴 하나, 애플도 이 함수를 사용하지 않고, 로그아웃 하고자 하는 경우에는 전달받은 사용자 정보를 clear하는 방식을 recommand하고 있음