티스토리 뷰

iOS

Push Notification Console 써보기

Zedd0202 2023. 10. 26. 22:40
반응형

 

이번에 Push Notification Console 나와서 써보려고 합니다.

과연 어떨지..

 

# 푸시 보내기

1. 프로젝트 생성

 

2. Capabilities > Push Notification 추가

 

3. AppDelegate.swift 수정

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    let token = deviceToken.reduce("") {
        $0 + String(format: "%02X", $1)
    }
    print(token)
}

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
    print(error.localizedDescription)
}

 

4. 알림 권한 요청 

UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge], completionHandler: {
    didAllow,Error in

    DispatchQueue.main.async {
        UIApplication.shared.registerForRemoteNotifications()
    }
})

 

5. 빌드 후 디바이스 토큰 얻어오기 

위 코드대로 따라했다면 콘솔에 디바이스 토큰 나왔을것임

 

6.  Push Notification Console 이동 프로젝트 번들 아이디 찾기

찾으면 아래와같이 되어있을것임 

 

7. Create New Notification 누르기

 

8. General 부분 채워주기

Name ➡️ 나중에 보낸 Notification 리스트가 왼쪽에 뜨는데 그걸 구별하는 이름으로 보면됨. 그냥 테스트니까 알아서 아무거나 ㄱ

Enviroment  ➡️ Development과 Production이 있는데, 테스트니까 우선 Development로

Device Token  ➡️ 아까 Xcode 콘솔에 나온거 그대로 복사해서 넣기

 

9. Request Headers 부분 채워주기 

apns-topic ➡️ topic은 앱의 번들아이디라고 보면되어서 (출처. In general, the topic is your app’s bundle ID/app ID) 그냥 자동으로 넣어준듯. 

apns-push-type ➡️ 그냥 push type. (종류에는 이런것들이 있음) 우리가 보내는 평범한(?) 푸시는 alert이므로 우선 alert로 해준다.

apns-expiration ➡️ 푸시가 유효한 날짜라고 보면됨. Attempt delivery once로 지정해주자

apns-priority ➡️ 테스트니까 우선 high (10) 으로 해준다

10 -> 즉시 보냄

5 -> 디바이스의 파워 상태에 따라 보냄

1 -> 다른 모든 요소보다 디바이스 파워 상태을 우선시하고 디바이스가 깨어나는 것을 방지

 

10. Payload 부분 채워주기

우상단 JSON View를 하면 JSON 형식으로도 볼 수 있다. 

다만 JSON View로 하면 key이름을 다 알아야하는데..

요렇게 보면 뭘 추가할 수 있는지 다 나와서 편한 것 같다!? 

아무튼 요건 알아서 채워주면 됨. 난 귀찮으니까 걍 그대로 보낼거..ㅎ

 

11. 우상단 Send 누르기

뭐지 이 화질은..?

아무튼 이렇게 바로 옵니다

야호 짱 편하다~ 

 

# 여러 기능들

1. 푸시가 보내졌는지 안보내졌는지 상세한 로그 확인 가능

만약에 성공적으로 보내졌다면 successfully delivered to the target device라고 나오고,

위에서 말했듯이 Priority를 medium이나 low로 주면 디바이스 파워 상태에 따라 즉시 전달이 안될 수 있습니다. 

예를들어, 저전력 모드이고 충전중이지 않을 때 low로 보내게 되면 

stored for device power considerations 로 나오게 됩니다. 

이때는 배터리 절약을 위헤 바로 보내지 않고, 저장해놨다가 사용자가 핸드폰을 잠금해제하거나 저전력 모드를 해제했을 때 오는 식입니다. 

(저는 잠금 해제하면 올때도 있고, 저전력 모드를 해제하면 올때도 있고 랜덤이더라구요;;) 

그때 이제 상단의 Refresh를 누르면 successfully delivered to the target device 요걸로 바뀌어있겠죠!

물론 이러한 로그는 상단의 Delivery Logs에서도 확인이 가능합니다. 

각 푸시는 apns-unique-id를 가지는데, 

요것을 복사해서 Delivery Log에 검색하면 

똑같은 정보를 볼 수 있습니다. 

물론 콘솔에서 보냈다면 Send탭에서 똑같은 정보를 확인할 수 있으니 굳이 Delivery Log탭으로 안가도 되겠지만..

서버를 통해 쐈다거나 했을 때 응답의 apns-unique-id를 활용하여 로그를 확인해볼 수 있겠죠!? 

 

2. Debug with Tools

상단의 Tool에 들어가면

- JWT Validator

- JWT Generator

- Device Token Validator 

이런것들이 있는데, 

JWT Generator로 토큰을 생성할수도 있고, 이미 토큰이 있다면 Validator로 유효한지 검사할 수 있습니다. 

 

 Device Token Validator는 아주 유용하게 쓰일 수 있는데요. 

이런식으로 Push Type과 환경이 같이나와서 엄청 편하더라구요. 

내 푸시토큰이 Live Activity 푸시토큰이다!면 저기에 Live Activity Push Type이라고 나옵니다.

 

3. Metric

Metric 탭에서는 보낸 Push Type, 각 Push Type에 해당하는 푸시들의 상태를 한눈에 살펴볼 수 있습니다. 

(Production만 나오는듯..? 저는 Development로밖에 안보내서 0으로 나오는 것 같아요)

아무튼 각 Status에 따라 평균 몇개인지, Total은 몇개인지 등등을 볼 수 있습니다. 

각 그림의 왼쪽의 체크버튼을 통해서 상단 그래프에 보여질건지 말지도 조절할 수 있더라구요. 

그냥 동향?같은거 살펴볼때 좋은 것 같아요~ 


제가 푸시 관련 기능 나오면 써보고, 어떻게 하면 파베 안쓰고 그냥 보낼 수 있을까..

이런 저런 고민도 하고 그러면서 글도 몇개 썼었는데요!

[Xcode 14+] 시뮬레이터에 Remote notifications 보내기

Sending push notifications using command-line tools (feat. Token / .p8)

Xcode 11.4 ) Remote Push Notifications in Simulator (feat. APNs file)

그중에서 제일 편하네요.. 고마워 사과야 🍎

 

참고 

https://developer.apple.com/documentation/usernotifications/testing_notifications_using_the_push_notification_console

반응형