FCM 인증키 발급부터 Android와 iOS 앱 소스 적용 위치까지 순서대로 확인하세요.
웹 서버가 Android와 iOS 기기로 푸시를 발송할 때 사용하는 서버 인증 파일입니다.
project_id가 앱에 등록한 Firebase 프로젝트와 같은지 확인합니다. Google Cloud Console의 해당 프로젝트에서 서비스 계정에 Firebase Cloud Messaging API 관리자 역할(roles/firebasecloudmessaging.admin)을 부여하고 Firebase Cloud Messaging API를 사용 설정합니다.서비스 계정 JSON은 웹 관리자에만 등록합니다. 앱 소스나 Git에는 넣지 마세요. 업로드 내용은 검증 후 DB에 저장되고 원본 파일은 서버에 남지 않습니다.
JSON 파일을 발급한 뒤 동일한 Google Cloud 프로젝트에서 메시지 발송 API와 서비스 계정 권한을 설정해야 실제 Push를 보낼 수 있습니다.
project_id와 Firebase 앱 프로젝트 ID가 같아야 합니다.client_email 서비스 계정에 FCM API 관리자 역할을 부여합니다.project_id와 같은 프로젝트를 선택합니다.client_email 값을 입력합니다.roles/firebasecloudmessaging.admin)를 선택하고 저장합니다.권한 오류가 계속되면 다른 프로젝트에 역할을 부여하지 않았는지, 등록한 주 구성원이 JSON의 client_email과 정확히 같은지 확인하세요. 권한 변경 반영에는 잠시 시간이 걸릴 수 있습니다.
서버 발송용 서비스 계정 JSON과 앱 수신용 설정 파일은 서로 다릅니다. Android와 iOS에 맞는 파일을 각각 내려받아 아래 고정 경로에 복사하세요.
android/app-config.properties의 app.id와 같은지 확인하고 google-services.json을 받습니다.google-services.json을 android/app/google-services.json에 복사한 뒤 Android Studio에서 Sync/Rebuild 합니다.ios/Config.xcconfig의 PORTAL_BUNDLE_ID와 같은지 확인하고 GoogleService-Info.plist를 받습니다.GoogleService-Info.plist를 ios/GoogleService-Info.plist에 복사하고 PortalHybridPush.xcworkspace에서 다시 빌드합니다.android/app/google-services.jsonios/GoogleService-Info.plist파일을 서로 바꾸어 넣으면 안 됩니다. 서비스 계정 JSON은 웹 관리자에 업로드하고, google-services.json과 GoogleService-Info.plist는 각 앱 프로젝트에만 복사합니다. 세 파일 모두 Git에는 올리지 마세요.
iOS 기기로 FCM Push를 보내려면 Apple Developer에서 만든 APNs 인증키를 Firebase의 iOS 앱 구성에 연결해야 합니다.
AuthKey_XXXXXXXXXX.p8를 내려받고 화면의 Key ID를 기록합니다..p8 파일, Key ID, Team ID를 등록합니다..p8 파일은 한 번만 다운로드할 수 있습니다. 분실하면 기존 키를 폐기하고 새 키를 발급해야 합니다. 이 파일은 iOS 소스, Portal Hybrid Push 웹 관리자 또는 Git에 넣지 않고 Firebase Console에만 등록하세요.
Android Studio에서 프로젝트를 열기 전에 설정 파일, Firebase 파일과 앱 로고를 배치합니다.
android/app-config.properties.example을 복사해 android/app-config.properties를 만듭니다.app.id, app.name, app.master.key, 버전과 사이트 주소를 입력합니다.app.id와 같게 등록하고 받은 google-services.json을 아래 위치에 넣습니다.android/app-config.propertiesandroid/app/google-services.jsonandroid/app/src/main/res/drawable-nodpi/portal_app_logo.png로고 ZIP은 소스 최상위 폴더에 압축을 풀고 drawable/ic_launcher.xml과 drawable-nodpi/portal_app_logo.png 두 파일만 덮어씁니다. android 또는 app 폴더 전체를 삭제·교체하지 말고 Android Studio에서는 소스의 android 폴더를 여세요. 알림창의 작은 단색 아이콘 ic_notification.xml은 별도 규격이라 유지합니다.
Config.xcconfig와 Firebase plist를 준비한 뒤 CocoaPods workspace에서 빌드합니다.
Mac 컴퓨터가 반드시 필요합니다. CocoaPods 설치, Xcode workspace 열기, Signing 설정, iOS 빌드와 실기기 실행은 macOS와 Xcode에서 진행해야 합니다.
ios/Config.xcconfig.example을 복사해 ios/Config.xcconfig를 만듭니다.PORTAL_BUNDLE_ID, 앱 이름, 버전, 사이트 주소와 Master Key를 입력합니다.GoogleService-Info.plist를 아래 위치에 넣습니다.pod install 후 PortalHybridPush.xcworkspace를 열고 Signing, Push Notifications와 Background Modes를 확인합니다.ios/Config.xcconfigios/GoogleService-Info.plistios/PortalHybridPush/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.pngiOS 대표 로고는 투명도가 없는 1024×1024 PNG만 사용합니다. 설정 변경 후 Xcode에서 Product → Clean Build Folder를 실행하고 기존 앱을 삭제한 뒤 다시 설치하세요.
기본환경설정에서 대표 PNG 한 장으로 Android와 iOS용 파일을 함께 만듭니다.
drawable/ic_launcher.xml과 drawable-nodpi/portal_app_logo.png 두 파일만 덮어씁니다.android 폴더를 열고 Gradle Sync 후 공유 app 실행 구성을 선택합니다.AppIcon-1024.png를 기존 파일에 덮어씁니다.android/app/src/main/res/drawable-nodpi/portal_app_logo.pngandroid/app/src/main/res/drawable/ic_launcher.xmlios/PortalHybridPush/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png필수 이미지: 투명도가 없는 1024×1024 PNG를 사용하고 중요한 로고는 가장자리에서 충분히 띄우세요. 변경된 대표 파일은 Android와 iOS의 홈 아이콘, 시작화면과 네이티브 로그인 로고에 동일하게 사용됩니다.
Play Console에서 앱을 만들고 스토어 정보와 Android App Bundle을 등록합니다.
.aab를 만들고 테스트 → 내부 테스트부터 업로드해 설치와 로그인을 확인합니다.android/app-config.properties → app.idandroid/app/build/outputs/bundle/release/app-release.aabPlay Console에 처음 업로드한 패키지명은 변경할 수 없습니다. app.id, Firebase Android 패키지명과 Play Console 패키지명이 모두 같아야 합니다. 신규 개인 개발자 계정은 Google이 요구하는 테스트 조건을 먼저 완료해야 할 수 있습니다.
Apple Developer에서 Bundle ID를 준비하고 App Store Connect에 앱 레코드를 생성합니다.
Mac 컴퓨터가 반드시 필요합니다. App Store Connect의 정보 입력은 웹에서 할 수 있지만, iOS 프로젝트 열기·빌드·서명·Archive·TestFlight 및 App Store 업로드는 macOS와 Xcode에서만 진행할 수 있습니다.
ios/Config.xcconfig → PORTAL_BUNDLE_IDios/PortalHybridPush.xcworkspaceApp Store Connect 앱을 만들기 전에 Account Holder가 최신 계약에 동의해야 합니다. PORTAL_BUNDLE_ID, Apple App ID, Firebase iOS Bundle ID와 App Store Connect의 Bundle ID는 모두 같아야 합니다.