iOS 는 어떻게 우아 하 게 응용 각 표를 제거 하 는 지 상세 하 게 설명 합 니 다.

머리말
우 리 는 푸 시 기능 을 보완 할 때 원 격 푸 시 에 성공 할 수 있 는 지 없 는 지 를 고려 할 뿐만 아니 라 사용자 의 체험 문제 도 주의해 야 한다.먼저 가장 주목 해 야 할 것 은 바로 코너 문 제 를 응용 하 는 것 이다.
각표 적용
1>각 표 지 를 어떻게 사용 합 니까?
각 표를 사용 하면 바로 아래 에서 이 형 제 를 캡 처 하 는 것 입 니 다.본 초 에 캡 처 한 것 은 MAC 에서 캡 처 한 것 이 고 핸드폰 에서 도 똑 같은 효과 입 니 다.

2>각표 원리 적용
각 표 지 를 사용 하 는 것 은 시스템 에서 설정 한 것 입 니 다.APNs 가 푸 시 한 메 시 지 를 시스템 에 전송 할 때 위의 메시지 payload 내용 의 badge 수치 에 따라 응용 프로그램의 아이콘 에 값 을 부여 합 니 다.그러면 홈 화면 에 표 시 된 아이콘 의 오른쪽 상단 에 해당 하 는 숫자 가 나타 납 니 다.시작 하 든 안 하 든 해당 하 는 숫자 를 표시 합 니 다.그래서 만약 에 우리 자신의 백 스테이지 에서 이 푸 시 기능 을 실현 한다 면 각 표 논리 로 사용자 체험 을 보완 해 야 한다.
각표 제거
일반적인 상황 에서 우 리 는 이 방법 으로 각 표 지 를 제거한다.

[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
그러나 이 방법 은 시스템 알림 표시 줄 의 과거 푸 시 메 시 지 를 모두 삭제 합 니 다.
iOS 10 메시지 푸 시 프레임 워 크 인 User Notification 을 사용 해 봤 는데 도 이런 경우 가 있 었 다.
같은 효 과 를 낼 수 있 습 니 다.그리고...

[UIApplication sharedApplication].scheduledLocalNotifications = nil;
해결 방안:

- (void)applicationDidEnterBackground:(UIApplication *)application {
 UILocalNotification *clearEpisodeNotification = [[UILocalNotification alloc] init];
 clearEpisodeNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1];
 clearEpisodeNotification.timeZone = [NSTimeZone systemTimeZone];
 clearEpisodeNotification.applicationIconBadgeNumber = -1;
 [[UIApplication sharedApplication] scheduleLocalNotification: clearEpisodeNotification];
}
프로그램 이 배경 으로 물 러 난 후 이 알림 을 추가 합 니 다.
관건 은 애플 리 케 이 션 Icon Badge Number 가-1 입 니 다.
이어서 빨 간 점 이 애니메이션 을 가지 고 우아 하 게 사라 지 는 것 을 볼 수 있다.
이와 함께 역사 푸 시 소식 은 보류 됐다.
그러나 이 방식 은 iOS 11 에 서 는 효력 을 잃 었 다.
어 쩔 수 없 을 줄 알 았 는데,어떤 뉴스 클 라 이언 트 가 여전히 실 현 될 수 있다 는 것 을 발견 할 때 까지.
그래서 나 는 이 뉴스 클 라 이언 트 를 역 컴 파일 했다.
applicationDid Enter Background 에 착안 하여 곧 관련 코드 를 찾 았 다.


그러면 답 이 나 옵 니 다.User Notifications 를 직접 사용 하면 됩 니 다.badge 는-1 일 것 같 습 니 다.

- (void)applicationDidEnterBackground:(UIApplication *)application {
 UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
 content.badge = @(-1);
 UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"clearBadge" content:content trigger:nil];
 [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
 }];
}
마지막 으로 title 을 설정 하지 마 세 요.그렇지 않 으 면 공백 통 지 를 받 을 수 있 습 니 다.
참고 자료:https://stackoverflow.com/questions/5375355/clear-app-badge-with-local-notifications
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기