iOS 기초 μ„€μ •

ν‘Έμ‹œλ©”μ„Έμ§€ λ°œμ†‘μ„ μœ„ν•΄ iOS μ—μ„œ ν•„μˆ˜λ‘œ μ„€μ •ν•΄ μ£Όμ…”μ•Ό ν•˜λŠ” κ°€μ΄λ“œμž…λ‹ˆλ‹€.

APNS μΈμ¦μ„œ λ°œκΈ‰

Firebase 연동

λ‹€μŒ Firebase consoleμ—μ„œ ν”„λ‘œμ νŠΈ κ°œμš” 였λ₯Έμͺ½μ˜ setting μ•„μ΄μ½˜μ„ ν΄λ¦­ν•˜μ—¬ ν”„λ‘œμ νŠΈ μ„€μ •μœΌλ‘œ λ“€μ–΄κ°‘λ‹ˆλ‹€.

ν΄λΌμš°λ“œ λ©”μ‹œμ§• 메뉴λ₯Ό ν΄λ¦­ν•˜μ—¬ λ‹€μŒκ³Ό 같이 λ°œκΈ‰λ°›μ€ APN 인증 (.p8) ν‚€λ₯Ό μ—…λ‘œλ“œ ν•©λ‹ˆλ‹€.

그리고 Firebase ꡬ성 νŒŒμΌλ„ Xcode λ£¨νŠΈμ— λ³΅μ‚¬ν•©λ‹ˆλ‹€.

λŒ€μ‹œλ³΄λ“œ μ„€μ •

μ™€μ΄μ¦ˆνŠΈλž˜μ»€ λŒ€μ‹œλ³΄λ“œμ—μ„œ ν‘Έμ‹œ 연동을 μœ„ν•œ 섀정을 μ§„ν–‰ν•©λ‹ˆλ‹€.

μ„œλΉ„μŠ€μ„€μ • > μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„€μ • > ν‘Έμ‹œμ—°λ™ 메뉴λ₯Ό ν΄λ¦­ν•©λ‹ˆλ‹€.

μ•„λž˜ μ΄λ―Έμ§€μ—μ„œ ν‘Έμ‹œ μ„œλΉ„μŠ€ νƒ€μž…μ„ Firebase Cloud Messaging 으둜 선택 ν›„ Android ν‘Έμ‹œ μ—°λ™μ‹œ μΆ”κ°€ν•œ Firebase Admin SDK용 "private key" νŒŒμΌμ„ μΆ”κ°€ ν•΄ μ£Όμ„Έμš”.

SDK μ„€μΉ˜

Cocoapodμ—μ„œ SDK λ‹€μš΄λ‘œλ“œ

Swift둜 FCM을 μ‚¬μš©ν• λ•ŒλŠ”, 'pod' νŒŒμΌμ„ μˆ˜μ •ν•  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€.

XCode ν”„λ‘œμ νŠΈ νŒŒμΌμ€‘ Podfile νŒŒμΌμ— λ‹€μŒκ³Ό 같이 SDK와 FirebaseMessaging을 μΆ”κ°€ν•©λ‹ˆλ‹€.

기쑴에 SDKλ₯Ό ν•œλ²ˆ μ„€μΉ˜ν•œ κ²½μš°μ—λŠ” μ„€μΉ˜ν• SDK 버전을 ν‘œμ‹œν•΄μ•Ό ν•˜λŠ” κ²½μš°λ„ μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜μ™€ 같이 μ„€μΉ˜ν•  SDK버전을 λͺ…μ‹œμ μœΌλ‘œ ν‘œμ‹œν•˜λ©΄ λ©λ‹ˆλ‹€.

Terminal

Podfile 에 해당라인을 μΆ”κ°€ν•œ ν›„ Terminal ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜μ—¬ λ‹€μŒμ˜ λͺ…령을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

SDK 버전 μ—…λ°μ΄νŠΈμ˜ 경우 λ‹€μŒμ˜ λͺ…령을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

Cocoapod μ‚¬μš©ν•˜μ§€ μ•Šμ„ 경우

SDK νŒŒμΌμ„ URLμ—μ„œ λ‹€μš΄λ‘œλ“œ ν•©λ‹ˆλ‹€.

λ‹€μš΄λœ νŒŒμΌμ„ μ••μΆ• ν•΄μ œν•˜λ©΄ λ‹€μŒκ³Ό 같은 파일이 확인 κ°€λŠ₯ν•˜κ³  이쀑 μ•„λž˜μ— μ„ νƒλœ 3개의 νŒŒμΌμ„ 뢄석 λŒ€μƒ μ•± ν”„λ‘œμ νŠΈμ— μΆ”κ°€ν•©λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ 선택후 마우슀 우클릭, Add Files to 메뉴λ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

μ•žμ—μ„œ λ‹€μš΄λ‘œλ“œ λ°›κ³ , μ••μΆ• ν•΄μ œν•œ 폴더에 λ“€μ–΄κ°€μ„œ μ•„λž˜μ™€ 같이 μΆ”κ°€ λŒ€μƒ νŒŒμΌμ„ μ„ νƒν•˜κ³ , ν™”λ©΄ μ•„λž˜μͺ½ 섀정은 μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  target에 ν¬ν•¨λ˜μ—ˆλŠ”μ§€ 확인후 μΆ”κ°€ ν•˜λ©΄ λ©λ‹ˆλ‹€.

BuildSetting 에 μ•„λž˜μ™€ 같이 섀정을 μΆ”κ°€ν•©λ‹ˆλ‹€.

xcode κ°€ 12.3 이후 버전이고 λΉŒλ“œ κ³Όμ •μ—μ„œ μ•„λž˜μ™€ μœ μ‚¬ν•œ 였λ₯˜κ°€ λ°œμƒν•˜λŠ” κ²½μš°κ°€ 있으며,

μœ„μ˜ κ²½μš°μ—λŠ” μ•„λž˜μ™€ 같이 섀정을 ν•˜κ³ , λΉŒλ“œλ₯Ό ν•˜λ©΄λ©λ‹ˆλ‹€.

CocoaPod을 μ‚¬μš©ν•˜μ§€ μ•Šμ„κ²½μš°, Firebase μˆ˜λ™ 섀정은 μ•„λž˜μ˜ Firebase 곡식 documentλ₯Ό μ°Έκ³ ν•˜μ—¬ μˆ˜λ™μœΌλ‘œ ν”„λ‘œμ νŠΈμ— μΆ”κ°€ν•΄ μ£Όμ„Έμš”.

dotAuthorizationKey 등둝

info.plist νŒŒμΌμ„ Open As Source Code λ°©μ‹μœΌλ‘œ μ˜€ν”ˆν•œ ν›„, μ•„λž˜ μ½”λ“œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

μΆ”κ°€ν•œ μ½”λ“œ 쀑 serviceNumber의 valueλ₯Ό μ˜¬λ°”λ₯Έ κ°’μœΌλ‘œ λ³€κ²½ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ™€μ΄μ¦ˆνŠΈλž˜μ»€ λŒ€μ‹œλ³΄λ“œμ— λ‘œκ·ΈμΈν•˜μ—¬ μ„€μ • > μ„œλΉ„μŠ€μ„€μ • λ©”λ‰΄μ—μ„œ 'μ„œλΉ„μŠ€λ²ˆν˜Έ' ν•­λͺ©μ— 기재된 숫자λ₯Ό 확인 ν›„ λ³΅μ‚¬ν•˜μ—¬ serviceNumber 값을 λ³€κ²½ ν•΄ μ£Όμ„Έμš”.

μ„œλΉ„μŠ€λ²ˆν˜Έ 확인

HTTP 톡신 ν—ˆμš©

http톡신을 ν—ˆμš©ν•˜κΈ° μœ„ν•΄ NSAppTransportSecurity λ₯Ό μ•„λž˜μ™€ 같이 μΆ”κ°€ν•©λ‹ˆλ‹€.

이전과 λ§ˆμ°¬κ°€μ§€λ‘œ info.plist νŒŒμΌμ„ Open As Source Code λ°©μ‹μœΌλ‘œ μ˜€ν”ˆν•œ ν›„, μ•„λž˜ μ½”λ“œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

"Push Notification" Capability μΆ”κ°€

앱에 ν‘Έμ‹œκΈ°λŠ₯을 μΆ”κ°€ν•©λ‹ˆλ‹€.

"Signing & Capabilities" 탭을 μ„ νƒν•œ ν›„ ν™”λ©΄ μ™Όμͺ½μ˜ "+ Capability"λ₯Ό λˆŒλŸ¬μ£Όμ„Έμš”.

"Capability"ν™”λ©΄μ—μ„œ "Push Notification"κΈ°λŠ₯을 κ²€μƒ‰ν•˜μ—¬ μ„ νƒν•©λ‹ˆλ‹€.

Background Modes도 μœ„μ™€ 같은 λ°©λ²•μœΌλ‘œ 검색 ν›„ μΆ”κ°€ ν•΄ μ€λ‹ˆλ‹€.

μ΄ˆκΈ°ν™”

  • μ΄ˆκΈ°ν™” 방법은 SceneDelegate κ°€ μ„€μ •λœ κ²½μš°μ™€ μ„€μ •λ˜μ§€ μ•Šμ€ κ²½μš°μ— 따라 λ‹¬λΌμ§‘λ‹ˆλ‹€.

  • SceneDelegateλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ AppDelegateμ—μ„œ μ΄ˆκΈ°ν™”μž‘μ—…μ„ ν•˜κ³ , κ·Έλ ‡μ§€ μ•Šκ³  SceneDelegateλ₯Ό μ‚¬μš©ν•˜λ©΄ SceneDelegateμ—μ„œ 이 μž‘μ—…μ„ ν•΄μ•Ό ν•©λ‹ˆλ‹€.

1. iOS13 미만 (SceneDelegate μ—†μŒ)

AppDelegate의 didFinishLaunchingWithOptions ν•¨μˆ˜μ— SDKλ₯Ό Initializationν•˜κΈ° μœ„ν•œ μ½”λ“œλ₯Ό λ‹€μŒκ³Ό 같이 μ μš©ν•©λ‹ˆλ‹€. SDKκ°€ μ •μƒμ μœΌλ‘œ μ΄ˆκΈ°ν™” λ˜μ—ˆμ„ λ•Œ μ•„λž˜μ™€ 같은 κΈ°λ³Έ 뢄석이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

  • μ•± μ‹€ν–‰ 및 방문수, 일/μ£Ό/μ›”μˆœμˆ˜λ°©λ¬Έμˆ˜ λ“± λ°©λ¬Έκ³Ό κ΄€λ ¨λœ μ§€ν‘œ

  • 톡신사, 단말기, κ΅­κ°€ λ“± 방문자의 단말기 ν™˜κ²½μœΌλ‘œ λΆ€ν„° μΆ”μΆœλ  수 μžˆλŠ” μ§€ν‘œ

DOTκ°€ μ‚¬μš©λ˜λŠ” κ³³μ—μ„œλŠ” import DOT을 톡해 importκ°€ ν•„μš”ν•©λ‹ˆλ‹€.

2. iOS13 이상 (SceneDelegate μ‚¬μš©)

πŸ‘‰ iOS13 이상이어도 SceneDelegateλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆμ–΄μš”, 이 λ•Œμ—λŠ” μœ„μ˜ SceneDelegateλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 경우λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

SceneDelegate의 sceneDidBecomeActiveν•¨μˆ˜μ— SDKλ₯Ό Initializationν•˜κΈ° μœ„ν•œ μ½”λ“œλ₯Ό λ‹€μŒκ³Ό 같이 μ μš©ν•©λ‹ˆλ‹€. SDKκ°€ μ •μƒμ μœΌλ‘œ μ΄ˆκΈ°ν™” λ˜μ—ˆμ„ λ•Œ μ•„λž˜μ™€ 같은 κΈ°λ³Έ 뢄석이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

  • μ•± μ‹€ν–‰ 및 방문수, 일/μ£Ό/μ›”μˆœμˆ˜λ°©λ¬Έμˆ˜ λ“± λ°©λ¬Έκ³Ό κ΄€λ ¨λœ μ§€ν‘œ

  • 톡신사, 단말기, κ΅­κ°€ λ“± 방문자의 단말기 ν™˜κ²½μœΌλ‘œ λΆ€ν„° μΆ”μΆœλ  수 μžˆλŠ” μ§€ν‘œ

이미지 ν‘Έμ‹œλ©”μ‹œμ§€ 적용 (선택사항)

  1. Notification Service Extension Target μΆ”κ°€

이미지λ₯Ό ν¬ν•¨ν•œ ν‘Έμ‹œλ©”μ„Έλ₯Ό μˆ˜μ‹ λ°›κΈ° μœ„ν•΄ ν•„μš”ν•©λ‹ˆλ‹€.

File - New - Target λ©”λ‰΄μ—μ„œ "Notification Service Extension"을 μ„ νƒν•©λ‹ˆλ‹€.

Product Name에 νƒ€κ²Ÿλͺ…을 μž…λ ₯ν•©λ‹ˆλ‹€. (μ•„λž˜μ—μ„œ Podfile에 target을 μΆ”κ°€ν• λ•Œ μ‚¬μš©ν•  νƒ€κ²Ÿλͺ…μž…λ‹ˆλ‹€)

μΆ”κ°€ μ™„λ£Œ ν›„ NotificationServiceExtension 폴더가 μƒμ„±λ©λ‹ˆλ‹€.

Language에 λ”°λ₯Έ 폴더 ν˜•νƒœ
  1. Podfile μˆ˜μ •

Podfile에 μ•„λž˜μ™€ 같이 μ•±μ˜ νƒ€κ²Ÿ μ•ˆμ— 이미지 ν‘Έμ‹œλ₯Ό μœ„ν•œ νƒ€κ²Ÿμ„ μΆ”κ°€ν•œ ν›„ pod install λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰μ‹œμΌœ μ€λ‹ˆλ‹€.

Podfile

βœ”οΈν”„λ ˆμž„μ›Œν¬ μΆ”κ°€μ‹œ μ•±μ˜ ν”„λ ˆμž„μ›Œν¬ 방식과 λ™μΌν•˜κ²Œ μž‘μ„±λ  수 μžˆλ„λ‘ ν•œλ²ˆ 더 체크 ν•΄ μ£Όμ„Έμš”. (동적 or 정적)

βœ”οΈWisetracker SDK 버전이 λͺ…μ‹œλ˜μ–΄ μžˆλ‹€λ©΄, λ™μΌν•˜κ²Œ 버전이 λͺ…μ‹œλ˜μ–΄ μžˆλŠ” ν˜•νƒœλ‘œ μΆ”κ°€ν–ˆλŠ”μ§€ 체크 ν•΄ μ£Όμ„Έμš”.

μœ„μ˜ "NotificationServiceExtension"은 κ³ κ°μ‚¬μ—μ„œ λ§Œλ“  타켓λͺ…μœΌλ‘œ ν•΄μ£Όμ…”μ•Ό ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œλŠ” νƒ€κ²Ÿλͺ…이 "NotificationServiceExtension"인 κ²½μš°μž…λ‹ˆλ‹€.

  1. NotificationService μˆ˜μ •

  • NotificationService νŒŒμΌμ„ μ—΄μ–΄ μ•„λž˜μ˜ λ‚΄μš©μœΌλ‘œ λŒ€μ²΄ν•΄ μ£Όμ„Έμš”. * κΈ°μ‘΄ λ‚΄μš©μ„ λͺ¨λ‘ μ‚­μ œν•˜κ³  μ•„λž˜ λ‚΄μš©μœΌλ‘œ λŒ€μ²΄ν•˜λŠ”κ²ƒμ΄λ©°, μΆ”κ°€κ°€ μ•„λ‹˜μ— 유의 ν•΄ μ£Όμ„Έμš”.

NotificationService

iOS κΈ°μ΄ˆμ„€μ •μ€ μ™„λ£Œν•˜μ…¨μŠ΅λ‹ˆλ‹€ πŸŽ‰

λ‹€μŒμœΌλ‘œ ν‘Έμ‹œλ©”μ„Έμ§€ 섀정을 μœ„ν•œ 단계λ₯Ό μ§„ν–‰ ν•΄ μ£Όμ„Έμš” πŸ‘‡πŸ»

Last updated

Was this helpful?