2
에, 시뮬레이터에서 자바 스크립트 날짜 개체를 처리하는 반작용

반응 네이티브 : 0.44.3는 기본 0.44 PushNotifcationIOS.scheduleLocalNotification하지 장치

대상 플랫폼 : 아이폰 OS

개발 운영 체제 : 맥 OS 시에라 10.12.4

빌드 도구 : XCode

이 동작으로 인해 스케줄러 알림이 시뮬레이터에서 예상대로 작동하지만 장치에서 매우 신비한 방식으로 실패하는 매우 혼란스러운 버그가 발생합니다.

재현하려면

일정 로컬 알림을 미래의 한 분 : 기본적으로

PushNotificationIOS.scheduleLocalNotification({ 
 
    fireDate: new Date(Date.now() + 60 * 1000), 
 
    alertBody: 'message' 
 
});

실행 시뮬레이터에서이 빌드 (이것은 디버그입니다 당신이 설정을 망쳐 놓지 않는 이상 지어주세요.)

알림이 예상대로 예약되는지 확인하십시오. 디버그로이 빌드 (실행 대신 릴리스의 디버그를 사용 있도록 계획을 수정)

당신이 당신의 통지

실행이 같은 일정을하려고 할 때 충돌을 관찰 엑스 코드를 통해 장치에 구축

실행 장치의 릴리스 빌드.

알림 화재 즉시 (예약 알림이 널 날짜 또는 이미 지난 날짜를 지정하면이 예상되는 아이폰 OS 동작입니다 있습니다.) 것을 관찰

참고 그 immediately-을 관찰하기 위해 해고 통지를 수신하면이를 처리하고 피드백을 제공하도록 설정된 청취자가 있어야합니다. 연결된 앱이 포 그라운드 (AppState : '활성')에있는 경우 로컬 알림이 iOS에 표시되지 않는 것으로 보입니다.

답변

2

이 문제를 해결하려면 Date 개체를 Unix 시간으로 변환하십시오. 이 예는 미래 fireDate에게 분을 설정

let fireDate = new Date(Date.now() + 60 * 1000).getTime();

날짜 객체는 RCT의 다리를 통과 할 수 없으며, 문자열이나 숫자로 변환해야합니다.

그러나 Date 객체에서 toString()을 호출해도 작동하지 않습니다. 권장 해결책은 getTime()을 사용하여 유닉스 타임 스탬프를 얻는 것입니다.