์๋ ํ์ธ์! ์ค๋์ ์ฑ ๊ฐ๋ฐ ๊ณผ์ ์์ 'Sign in with Apple'์ ํตํฉํ๋ฉด์ ์ง๋ฉดํ๋ ํน์ ๋ฌธ์ ์ ๊ทธ ํด๊ฒฐ ๊ณผ์ ์ ๋ํด ๊ณต์ ํ๊ณ ์ ํฉ๋๋ค. ํนํ, Apple ๋ก๊ทธ์ธ ์ ์ฌ์ฉ์์ ์ด๋ฆ์ ์๋์ผ๋ก ์ฑ์ฐ๋ ๊ธฐ๋ฅ ๊ตฌํ๊ณผ ๊ด๋ จ๋ ๋ด์ฉ์ ์ค์ ์ ์ผ๋ก ๋ค๋ฃฐ ์์ ์ ๋๋ค.
๋ฌธ์ ์ํฉ
์ฑ ์ ์ถ ํ, ์ ํ๋ก๋ถํฐ ๋ฐ์ ์ฌ์ฌ ๊ฒฐ๊ณผ์ค ๋ถ์ ๊ฒฉ ์ฌ์ ํ๋๊ฐ ๊ณ์ ๋ฐ๋ณต๋๊ณ ์์์ต๋๋ค.
์ฒ์์ ์ฌ๋ฌ ์ฌ์ฌ ๋ถ์ ๊ฒฉ ์ฌ์ ๊ฐ ์์์ง๋ง, ๋ค๋ฅธ ๋ด์ฉ๋ค์ ๋ฉ๋ชจ์ ์ ์ ํ ์ด์ ๋ฅผ ์ ์ด
ํต๊ณผ๋ ๋์๊ณ ๊ธฐ์ ์ ๋ฌธ์ ๋ ์๋์์ผ๋, ๋ก๊ทธ์ธ ๋์์ธ ๊ฐ์ด๋ ๋ผ์ธ์ด
๊ณ์ ๋ด ๋ฐ๋ชฉ์ ์ก์์ต๋๋ค. ..๐คฃ
Guideline 4.0 - Design
Your app offers Sign in with Apple as a login option but does not follow the design and user experience requirements for Sign in with Apple.
- Specifically your app requires users to provide their name after using Sign in with Apple. This information is already provided by the Authentication Services framework.
Next Steps
Please revise the Sign in with Apple experience in your app to address the issues we identified above.
Please see attached screenshot for details.
์ฐ๋ฆฌ ์ฑ์ 'Sign in with Apple' ๋ก๊ทธ์ธ ์ต์
์ ์ ๊ณตํ๊ณ ์์์ง๋ง, ์ ํ์ ๋์์ธ ๋ฐ ์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์ด๋๋ผ์ธ 4.0์ ์์ ํ ์ค์ํ์ง ๋ชปํ๋ค๋ ์ ์์ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก, ์ฌ์ฉ์๊ฐ Apple๋ก ๋ก๊ทธ์ธํ ํ ์ถ๊ฐ์ ์ผ๋ก ์ด๋ฆ์ ์
๋ ฅํ๋๋ก ์๊ตฌํ๋๋ฐ, ์ด ์ ๋ณด๋ ์ด๋ฏธ Authentication Services ํ๋ ์์ํฌ๋ฅผ ํตํด ์ ๊ณต๋๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก '์ด๋ฆ' ํ๋์ ์ฑ์์ ธ์ผ ํ์ต๋๋ค.
(์ด๋ฏธ ์ด๋ฆ ๊ฐ์ด ์์ผ๋ฉด ์๋์ผ๋ก ์ฑ์์ง๊ฒ ํด๋์ ๊ตฌ๊ธ ๋ก๊ทธ์ธ์์๋ ์ ๋๋๋ฐ ์ ํ ๋ก๊ทธ์ธ์์๋ ์ ์์ฑ์์ง๋ ๊ฑธ๊น.. )
์ ํ ๋ก๊ทธ์ธ์ ์ด๋ฆ ์ ๋ณด๋ฅผ ์ ๊ณตํด์ฃผ๋๋ฐ ์ ๋ ์ ๋ ฅํด์ผํ๋,, ์ด๊ฒ ์ ํ์ ์ ์ฅ!.
๋ก๊ทธ๋ฅผ ์ฐ์ด๋ณด๋ฉด ์ฒ์ ๋ก๊ทธ์ธ ํ ๋๋ appleCredintial์ givenName ๊ณผ familyName๋ง ๋ค์ด์ค๊ณ ํด๋น ๋ด์ฉ์ผ๋ก displayName์ ์
๋ฐ์ดํธ ํ๋ฉด ๋๋๊ฒ์ ์๊ฒ ๋์๋ค. ๊ทธ๋์ ํด๋น ๋ถ๋ถ์ ์ ์ฉ ํ์๋ค.
์๋ ค์ง ํด๊ฒฐ๋ฐฉ๋ฒ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์!!..
์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ํตํด ์ ์ฉ์ ํ ๋ค์ fullName ์ด ์ ์ฉ๋๋๊ฑธ ํ์ธํ์ง๋ง
๊ทธ๋๋ ๊ฐ์ด๋๋ผ์ธ์ ํต๊ณผ๊ฐ ๋์ง ์์์ต๋๋ค.
ํด๋น ํ
์คํธ ๋ฐฉ์์๋ ๋ฌธ์ ๊ฐ ์์๋๋ฐ..
์ฌ๋ฌ ์๋๋ฅผ ํ ๊ฒฐ๊ณผ ์๋ ๋ฌธ์ ์ฌํ์ ํ ์ ์์์ต๋๋ค.
๋ฌธ์ ์ํฉ ์ฌํ
๊ธฐ์กด์ ์ ๊ทผ ๋ฐฉ์์์ ์ฐ๋ฆฌ ์ฑ์ ์ฌ์ฉ์๊ฐ ๊ฐ์
์ ์๋ํ ๋ ์๋์ผ๋ก fullName
์ ๋ณด๋ฅผ ๋ฐ์์ ํ๋ฉด์ ํ์ํ์ต๋๋ค. ์ด ๊ณผ์ ์ด ์ํํ๊ฒ ์งํ๋์ด, ์ฌ์ฌ ๊ณผ์ ์์ ๊ณ์ํด์ ๊ฑฐ์ ๋๋ ์ ํํ ์์ธ์ ํ์
ํ์ง ๋ชปํ์ต๋๋ค. ๊ทธ๋ฌ๋, ์๋ก์ด ์ ํ ID๋ก ๊ฐ์
์ ์๋ํ์ ๋ fullName
์ ๋ณด๊ฐ ์ ๊ณต๋์ง ์๋๋ค๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ด๋ฌํ ๋ฐ๊ฒฌ์ ๋ฐํ์ผ๋ก, ์ฐ๋ฆฌ๋ ์ฌ์ฌ์์ ์ง์ ๋ ๋ฌธ์ ๋ฅผ ์ฌํํ๊ณ ํด๊ฒฐํ๊ธฐ ์ํ ๋ช
ํํ ๊ธฐ์ค์ ์ค์ ํ์ต๋๋ค. ์ด๋ฅผ ์ํด ์๋์ ๊ฐ์ ๊ณผ์ ์ ์งํํ์ต๋๋ค:
- ๊ณ์ ํํด ๋ฐ ๋ฐ์ดํฐ ์ญ์
- ์ฌ์ฉ์๊ฐ ์ ํ ID๋ก ๊ฐ์ ํ ๊ณ์ ์ ํํด์ํค๊ณ , ์ด๋ก ์ธํด ํด๋น ์ฌ์ฉ์์ Firebase ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋์ด ์์คํ ์์ ์์ ํ ์ ๊ฑฐ๋ฉ๋๋ค.
- ์ ํ ๋ก๊ทธ์์ ๋ฐ ์ฌ๋ก๊ทธ์ธ
- ๊ณ์ ์ ํํดํ ์ฌ์ฉ์๋ ์ ํ์์ ๋ก๊ทธ์์ํ ํ, ๋์ผํ ์ ํ ID๋ก ๋ค์ ๋ก๊ทธ์ธ์ ์๋ํฉ๋๋ค. ์ด ๊ณผ์ ์ ํตํด 'Sign in with Apple'์ ํตํ ์๋ก์ด ์ธ์
์ ์์ํ๋ฉฐ, Apple์ ์ฌ์ฉ์์๊ฒ
fullName
์ ๋ณด๋ฅผ ๋ค์ ์ ๊ณตํฉ๋๋ค.
- ๊ณ์ ์ ํํดํ ์ฌ์ฉ์๋ ์ ํ์์ ๋ก๊ทธ์์ํ ํ, ๋์ผํ ์ ํ ID๋ก ๋ค์ ๋ก๊ทธ์ธ์ ์๋ํฉ๋๋ค. ์ด ๊ณผ์ ์ ํตํด 'Sign in with Apple'์ ํตํ ์๋ก์ด ์ธ์
์ ์์ํ๋ฉฐ, Apple์ ์ฌ์ฉ์์๊ฒ
fullName
์ ๋ณด์ ์ ์ฉ ์ฌ๋ถ ํ์ธ- ์ฌ๋ก๊ทธ์ธ ํ, ๊ฐ์
๊ณผ์ ์์
fullName
์ ๋ณด๊ฐ ์ด๋ฆ ๋ฐ ๋๋ค์ ํ๋์ ์ ์ฉ๋๋์ง๋ฅผ ํ์ธํฉ๋๋ค. ๋ฐ๊ฒฌ๋ ๋ฌธ์ ๋,userCredential.user.displayName
์ด ์ ๋ฐ์ดํธ ๋์ด๋ ์ฆ์ ํด๋น ๊ฐ์ ์ฌ์ฉํ ๊ฒฝ์ฐnull
์ด ๋ฐํ๋๋ค๋ ๊ฒ์ด์์ต๋๋ค.
- ์ฌ๋ก๊ทธ์ธ ํ, ๊ฐ์
๊ณผ์ ์์
- ์ฌ๋ก๊ทธ์ธ ํ ๊ฐ์
์๋๋ฆฌ์ค์ ๋ฌธ์
- ์ฌ์ฉ์๊ฐ ์ฌ๋ก๊ทธ์ธ ํ ์ฒซ ๊ฐ์
์ ์ทจ์ํ๊ณ ๊ทธ ๋ค์ ๋ค์ ๊ฐ์
์ ์๋ํ ๊ฒฝ์ฐ, ์ด์ ๋จ๊ณ์์
displayName
์ด ์ด๋ฏธ ์ ๋ฐ์ดํธ๋์ด ์์ด ์ ๋ณด๊ฐ ํ๋ฉด์ ํ์๋ฉ๋๋ค. ๊ทธ๋ฌ๋, ์ด๋ ์ฒซ ๊ฐ์ ์๋ ์fullName
์ ๋ณด๊ฐ ์ ์ ํ ์ ์ฉ๋์ง ์๋๋ค๋ฉด, ์ฌ์ฌ ํต๊ณผ์ ํ์์ ์ธ ์กฐ๊ฑด์ ๋ง์กฑ์ํค์ง ๋ชปํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. (์ด ๋ถ๋ถ์ด ์ฌ์ฌ ์คํจ์ ํต์ฌ ์์ธ...)
- ์ฌ์ฉ์๊ฐ ์ฌ๋ก๊ทธ์ธ ํ ์ฒซ ๊ฐ์
์ ์ทจ์ํ๊ณ ๊ทธ ๋ค์ ๋ค์ ๊ฐ์
์ ์๋ํ ๊ฒฝ์ฐ, ์ด์ ๋จ๊ณ์์
ํด๊ฒฐ ๊ณผ์
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ์ฌ์ฉ์๊ฐ ์ฑ์ ์ฒ์ ๋ก๊ทธ์ธํ ๋๋ fullName
์ ๋ณด๋ฅผ ์ง์ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ ํํ์ต๋๋ค. ์ฆ, ์ฌ์ฉ์์ displayName
์ ์
๋ฐ์ดํธํ๋ ๋์์, ์ด ์
๋ฐ์ดํธ๋ ์ด๋ฆ ์ ๋ณด๋ฅผ ๋ค๋ฅธ ์ฌ์ฉ์ ๋ฑ๋ก ๋๋ ํ์ธ ๋ก์ง์ผ๋ก ์ง์ ์ ๋ฌํ์ต๋๋ค. ์ด๋ ๊ฒ ํ์ฌ ์ฌ์ฉ์๊ฐ ์ฒ์ ๋ก๊ทธ์ธํ ๋ ํ์ํ ์ด๋ฆ ์ ๋ณด๋ฅผ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ ์ ์์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์๊ฐ ์ฑ์ ๋ค์ ๋ก๊ทธ์ธํ ๋๋, Firebase์์ ์
๋ฐ์ดํธ๋ displayName
์ ์ฌ์ฉํ๋๋ก ๊ตฌํํ์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ผ๋ก, ์ฒ์ ๋ก๊ทธ์ธํ๋ ์ฌ์ฉ์์๊ฒ์๋ง ์ ๊ณต๋๋ fullName
์ ๋ณด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๊ณ , ๋์์ Apple์ ๋์์ธ ๊ฐ์ด๋๋ผ์ธ์ ์ค์ํ ์ ์์์ต๋๋ค.
๊ตฌํ ์ฝ๋ ์์
final appleCredential = await SignInWithApple.getAppleIDCredential(
scopes: [
AppleIDAuthorizationScopes.email,
AppleIDAuthorizationScopes.fullName,
],
);
final oauthCredential = OAuthProvider("apple.com").credential(
idToken: appleCredential.identityToken,
accessToken: appleCredential.authorizationCode,
);
UserCredential userCredential =
await FirebaseAuth.instance.signInWithCredential(oauthCredential);
if (userCredential.user?.displayName == null &&
(appleCredential.givenName != null || appleCredential.familyName != null)) {
// ์ฌ์ฉ์ fullName ์์ฑ (์ต์ด ๊ฐ์
์์๋ง ๊ฐ์ ธ์จ๋ค)
final updatedDisplayName = [
appleCredential.familyName ?? '',
appleCredential.givenName ?? '',
].join(' ').trim();
// ์ฌ์ฉ์์ ์ด๋ฆ ์ ๋ณด๋ฅผ ์
๋ฐ์ดํธ
await userCredential.user?.updateDisplayName(updatedDisplayName);
// ์ฌ์ฉ์ ๋ฑ๋ก ๋๋ ํ์ธ ๋ก์ง์ผ๋ก ์
๋ฐ์ดํธ๋ ์ด๋ฆ ์ ๋ณด๋ฅผ ์ง์ ์ ๋ฌ
_proceedWithUserRegistration(userCredential, updatedDisplayName);
} else {
// ๋ค์ ๋ก๊ทธ์ธ ๋๋ ์
๋ฐ์ดํธ๋ displayName ์ฌ์ฉ
_proceedWithUserRegistration(userCredential, userCredential.user?.displayName);
}
๊ฒฐ๋ก
apple ์ฌ์ฌ ์ฝ์ง์๋ค..