누군가에게 알려주기 보다는 나 스스로 정리 하며 언젠가 다시 사용할 때를 대비하는 글을 작성할것이다.
그냥 이 아래 적어둔 글들을 따라만 해도 된다.
Push 발생 동작 방식 중에서 Server가 APNs 에게 Token 과 Data 를 전송하는데 둘 간에는 통신을 위한 인증서가 필요하다.
키체인접근 > 인증서 지원 > 인증 기관에서 인증서 요청
순서 1
Apple Developer 페이지 > Account (계정) > Identifiers (식별자)
순서 2
Identifiers + > App IDs > Continue > App > Continue
순서 3
1. Description(: 이게 무엇인지 설명) 입력
2. Bundle ID(: 자신의 App의 Bundle ID) 입력
3. Push Notifications 활성화 (스크롤 하단으로)
4. Continue
5. 입력 맞는지 확인 후 Register
순서 1
1. Identifiers에서 2에서 등록한 항목을 클릭
2. 스크롤을 하단으로 내려서 Push Notifications 의 Configure 클릭
3. 사용하는 인증서를 Create 하기 (구글의 Firebase는 둘다 필요로 한다)
4. Choose File 에 위에 1에서 만들었던 CSR 파일을 넣어준다.
5. 원하는 위치에 파일을 저장한다.
Firebase 부분
APN 인증키 == p8 인증서
APN 인증서 == Certificate
- 개발 APN 인증서 == Development SSL Certificate
- 프로덕션 APN 인증서 == Production SSL Certificate
이렇게 Certificate를 받았다면 다운받은 aps_development.cer
을 더블클릭해 키체인 등록한다.
이제 Push Notification 을 받기 위해는 다른 형태의 인증서가 필요로 하는데 이때 p12 형태의 파일을 만들어야 한다.
p12를 생성하기 위해선 방금 등록한 인증서
와 키
가 필요로 하다
순서 2
1. 순서 1에서 등록한 키와 인증서를 동시에 선택하고 우클릭 후 내보내기를 선택한다.
2. 원하는 위치에 원하는 이름으로 저장
3. 암호 입력 (해당 암호는 기억할 수 있는걸로 지정)
4. 완성
순서
1. APNs 설정.2 까지 진행은 되어있는 상태에서 진행한다.
2. Keys 메뉴로 진입 후 Create a key 또는 + 버튼을 누른다.
3. Key Name 은 알아서 지어주고 사용하는 항목을 체크해준 뒤 Continue 를 누른다.
4. 선택 항목과 이름을 확인 후 Register 를 누른다.
5. 다운로드 할 수 있는 화면이 나오는데 이 화면 아니면 다운을 못하기에 다운 받아서 잘 보관해둔다.
순서
1. App의 TARGETS 의 Signing & Capabilities 항목 진입
2. + Capability 버튼 선택
3. 사용할 항목 검색 후 추가
(이 포스트에서는 Push Notifications 와 Background Modes 를 사용)
iOS 에서는 사용자의 동의가 없을 경우 Noti 수신을 못하게 해놨기에 이에 대한 권한을 요청해야 한다.
앱이 실행하는 단계이거나 푸시알림을 설정하는 단계에서 해당 권한 요청 코드 호출하면 된다.
이 포스트에서는 앱이 실행되는 단계에서 진행을 하였다.
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge,. sound]
UNUserNotificationCenter.current().requestAuthorization(options: authOptions) { _, _ in }
application.registerForRemoteNotifications()
return true
}
}
해당 코드를 작성하면 UNUserNotificationCenterDelegate
프로토콜을 추가하라는 경고가 뜰것이고 해당 프로토콜을 추가하면 된다.
당연 틀린 부분 지적은 감사하나 비난은 정중하게 사양하겠다.