Etc

iOS 웹푸시란?

맥미니 페어링 뒤 푸시 구독은 별도로 켰다. iOS에서는 홈 화면 아이콘으로 실행한 뒤 알림을 설정했다

한 줄로

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 가 푸시 옵션 자체를 주지 않는다. 순서는 이렇다.

  1. 사파리에서 해당 페이지를 연다
  2. 공유 → 홈 화면에 추가
  3. 추가된 아이콘으로 실행한다 (탭에서 열면 안 된다)
  4. Settings → notifications 를 켠다

4번이 끝나야 구독이 생기고, 그때부터 push-test 의 대상이 1 이상이 된다.

머신을 두 대 붙이는 경우 함정이 하나 더 있다. 두 머신의 홈 화면 아이콘이 동일해서 어느 쪽인지 구분이 안 된다. 홈 화면 추가 시 이름을 서로 구분되게 붙여두는 게 낫다.

마무리된 상태

  회사 맥 맥미니
collie 실행 중 실행 중
페어링 ✅ ✅ “맥미니”
푸시 알림 ✅ 수신 확인 ✅ 수신 확인
에이전트 14개 8개

두 머신 합쳐 에이전트 22개를 폰에서 보고 조종할 수 있게 됐다. 둘 다 재부팅 후 자동 실행된다.

자주 쓰는 명령은 이 정도다.

collie status      # 로컬 머신 상태
collie pair        # 기기 추가 (10분짜리 코드/QR)
collie push-test   # 구독된 기기로 테스트 알림

원격 머신은 ssh <호스트> 'collie status' 처럼 같은 명령을 SSH 로 감싸서 쓴다.

편의와 맞바꾼 것

폰에서 승인을 누르는 것은 그 머신에 코드를 쓰도록 허가하는 행위다. 작은 화면에서 diff 를 대충 보고 넘기기 쉬우므로, 급하지 않은 건 데스크톱에서 확인하기로 했다.

기기를 잃어버린 경우는 앱 설정에서 해당 기기의 페어링을 해지하면 즉시 차단된다. 페어링이 기기 단위로 관리되기 때문에 가능한 조치다.