ExpoKit iOS FCM

Gale Lee
9 min readJul 25, 2019

--

React Native 0.63 알림 설정 바로가기

ExpoKit에서는 Push 파이프라인을 직접 구현해야 합니다. 이번 시간에는 FCM(Firebase Cloud Message)에서 메세지를 보낸 다음 ExpoKit으로 개발한 앱에서 푸쉬 메세지를 수신하겠습니다.

APNS Key를 준비합니다. APNS Key가 없다면 아래 링크에 APNS Key 만드는 방법이 있습니다.

Firebase에 접속합니다.

https://firebase.google.com/?hl=ko

시작하기 버튼을 선택합니다.

프로젝트 추가를 선택합니다.

프로젝트 이름을 입력한 다음 정보를 확인하고 프로젝트 만들기 버튼을 선택합니다.

계속 버튼을 선택합니다.

왼쪽메뉴 바에서 Cloud Message을 선택합니다.

iOS 추가를 선택합니다.

iOS 번들 ID를 입력합니다. iOS 번들 ID는 https://developer.apple.com/account/resources/identifiers/list 에서 현재 설정하는 Identifier를 입력합니다.

입력을 완료했다면 앱 등록 버튼을 선택합니다.

GoogleService-info.plist 파일을 다운로드 후 보관합니다.

프로젝트 내의 ios폴더에서 확장자가 xcworkspace인 파일을 실행합니다.

Xcode가 열리면 GoogleService-info.plist 파일을 expokit 폴더 아래에 복사해서 붙여넣습니다.

GoogleService-info.plist 파일을 드래그 앤 드랍 할 때에 Copy items if needed 옵션을 선택합니다.

GoogleService-info.plist 파일이 expoKit 폴더 아래에 붙여넣기 된 것을 확인합니다.

Podfile을 열어서 pod ‘React’ 위에 pod ‘Firebase/Messaging’ 을 추가합니다.

pod 'Firebase/Messaging'

터미널을 열어서 프로젝트의 ios폴더로 이동 한 다음, Firebase Cloud Message 네이티브 모듈을 설치합니다.

pod install

프로젝트 위치에서 react-native-firebase 모듈을 설치합니다. 5.5.5 버전에서 버전충돌 이슈가 있어서 5.5.4로 진행합니다.

npm install react-native-firebase@5.5.4

설치가 완료되면 Xcode와 Dependecy를 연결합니다.

react-native link react-native-firebase

Xcode로 돌아가서 AppDelegate.m 파일을 엽니다.

@import Firebase;[FIRApp configure];

위 두 개의 설정을 스크린샷에 표시해 놓은 위치에 각각 추가합니다.

Build Target Device를 확인 한 다음 플레이 버튼을 눌러 빌드를 시작합니다. 빌드가 정상적으로 되는지 확인합니다.

APNS Key를 Firebase에 업로드 하겠습니다.

Firebase 프로젝트 상세화면에서 설정(톱니바퀴)를 선택한 다음 클라우드 메시징을 선택합니다.

업로드 버튼을 선택합니다.

찾아보기를 통해 APNS Key를 업로드 합니다. 그리고 키 ID팀 ID하고 업로드 버튼을 선택합니다.

이제 푸쉬 메세지를 받기 위한 설정이 끝났습니다. 다음은 앱에서 푸쉬 권한푸쉬 토큰을 획득하겠습니다.

import firebase from 'react-native-firebase';        componentWillMount() {firebase.messaging().hasPermission().then(enabled => { // 이미 푸쉬 권한이 있다면

if(enabled) {
firebase.messaging().getToken().then(token => { //토큰을 가져온다.
console.log("푸쉬 토큰", token)
this.notificationListener =
firebase.notifications().onNotification((notification) => {
//푸쉬가 앱에 수신되면 동작하는 이벤트 핸들러
})
})
} else { //푸쉬 권한을 획득한 적이 없다면 //푸쉬 권한을 요청
firebase.messaging().requestPermission().then(() => {
firebase.messaging().getToken().then(token => {

console.log("푸쉬 토큰", token)
})
}).catch(error => {
console.log(error)
alert("Error", error)
})
}})

푸쉬 권한을 요청할 화면에 소스를 추가합니다. 저는 앱을 실행하면 가장 먼저 뜨는 로그인 후 메인화면에 추가했습니다.

소스는 React-Native-Firbase를 참고하였습니다.

Xcode에서 디바이스를 연결 한 다음 디바이스에서 App을 실행하겠습니다.

라이트닝 케이블로 Mac 과 단말기를 연결하면 Build Target Device에 단말기가 추가됩니다. 추가된 단말기를 선택한 다음 빌드를 시작합니다. 빌드가 완료되면 앱이 단말기에 설치되고 앱이 자동 실행됩니다.

앱이 실행되면 단말기를 3~5회 흔들어줍니다.

모달이 나타나면 Debug JS Remotely를 선택합니다. 선택 후에는 디버그 모드로 빌드가 다시 시작되고 ReactNative Debug 브라우저 창이 열립니다.

command + option + I 키를 입력합니다.

오른쪽에 개발자 도구가 나타납니다. Console을 선택하고 앱을 다시 시작합니다.

푸쉬 권한을 요청하는 모달이 나옵니다.

허용을 선택 한 다음 디버그 모드의 개발자 도구 Console 창을 확인합니다.

푸쉬 토큰 값을 복사해둡니다.

https://console.firebase.google.com/u/0/ Firebase로 이동합니다. 푸쉬 설정을 했던 프로젝트를 선택합니다.

왼쪽메뉴에서 Cloud Message를 선택합니다. 그 다음 Send your first message버튼을 선택합니다.

알림 제목알림 텍스트입력한 다음 테스트 메시지 전송 버튼을 선택합니다.

복사해둔 푸쉬 토큰 값붙여넣기 한 다음 추가(+)버튼을 선택합니다.

테스트 버튼을 선택하면 단말기로 푸쉬 메시지가 발송됩니다.

짜짠~! 푸쉬가 도착했습니다^^

Firebase 사이트를 통해서 푸쉬 메세지를 발송하는 방법외에도 Firebase Admin SDK로 푸쉬서버를 구현하는 방법이 있으니 상황에 맞게 선택할 수 있습니다.

ExpoKit으로 변환 후에 Xcode, 빌드, 푸쉬 등등 여러가지 이슈가 있었고 하나하나 이슈를 정리해나가면서 ExpoKit에 익숙해진 것 같습니다. 조금이나마 도움이 되었으면 합니다.

--

--

Responses (1)