티스토리 뷰

Local Notification 에 Identifier 가 64개로 제한되어 있다는 사실을 아시나요...

 

복용하는 영양제를 저장해서 해당 시간에 알림을 받아볼 수 있는 앱을 제작중에 겪은 문제를 공유하고자합니다ㅏ

우선, 제 앱 기획상 하나의 영양제를 7주일, 하루에 3회까지 복용할 수 있어요

그래서 하나의 영양제만 먹는다고 하더라도 7*3 = 21... 최대 21개의 identifier를 써버릴 수 있는 문제가 있었어요

그렇다고 모든 알림을 하나의 identifier로 처리해버리면 12시에 먹는 영양제를 아직 못먹었는데도 12시1분에 먹어야 할 영양제 알림이 울리면 알림이 덮어씌워진다는 아쉬움이 있었습니다...

 

그래서 제가 떠오른 방법은 같은 요일 같은 시간에 울리는 알림은 하나로 처리하자! 였습니다

영양제 복용 특성 상 여러 종류를 복용 하더라도 보통 같은 시간대에 함께 복용하기 때문에 ✅ Identifier를 요일+시간 으로 저장하여 다른 종류의 영양제더라도 복용 시간만 같으면 하나의 알림으로 처리했습니다.

=> '비타민', '유산균', '오메가3'를 매일 12시에 같이 복용한다면 세 종류를 먹어도 7개의 identifier만 생성됩니다. 

 

또한, Notification Title에 복용하는 영양제들의 이름을 알려주고 싶어서 영양제를 추가할 때 Notification을 조회하여 같은 Identifier를 가진 알림이 있다면 해당 content.title에 영양제 이름을 덧붙여서 다시 저장하도록 구현했습니다.

 

let id = day.description+time.dateFilterTime()
...
UNUserNotificationCenter.current().getPendingNotificationRequests { requests in
let request = requests.filter { $0.identifier == id }
if request.isEmpty {
    content.title = "[\(time.dateFilterTime())] \(name)"
} else {
    request.forEach { content.title = "\($0.content.title), \(name)" }
...
}

 

 

이렇게 같은 알림으로 생성했기 때문에 삭제할 때도 마찬가지로 Notification을 조회해줘야합니다.

같은 identifier를 사용하는 게 여러 영양제라면, Notification을 삭제해버리면 해당 시간에 복용하는 다른 영양제의 알림까지 삭제되기 때문이에요!

비타민과 유산균, 오메가3를 12시에 복용하는데 비타민을 이제 안 먹는다고 notification을 날려버리면 유산균과 오메가3의 알림도 삭제되어버립니다ㅜ

Notification을 조회하여 content의 title에 영양제 이름을 조회하여 그 갯수가 1개 초과이면 영양제를 지우지 않고 삭제하고자하는 영양제의 이름만 title에서 지워줬습니다!

댓글
최근에 올라온 글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함