๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

์• ํ”Œ (apple)

๐Ÿ”” ์ตœ์‹ ํ™” ์ผ์ž: 2025-02-10

  • Static Badge

๊ฐœ์š”โ€‹

apple ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ๋””๋ฐ”์ด์Šค์˜ Apple ๋„ค์ดํ‹ฐ๋ธŒ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
ํ˜„์žฌ๋Š” Apple ๋กœ๊ทธ์ธ ๋ฐ ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

โš ๏ธ ์ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ํ˜„์žฌ iOS์—์„œ๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค.


ํƒ€์ž… ์ •์˜โ€‹

AppleResultโ€‹

Apple ๋กœ๊ทธ์ธ ์š”์ฒญ์˜ ๊ฒฐ๊ณผ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด ํƒ€์ž…์ž…๋‹ˆ๋‹ค.

ํ•„๋“œํƒ€์ž…์„ค๋ช…
statusstring์š”์ฒญ ๊ฒฐ๊ณผ ์ƒํƒœ (success / error)
errorCode (optional)string์˜ค๋ฅ˜ ์ฝ”๋“œ (์„ ํƒ์ )
message (optional)string์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ (์„ ํƒ์ )

ApplePermissionTypesโ€‹

Apple ๋กœ๊ทธ์ธ ์š”์ฒญ ์‹œ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

๊ฐ’์„ค๋ช…
email์‚ฌ์šฉ์ž ์ด๋ฉ”์ผ ์ •๋ณด
fullName์‚ฌ์šฉ์ž ์ „์ฒด ์ด๋ฆ„ ์ •๋ณด

AppleUserDataโ€‹

Apple ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‹œ ๋ฐ˜ํ™˜๋˜๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

ํ•„๋“œํƒ€์ž…์„ค๋ช…
identifierstringApple ์‚ฌ์šฉ์ž ๊ณ ์œ  ์‹๋ณ„์ž
tokenstring์‚ฌ์šฉ์ž ํ† ํฐ
authorizationCodestringApple ์ธ์ฆ ์ฝ”๋“œ
email (optional)string์‚ฌ์šฉ์ž ์ด๋ฉ”์ผ (์„ ํƒ์ )
name.familyName (optional)string์‚ฌ์šฉ์ž ์„ฑ
name.givenName (optional)string์‚ฌ์šฉ์ž ์ด๋ฆ„
[fields: string]any๊ธฐํƒ€ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ (์„ ํƒ์ )

๋ฉ”์„œ๋“œ ๋ชฉ๋กโ€‹

๋ฉ”์„œ๋“œ์„ค๋ช…์ถ”๊ฐ€๋œ ๋ฒ„์ „
login(permissions, callback)Apple ๋„ค์ดํ‹ฐ๋ธŒ ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.ver.1.4.0
isLoggedIn(identifier, callback)Apple ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.ver.1.4.0
getUserIdentifier(callback)Apple ์‚ฌ์šฉ์ž ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.ver.1.4.0

๋ฉ”์„œ๋“œ ์ƒ์„ธโ€‹

login(permissions: ApplePermissions, callback: (result: AppleResult, userData?: AppleUserData) => any): voidโ€‹

  • since ver.1.4.0

์„ค๋ช… (login)โ€‹

Apple ๋„ค์ดํ‹ฐ๋ธŒ ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜ (login)โ€‹

์ด๋ฆ„ํƒ€์ž…ํ•„์ˆ˜ ์—ฌ๋ถ€์„ค๋ช…
permissionsApplePermissionsโœ…๋กœ๊ทธ์ธ ์š”์ฒญ ์‹œ ์š”๊ตฌํ•  ๊ถŒํ•œ ๋ชฉ๋ก
callback(result: AppleResult, userData?: AppleUserData) => anyโœ…์š”์ฒญ ๊ฒฐ๊ณผ์™€ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

๋ฐ˜ํ™˜ ๊ฐ’ (login)โ€‹

ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ๋ฐ˜ํ™˜ ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š์œผ๋ฉฐ, ๊ฒฐ๊ณผ๋Š” callback์„ ํ†ตํ•ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์ œ (login)โ€‹

// Apple ๋กœ๊ทธ์ธ ์š”์ฒญ
Nachocode.apple.login(['email', 'fullName'], (result, userData) => {
if (result.status === 'success') {
console.log('Apple ๋กœ๊ทธ์ธ ์„ฑ๊ณต:', userData);
console.log('ํ† ํฐ:', userData.token);
console.log('์ธ๊ฐ€์ฝ”๋“œ:', userData.authorizationCode);
console.log('์ด๋ฉ”์ผ:', userData.email);
console.log('์„ฑ:', userData.name?.familyName);
console.log('์ด๋ฆ„:', userData.name?.givenName);
} else {
console.error(`Apple ๋กœ๊ทธ์ธ ์‹คํŒจ: ${result.message}`);
}
});

isLoggedIn(identifier: string, callback: (result: AppleResult, isLoggedIn: boolean) => any): voidโ€‹

  • since ver.1.4.0

์„ค๋ช… (isLoggedIn)โ€‹

Apple ์‚ฌ์šฉ์ž ๊ณ ์œ  ์‹๋ณ„์ž(identifier)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ˜„์žฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜ (isLoggedIn)โ€‹

์ด๋ฆ„ํƒ€์ž…ํ•„์ˆ˜ ์—ฌ๋ถ€์„ค๋ช…
identifierstringโœ…Apple ์‚ฌ์šฉ์ž ๊ณ ์œ  ์‹๋ณ„์ž
callback(result: AppleResult, isLoggedIn: boolean) => anyโœ…๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

๋ฐ˜ํ™˜ ๊ฐ’ (isLoggedIn)โ€‹

ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ๋ฐ˜ํ™˜ ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š์œผ๋ฉฐ, ๊ฒฐ๊ณผ๋Š” callback์„ ํ†ตํ•ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์ œ (isLoggedIn)โ€‹

// Apple ๋กœ๊ทธ์ธ ์ƒํƒœ ํ™•์ธ
Nachocode.apple.isLoggedIn('user_identifier_here', (result, isLoggedIn) => {
console.log('์กฐํšŒ ์„ฑ๊ณต ์—ฌ๋ถ€:', result.status);
if (isLoggedIn) {
console.log('์‚ฌ์šฉ์ž๋Š” ํ˜„์žฌ Apple์— ๋กœ๊ทธ์ธ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.');
} else {
console.log('Apple ๋กœ๊ทธ์ธ์ด ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.');
}
});

getUserIdentifier(callback: (result: AppleResult, userIdentifier?: string) => any): voidโ€‹

  • since ver.1.4.0

์„ค๋ช… (getUserIdentifier)โ€‹

Apple ์‚ฌ์šฉ์ž ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜ (getUserIdentifier)โ€‹

์ด๋ฆ„ํƒ€์ž…ํ•„์ˆ˜ ์—ฌ๋ถ€์„ค๋ช…
callback(result: AppleResult, userIdentifier?: string) => anyโœ…Apple ์‚ฌ์šฉ์ž ์‹๋ณ„์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

๋ฐ˜ํ™˜ ๊ฐ’ (getUserIdentifier)โ€‹

ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ๋ฐ˜ํ™˜ ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š์œผ๋ฉฐ, ๊ฒฐ๊ณผ๋Š” callback์„ ํ†ตํ•ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์ œ (getUserIdentifier)โ€‹

// Apple ์‚ฌ์šฉ์ž ๊ณ ์œ  ์‹๋ณ„์ž ์กฐํšŒ
Nachocode.apple.getUserIdentifier((result, userIdentifier) => {
if (result.status === 'success') {
console.log(`์‚ฌ์šฉ์ž ์‹๋ณ„์ž: ${userIdentifier}`);
} else {
console.error(`์‚ฌ์šฉ์ž ์‹๋ณ„์ž ์กฐํšŒ ์‹คํŒจ: ${result.message}`);
}
});

์ถ”๊ฐ€ ์ •๋ณดโ€‹

  • Apple ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ํ˜„์žฌ iOS์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. Android ๋ฐ ๊ธฐํƒ€ ํ™˜๊ฒฝ์—์„œ๋Š” ์ถ”ํ›„ ์ง€์›๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž์˜ ์ด๋ฉ”์ผ ๋ฐ ์ด๋ฆ„ ์ •๋ณด๋Š” ์ตœ์ดˆ ๋กœ๊ทธ์ธ ์‹œ์—๋งŒ ์ œ๊ณต๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ดํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.