한 줄로
iOS 의 웹 푸시 알림은 사파리 탭에서 열어둔 페이지에는 아예 켤 수 있는 옵션이 나오지 않는다. 홈 화면에 추가해서 그 아이콘으로 실행한 뒤에야 알림 권한 UI가 등장한다. 어제 맥미니 쪽 에이전트 원격 제어 도구를 폰에 붙이며 이 설정 절차를 확인했다.
웹 푸시가 뭔가
웹 푸시(Web Push)는 네이티브 앱을 설치하지 않고도 웹페이지가 서버로부터 알림을 받는 기능이다. 서버가 푸시 서비스에 알림을 보내고, 브라우저가 등록해 둔 구독(subscription) 정보를 근거로 기기에 띄운다. 이번 설정에서는 VAPID 키 생성 뒤 푸시 알림을 확인했다.
여기서 중요한 것은 구독이 없으면 보낼 곳이 없다는 점이다. 서버 쪽 설정이 전부 맞아도, 기기에서 알림을 켜서 구독을 만들지 않으면 전송 대상은 0개다. 어제 겪은 것이 정확히 이 상태였다.
실제로 겪은 것
어제 한 작업은 맥미니를 원격 제어 도구(collie)에 페어링하고, 폰으로 푸시 알림을 받게 만드는 것이었다.
페어링 코드는 1회용이고 10분에 만료된다
기존 페어링 코드가 만료돼 있었다. 페어링 코드는 1회용이면서 10분 만료라, 전날 발급해 둔 코드(이전 발급분)가 전부 무효가 돼 있었다. 새 코드를 발급해서 썼다. 아래 URL은 호스트와 코드를 가린 형태다.
https://<머신-호스트>.ts.net/settings?pair=<새-페어링-코드>
기기명을 “맥미니” 로 05:51 에 등록하고, 05:53 에 접속을 확인했다.
페어링이 끝났는데 구독이 0개였다
페어링 직후 확인했을 때 푸시 구독은 없는 상태였다. 페어링(기기를 신뢰 목록에 등록하는 것)과 푸시 구독(알림을 받겠다고 브라우저가 등록하는 것)은 별개의 단계라서, 앞을 끝내도 뒤가 자동으로 따라오지 않는다.
폰에서 알림을 켠 뒤 테스트를 보내니 이렇게 나왔다.
collie push-test
# ✓ sent "맥미니 테스트" to 1 device(s)
to 1 device(s)로 한 기기에 전송됐음을 확인했고, 실제 수신도 확인했다. 알림을 켜기 전 push-test 결과는 기록하지 않았다.
로그의 disabled 는 과거 기록이었다
로그의 disabled 줄들은 VAPID 키를 생성하기 이전의 과거 기록이었다. 지금 상태와 무관하므로 무시해도 되는 줄이다.
그래서 iOS 에서는 이 순서를 지켜야 한다
앞에서 말한 전제가 여기서 온다. 사파리 탭에서 연 페이지에는 iOS 가 푸시 옵션 자체를 주지 않는다. 순서는 이렇다.
- 사파리에서 해당 페이지를 연다
- 공유 → 홈 화면에 추가
- 추가된 아이콘으로 실행한다 (탭에서 열면 안 된다)
- Settings → notifications 를 켠다
4번이 끝나야 구독이 생기고, 그때부터 push-test 의 대상이 1 이상이 된다.
머신을 두 대 붙이는 경우 함정이 하나 더 있다. 두 머신의 홈 화면 아이콘이 동일해서 어느 쪽인지 구분이 안 된다. 홈 화면 추가 시 이름을 서로 구분되게 붙여두는 게 낫다.
마무리된 상태
| 회사 맥 | 맥미니 | |
|---|---|---|
| collie | 실행 중 | 실행 중 |
| 페어링 | ✅ | ✅ “맥미니” |
| 푸시 알림 | ✅ 수신 확인 | ✅ 수신 확인 |
| 에이전트 | 14개 | 8개 |
두 머신 합쳐 에이전트 22개를 폰에서 보고 조종할 수 있게 됐다. 둘 다 재부팅 후 자동 실행된다.
자주 쓰는 명령은 이 정도다.
collie status # 로컬 머신 상태
collie pair # 기기 추가 (10분짜리 코드/QR)
collie push-test # 구독된 기기로 테스트 알림
원격 머신은 ssh <호스트> 'collie status' 처럼 같은 명령을 SSH 로 감싸서 쓴다.
편의와 맞바꾼 것
폰에서 승인을 누르는 것은 그 머신에 코드를 쓰도록 허가하는 행위다. 작은 화면에서 diff 를 대충 보고 넘기기 쉬우므로, 급하지 않은 건 데스크톱에서 확인하기로 했다.
기기를 잃어버린 경우는 앱 설정에서 해당 기기의 페어링을 해지하면 즉시 차단된다. 페어링이 기기 단위로 관리되기 때문에 가능한 조치다.