백엔드 측에서 Firebase Cloud Messaging의 REAL 구현

7173 단어 elixirbackendfirebase

왜요?



푸시 알림을 구현하려는 경우 모든 firebase 문서에서 사용이 필요하다고 알려줍니다the new http v1.1 api. 이 이전 API는 더 많은 API 키(source here)를 생성하지 않기 때문에 가까운 장래에 이전 API가 사용되지 않을 것이므로 다음을 사용하세요. 새로운 것 새로운 앱에 대한 비판

백엔드가 사용 가능한 API 라이브러리 목록에 없거나 Google API 라이브러리에 있는 다른 모든 항목 없이 직접 구현하려는 경우 이 게시물이 있습니다.

전제 조건



  • Firebase 콘솔의 Create your project
  • 이동:
  • 프로젝트 설정
  • 서비스 계정 탭

  • 새 개인 키를 생성하고 파일을 다운로드합니다
  • .


    핵심 문제



    fcm api url에 대한 게시물에서 send message to multiple devices을 이미 본 경우 알림을 승인하기 위해 Bearer api 토큰이 필요했고 문제는 여기, htf! API 토큰을 만들 수 있습니까? 페이지와 여기 어려운 부분은 어디에도 없습니다.

    나에게 문제를 주지 말고 해결책을 줘



    간단하지만 Google은 친구가 자신의 문서를 읽기를 원합니다. 여기에 요약이 있으니 걱정하지 마세요.

    첫 번째 단계는 Cloud Console의 Api 자격 증명 탭으로 이동합니다.

    Change to your project in top, its important!



    Firebase 프로젝트는 이미 OAuth2.0 클라이언트를 생성했으므로 클라이언트를 열고 데이터를 확인하기만 하면 됩니다. 두 가지가 필요합니다.
  • 이 도메인을 리디렉션 URI에 추가합니다you need implement an jwt cycle in your backend and use the access token and refresh when expires.
  • 클라이언트 ID 복사
  • 클라이언트 암호 복사(여전히 하나로 계산!)

  • 그리고 이것이 비밀입니다!, 이것을 엽니다 Google OAuthPlayground (uri를 리디렉션하기 위해 추가한 것과 동일한 링크)



    이게 뭐야?



    OAuth2.0을 사용하는 놀이터입니다. 지침을 확인하여 무슨 일이 일어나고 있는지 확인하십시오.

    페이지에서 설정 패널(오른쪽에 있음! 큰 기어 아이콘)을 열고 "자신의 OAuth 자격 증명 사용"상자를 선택합니다. 예, 여기에 클라이언트 ID와 클라이언트 암호를 추가한 다음 왼쪽 하단에 추가합니다. Google FCM 권한 URL

    https://www.googleapis.com/auth/firebase.messaging
    


    그리고 Authorize APIs(API 승인) 파란색 버튼을 클릭하면 Google 화면에서 클래식 인증으로 이동하고 허용 또는 거부할 수 있습니다. 물론 허용을 클릭하세요.

    다음 화면에서 모든 토큰이 설정되었습니다. 토큰에 대한 인증 코드 교환 파란색 버튼을 클릭하면 access_token 및 refresh_token(및 추가 데이터)을 가져온 다음 다음 화면으로 이동하지만 뒤로 돌아갈 수 있습니다. 이 버튼에서



    돌아가서 액세스 토큰 새로 고침 회색 버튼을 누릅니다. 이것은 당신의 운명, 목표 요청 예제입니다. 새로 고침 토큰, 클라이언트 ID 및 클라이언트 암호를 저장하고 백엔드에서 API에 대한 호출과 그 모든 것을 복제하면 됩니다. 이제 백엔드에서 이 귀중한 푸시 메시지를 더 쉽게 보낼 수 있습니다.

    다음은 Elixir에 대한 구현입니다.

    defmodule Gooogle.Auth.Jwt do
      @tesla_client Tesla.client([
                      {Tesla.Middleware.BaseUrl, "https://oauth2.googleapis.com"},
                      Tesla.Middleware.FormUrlencoded
                    ])
    
      defp oauth_refresh_token, do: Application.get_env(:my_app, :firebase)[:refresh_token]
      defp oauth_client_id, do: Application.get_env(:my_app, :firebase)[:oauth_client_id]
      defp oauth_client_secret, do: Application.get_env(:my_app, :firebase)[:oauth_client_secret]
    
      @spec refresh_token() :: map()
      def refresh_token() do
        body = %{
          client_id: oauth_client_id(),
          refresh_token: oauth_refresh_token(),
          client_secret: oauth_client_secret(),
          grant_type: "refresh_token"
        }
    
        %{status: 200, body: body} = Tesla.post!(@tesla_client, "/token", body)
    
        Jason.decode!(body)
      end
    end
    
    


    FAQ
  • 일부 Google 문서에 따르면 갱신 토큰은 만료되지 않습니다.
  • 메모리에서 시간 초과로 redis에 저장하거나 https://developers.google.com/oauthplayground가 아닌 다른 응답을 기다렸다가 즉시 새로 고칠 수 있습니다
  • .

    htf = 겁먹는 방법

    좋은 웹페이지 즐겨찾기