ngx_mruby에서 iOS에 Push 알림을 보았습니다. (Parse.com을 통해)

2905 단어 Parsengx_mrubymruby
Parse.com에는 REST API에서 각종 디바이스로의 Push를 킥하는 구조가 있으므로, 그럼 Nginx가 밀어도 괜찮다고.

iOS 푸시 포함



Push를 받는 쪽에 대해서는 문서를 쫓아 갔을 뿐이므로 글머리 기호.
  • Apple Dev Center에서 한 세트를 모은다.
  • push 개미의 앱용 인증서 작성 & Push용 인증서 작성 & 등록
  • 장치 등록
  • 앱 및 기기가 포함된 프로비저닝 프로필 만들기(Developer)

  • Parse.com에서 앱 등록
  • 앱 푸시에 사용할 인증서를 등록

  • 알림용 빈 앱 배포
  • ParseStarterProject-Swift를 XCode로 빌드
  • 기기에서 앱을 시작하고 푸시 허용

  • Parse.com에서 단말기 등록 확인
  • 다음 채널 Nginx Subscribe (필기)


  • ngx_mruby에서 외부 HTTPS 요청에 대한 mgem 추가



    ngx_mruby에 처음부터 준비되어 있는 샘플의 build_config.rb 에 대해서, 추가한 것은 이들.
  • mruby-httprequest
  • mruby-polarssl

  • ※ 이번은 약간의 사정(우연히?)로 s/mruby-onig-regexp/mruby-pcre-regexp/ 라고 하는 변경도 했다.

    그럼 샘플 코드



    사용 장소로서는, 뭔가 불편함이나 공격이 있던 타이밍에 사용할 수 있을까라고 생각하고 있었습니다.
    그러나, 우선은 간단하게 이 방침.
  • 누군가가 사이트를 방문하면
  • IP를 iOS에 신고

  • 해보자.
    location / {
      mruby_content_handler_code '
        Server = Nginx
    
        c = Server::Connection.new
    
        http = HttpRequest.new()
        res = http.post(
               "https://api.parse.com/1/push",
               JSON.generate({
                  "channels" => ["Nginx"],
                  "data"  => {"alert" => "Your site was visited from #{c.remote_ip} ."}
                }),{
                "Content-Type"           => "application/json",
                "X-Parse-Application-Id" => "Parseのアプリケーションキー",
                "X-Parse-REST-API-Key"   => "ParseのREST APIキー"
                })
    
        Nginx.errlogger Nginx::LOG_WARN, res["status"]
    
        Server.echo "reported your access."
      ';
    }
    

    브라우저에서 요청함



    조금 Docker로 시작한 서버에 브라우저로 리퀘스트. 신고되었다.



    리퀘스트 처리중에 동기 처리로 Parse를 두드리고 있으므로, 나름대로 기다리는 것은 (이번은) 어쩔 수 없다고. . .
    Nginx 측의 로그는 Parse의 반환이 200 OK임을 기록했습니다.
    2015/09/02 xx:xx:xx [warn] 1#0: *1 200 OK, client: 192.168.99.1, server: _, request: "GET / HTTP/1.1", host: "192.168.99.100:8080"
    

    푸시 알림 확인



    그리고 Push는 왔다.



    무언가에 외부에의 요구를 사용한다면, 괜찮은 일 워커 프로세스가 통째로 기다리지 않게 쓰고 싶네요.

    추가:

    메모리가 무진장하고 외부 API의 응답이 클라이언트에 대해 불필요하다면 더블 포크로 둘러싸자는 손이 있다.

    좋은 웹페이지 즐겨찾기