[iOS] Notification Push 사용 - 2 : Push 구현(APNs 사용)

Sean·2023년 5월 18일
2

iOS 앱 기능

목록 보기
2/4

누군가에게 알려주기 보다는 나 스스로 정리 하며 언젠가 다시 사용할 때를 대비하는 글을 작성할것이다.

시작

시작글

  • 시작하기에 앞서 이 전에 썼던 Push 설명 해당 포스트를 보고 온다면 지금 작성하는 포스트에서 사용하는 용어들의 상관 관계가 조금 더 이해가 쉬울 것이라 생각한다.
    (안봐도 상관은 없을 것 같지만 말이다.)

분석

그냥 이 아래 적어둔 글들을 따라만 해도 된다.

APNs 설정 : 1. CSR 발급

Push 발생 동작 방식 중에서 Server가 APNs 에게 Token 과 Data 를 전송하는데 둘 간에는 통신을 위한 인증서가 필요하다.

키체인접근 > 인증서 지원 > 인증 기관에서 인증서 요청


APNs 설정: 2. App ID 등록 및 Push Noti 활성화

순서 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


APNs 설정: 3. 인증서 만들기

  • APNs 로 Push를 보내기 위해서는 Server 가 HTTP/2 및 TLS 통신을 사용해서 보내게 되는데 이때 2가지의 인증서 중 하나로 신뢰를 설정을 해야 한다.
    1. .p12 인증서 : Certificate 기반
    2. .p8 인증서 : Token 기반
  • p12 인증서

    • p12 인증서는 Certificate(인증서) 기반으로 Server(Provider)와 APNs의 보안을 설정한다.

순서 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. 완성


  • p8 인증서

    • p8 인증서는 토큰 기반으로 APNs가 Provider Server와 관련된 Certificate 나 기타 정보를 조회할 필요가 없어 Certificate 방식의 통신보다 빠른 Stateless한 방식으로 통신을 한다.
    • 신뢰단계가 서버에서 설정하기에 각 요청별 토큰이 필요로 하지 않지만 각 앱에 대해서 별도의 인증서를 생성해야 하고 각 Push에 대한 별도의 APNs를 연결해야 한다.
      (하나의 토큰으로 관리 중인 모든 앱에 noti 전송 불가)

순서
1. APNs 설정.2 까지 진행은 되어있는 상태에서 진행한다.
2. Keys 메뉴로 진입 후 Create a key 또는 + 버튼을 누른다.
3. Key Name 은 알아서 지어주고 사용하는 항목을 체크해준 뒤 Continue 를 누른다.
4. 선택 항목과 이름을 확인 후 Register 를 누른다.
5. 다운로드 할 수 있는 화면이 나오는데 이 화면 아니면 다운을 못하기에 다운 받아서 잘 보관해둔다.


APNs 설정: 4. 프로젝트에 설정 활성화

순서
1. App의 TARGETS 의 Signing & Capabilities 항목 진입
2. + Capability 버튼 선택
3. 사용할 항목 검색 후 추가
(이 포스트에서는 Push Notifications 와 Background Modes 를 사용)


APNs 설정: 5. 코드 작성

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 프로토콜을 추가하라는 경고가 뜰것이고 해당 프로토콜을 추가하면 된다.

참고자료

기타

당연 틀린 부분 지적은 감사하나 비난은 정중하게 사양하겠다.

profile
"잘 할 수 있을까?"를 고민하기보단 재밌어 보이는건 일단 하고, 잘하기 위해 그냥 계속합니다.

0개의 댓글