[ 푸시알림 완벽구현 - 최종판 ]
https://honeystorage.tistory.com/306
위 문제는 많은 개발자들이 겪고있는 이슈이다.
많은 해결법이 나와있지만 명쾌하지 못하다.
만든 개발자조차 얻어걸린 해결법을 해결법이랍시고
제공하는듯한 느낌을 지울 수 없다.
왜 푸시 진동이 안울려? 글에서도
언급한 서버 푸시 코드 수정을 통한 방법도 있지만,
이 또한 만능은 아니었다.
보다 완벽한 푸시 처리를 위해
local-notification으로 알림으 띄우는 코드를
setBackgroundMessageHandler의 리스너로 등록한뒤
빌드해서 테스트를 해보았다.
왜냐면 시뮬레이터에서는
애초에 푸시알림이 지원되지않아
부정확한 테스트밖에 할수없다고 판단되었기 때문이다.
(공식 가이드의 지시에 따라 isHeadless의 경우 null 대신 임의의 컴포넌트를 리턴함)
// app.js 메시지 수신 설정
function HeadlessCheck({isHeadless}) {
const queryClient = new QueryClient();
if (isHeadless) {
// App has been launched in the background by iOS, ignore
return <SafeAreaView style={{flex: 1, backgroundColor: '#ffffff'}}></SafeAreaView>;
}
return (
<QueryClientProvider client={queryClient}>
<Provider store={store}>
<App />
</Provider>
</QueryClientProvider>
);
}
messaging().setBackgroundMessageHandler(onMessageReceived);
function onMessageReceived(message) {
localNoti.fire({
title: '알림 수신',
message: '백그라운드 알림 수신 성공!!'
})
}
AppRegistry.registerComponent(appName, () => HeadlessCheck);
# localNoti는 @react-native-community/push-noitification-ios 와
react-native-push-notification으로 만든 클래스 인스턴스이다.
테스트 결과
setBackgroundMessageHandler는 여전히 멍청이였다.
원인은 생각보다 더 멍청한 나에게 있었다.
프로젝트내에
setBackgroundMessageHandler 리스너가 2개가 있었고
다른 한곳에 등록된 setBackgroundMessageHandler가
동작중이었던 것이다.
따라서, 위 설정에 따라 셋업했다면
설정상에 문제는 없는거로!
[ 푸시알림 완벽구현 - 최종판 ]
https://honeystorage.tistory.com/306
[ 참고 ]
https://github.com/invertase/react-native-firebase/issues/5656
https://notifee.app/react-native/docs/installation