갤럭시 알림을
맥에서 그대로.

iPhone + Mac 조합에만 있던 알림 연동을, Galaxy 사용자에게도. NotiRelay는 Android에서 수신된 카톡·메시지·앱 알림을 종단 간 암호화된 채로 Firestore를 거쳐 macOS 네이티브 알림으로 띄웁니다. 별도 서버 없음, 무료.

Firebase 서버리스AES-256-GCMmacOS 12+ / Android 10+

3개의 컴포넌트, 0개의 서버.

NotiRelay는 자체 백엔드를 운영하지 않습니다. Android 앱이 알림을 캡처해 암호화 후 Firestore에 기록하고, Mac 앱은 같은 Google 계정으로 실시간 구독만 합니다.

Sender
Android
NotificationListenerService로 알림 캡처 → 암호화 → write
Transport
Firestore
Firebase Auth + Security Rules로 사용자 격리
Receiver
macOS
실시간 구독 → 복호화 → 네이티브 알림 표시
Cost
₩0 / 월
Firebase Spark 무료 한도 내 운영 (~50명)

자잘한 기능 목록 대신,
꼭 필요한 6가지.

FEAT_01

여러 폰, 하나의 Mac

업무폰·개인폰·서브폰을 한 계정으로 등록하면, Mac 알림함에 기기명 배지로 구분되어 표시됩니다. 기기별로 수신 ON/OFF 토글 가능.

FEAT_02

앱별 화이트리스트

카톡·메시지·라인·전화 등 지정한 앱의 알림만 포워딩합니다. 쇼핑·게임 광고 알림이 Mac까지 따라오지 않게.

FEAT_03

E2E AES-256-GCM

알림 제목·본문은 기기에서 암호화된 뒤 Firestore로 올라갑니다. 패스프레이즈를 모르면 운영자조차 내용을 볼 수 없습니다.

FEAT_04

Foreground Service

삼성의 공격적인 배터리 최적화에도 살아남도록 포그라운드 서비스로 상주. 재부팅 후에도 알림 리스너 자동 복구.

FEAT_05

실시간 동기화

Firestore snapshot listener 기반 100ms~수초 내 전파. 폴링 없음, 배터리 영향 미미.

FEAT_06

30일 자동 정리

Mac 앱 실행 시 30일 초과 알림을 자동 삭제해 Firestore 무료 한도(1GB) 내에서 계속 운영됩니다.

키는 서버에 없습니다.
오직 당신 기기에만.

NotiRelay는 클라이언트 사이드 암호화만 사용합니다. Firebase는 암호문을 보관·중계할 뿐, 키 유도에 필요한 패스프레이즈에는 접근할 수 없습니다.

Android (Sender)
카톡 알림 · 평문
AES-256-GCM 암호화
Firestore (transport)
ciphertext + IV만 존재
macOS (Receiver)
로컬 키로 복호화
네이티브 알림 표시
Key Derivation
passphrase
+
salt (32B)
PBKDF2 × 100k
→ flutter_secure_storage · Keystore / Keychain

위협 모델

DB 유출
암호문만 노출, 키 없이 복호화 불가
관리자 접근
Firebase 운영자도 내용 확인 불가
기기 분실
OS 보안 모듈(Keystore/Keychain)로 키 보호
무차별 대입
PBKDF2 100,000회 반복으로 속도 제한
데이터 위변조
GCM 128-bit 인증 태그로 무결성 보장
IV 재사용
알림마다, 제목·본문 각각 별도 랜덤 IV 생성
암호화되지 않는 필드: deviceId, deviceName, appPackage, appName, timestamp, isRead — Firestore 쿼리와 UI 배지 표시를 위해 평문으로 유지됩니다.

솔직한 트레이드오프.

개인이 만든 무료 유틸리티입니다. 설치 전에 아래 제약들을 반드시 확인하세요.

LIM_01
플랫폼

Galaxy → Mac 단방향만 지원

현 MVP는 Android에서 Mac으로의 알림 포워딩만 구현합니다. Mac의 알림을 Android로 보내거나, Windows 수신 앱, iPhone 송신 앱은 로드맵에 있지만 미구현 상태입니다.

LIM_02
기능

답장·dismiss 동기화 없음

Mac에서 알림을 읽거나 삭제해도 Android 원본 알림은 그대로 남습니다. 카톡 답장 기능(RemoteInput)도 미지원. 알림은 읽기 전용 뷰어로 생각해주세요.

LIM_03
규모

Firebase 무료 한도: ~50명

서버리스 구조상 Firestore Spark 플랜(일 20K writes, 50K reads, 1GB)에 의존합니다. 50명 초과 시 월 $1~5의 Blaze 전환이 필요할 수 있습니다. 이 때는 서비스를 중단할 수 있습니다.

LIM_04
복구불가

패스프레이즈 분실 = 복구 불가

E2E 암호화의 필연적 제약입니다. 패스프레이즈를 잊으면 기존 알림은 모두 복호화 불가(재설정 후 신규 알림만 수신). 비밀번호 관리자 사용을 권장합니다.

LIM_05
배터리

삼성 배터리 최적화 수동 설정 필요

One UI의 공격적인 백그라운드 제한 때문에 설정 → 배터리 → 백그라운드 사용 제한에서 앱을 제외해야 합니다. 안 그러면 몇 시간 후 리스너가 킬됩니다.

LIM_06
배포

스토어 미등록 — 수동 설치

Play Store / Mac App Store 미배포. APK는 "출처를 알 수 없는 앱 설치" 허용 후 사이드로드, DMG는 Gatekeeper 우회(우클릭 → 열기)가 필요합니다.

LIM_07
메타데이터

앱 이름·발생 시각은 평문

쿼리·필터링을 위해 appName, deviceName, timestamp는 암호화되지 않습니다. "누가, 뭘 말했는지"는 보호되지만 "언제, 어느 앱의 알림이 왔는지"는 Firestore에서 관찰 가능합니다.

두 개의 앱, 한 번의 로그인.

두 기기에 각각 설치한 뒤 같은 Google 계정으로 로그인하면 자동으로 페어링됩니다. 별도 QR이나 코드 교환은 없습니다.

macOS · Receiverv0.1.0 · arm64 + x86_64

NotiRelay for Mac

알림을 실시간 수신해 macOS 네이티브 알림으로 표시하고, 읽은 알림 히스토리를 관리합니다.

macOS 12 Monterey 이상Apple Silicon · Intel 유니버설설치 용량 ~ 50 MBSHA-256: a41f…c9e2
Android · Senderv0.1.0 · arm64-v8a

NotiRelay for Android

Android 알림을 캡처해 암호화 후 Firestore로 전송합니다. 포그라운드 서비스로 백그라운드 상주.

Android 10 (API 29) 이상One UI 5.0 이상 권장 (Galaxy)설치 용량 ~ 100 MBSHA-256: d77b…1aa3

5분 안에 첫 알림 확인.

Android 먼저 설치·설정한 뒤 Mac에 동일 Google 계정으로 로그인, 같은 패스프레이즈를 입력하면 끝입니다.

1

APK 사이드로드 허용

설정 → 앱 → 특별한 접근 → 알 수 없는 앱 설치에서 Chrome 또는 다운로드 관리자에 권한을 주세요.

2

APK 설치 & 실행

위의 NotiRelay-0.1.0.apk를 다운로드 후 탭하여 설치하고 앱을 실행합니다.

3

Google 계정 로그인

Mac에서도 사용할 Google 계정으로 로그인합니다. 같은 계정이 Android와 Mac을 연결하는 유일한 페어링 수단입니다.

4

알림 접근 권한

앱이 가이드하는 대로 알림 접근 특별 권한을 허용하세요. 이 권한이 있어야 NotiRelay가 다른 앱의 알림을 읽을 수 있습니다.

NoteAndroid가 "이 앱이 모든 알림을 읽을 수 있게 됩니다"라고 경고합니다. 정상입니다. NotiRelay는 지정한 화이트리스트 앱의 알림만 Firestore로 전송합니다.
5

배터리 최적화 예외

Galaxy는 기본적으로 백그라운드 앱을 공격적으로 종료합니다. 설정 → 배터리 → 백그라운드 사용 제한 → 절대 잠자기 않는 앱에 NotiRelay를 추가하세요.

6

기기 이름 & 화이트리스트 설정

"업무폰"·"개인폰"처럼 기기 이름을 지정하고, 포워딩할 앱을 체크합니다. 기본값: 메시지, 카카오톡.

7

암호화 패스프레이즈 설정가장 중요

8자 이상의 패스프레이즈를 설정합니다. 이 값은 서버로 전송되지 않고 기기에서 AES-256 키로 유도됩니다.

경고이 패스프레이즈는 Mac 앱 최초 실행 시 동일하게 입력해야 합니다. 분실 시 기존 알림은 복구 불가능합니다. 반드시 비밀번호 관리자에 저장하세요.

FAQ.

개인 Google 계정만 써야 하나요?

예. Android와 Mac 모두 동일한 Google 계정으로 로그인하는 것이 유일한 페어링 방식입니다. 회사 Workspace 계정도 동작하지만, 관리자가 서드파티 앱 로그인을 제한해두면 실패할 수 있습니다.

몇 대까지 등록할 수 있나요?

같은 Google 계정에 Android 기기 여러 대를 등록할 수 있고, 각 알림은 기기명 배지로 Mac에서 구분됩니다. Mac은 여러 대에 같은 계정으로 로그인하면 모든 Mac이 동일하게 알림을 수신합니다.

카톡 답장을 Mac에서 할 수 있나요?

아니요. 현 MVP는 읽기 전용입니다. 답장 기능은 구현 고민중에 있습니다.

iPhone이나 Windows는 언제 지원되나요?

MVP 스펙 외입니다. iPhone의 경우 시스템 수준 알림 접근 권한 자체를 앱에 내주지 않기 때문에 기술적으로 불가합니다. Windows Receiver는 Flutter Windows 타겟을 추가하면 가능하지만 우선순위가 낮습니다.

Firebase 무료 한도를 초과하면 어떻게 되나요?

Spark 플랜 한도 초과 시 Firestore writes/reads가 일시 차단됩니다. 본인이 만든 Firebase 프로젝트에 본인 자격증명으로 로그인하는 구조라면, 본인이 직접 Blaze로 업그레이드할 수 있습니다. 유료 과금이 시작되면 서비스를 중지할 수 있습니다.

알림 내용이 Google Analytics나 Firebase Crashlytics에 찍히나요?

아니요. Analytics는 포함되지 않았고, Crashlytics가 활성화되어도 알림 제목·본문 평문은 로그에 남기지 않습니다. 모든 로깅 경로에서 암호화된 상태로만 취급됩니다.

오픈소스인가요?

개인 프로젝트로 출발했으며 스펙 문서와 보안 설계를 투명하게 공개합니다. 저장소 공개 여부는 검토 중입니다.