Android에서 google-services.json을 넣지 않고 FCM에서 Push 수신

FCM (Firebase Cloud Messaging)을 사용한 Push 알림시,
일반적으로 google-services.json을 app 폴더 아래에 배치하여 구현하고 싶습니다.

google-services.json은 FCM 계정 (및 프로젝트)에 연결되는 json 파일이며,
기본적으로 하나의 FCM 계정의 메시지만 검진할 수 있습니다.

같은 앱에서 사용자가 보낸 FCM 계정을 전환하고 싶다는 이야기가 있었기 때문에
그 조사의 메모 쓰기가됩니다.

전제 사항



전제 사항은 google-services.json을 배포 한 상태에서 FCM의 푸시 알림이 도착한 환경이라고 가정합니다.

푸시 알림을 받지 못한 경우 문제를 구분하기 위해 설정이 부족한지 여부
이번 설정이 효과가 없었는지를 구별하기 위해 상기 전제가 되고 있습니다.
그래서 google-services.json있는 상태와의 차이에 대한 설명입니다.

google-services plugin의 주석 처리



google-services.json을 찾는 google-services plugin 로드를 중지합니다.
여기가 있으면 google-services.json을 제거하면
google-services.json을 찾을 수 없다는 오류가 발생합니다.


google-services.json에서 필요한 정보 가져오기



나중에 google-services plugin이 수행하는 google-services.json 파일을 검색하는 대신 구현하기 때문에
google-services.json에서 [프로젝트 ID], [응용 프로그램 ID], [API 키]를 복사하여 저장하십시오.
나중에 사용합니다.

google-services.json
{
  "project_info": {
    "project_number": "XXX",
    "project_id": "[プロジェクトID]",
    "storage_bucket": "XXX"
  },
  "client": [
    {
      "client_info": {
        "mobilesdk_app_id": "[アプリケーションID]",
        "android_client_info": {
          "package_name": "XXX"
        }
      },
      "oauth_client": [
        {
          "client_id": "XXX",
          "client_type": 3
        }
      ],
      "api_key": [
        {
          "current_key": "[APIキー]"
        }
      ],
      "services": {
        "appinvite_service": {
          "other_platform_oauth_client": [
            {
              "client_id": "XXX",
              "client_type": 3
            }
          ]
        }
      }
    }
  ],
  "configuration_version": "1"
}

google-services.json 삭제



google-services.json을 찾는 방법을 멈추고 필요한 정보를 얻었으므로,
google-services.json 파일을 app 아래에서 제거합니다.
app 폴더 아래에 있는 google-services.json을 폴더를 열고 삭제합니다.

FireBase 초기화 구현



FireBase 초기화
var options = FirebaseOptions.Builder()
    .setProjectId("[プロジェクトID]")
    .setApplicationId("[アプリケーションID]")
    .setApiKey("[APIキー]")
    .build()
FirebaseApp.initializeApp(this, options)

(소스는 kotlin 프로그램입니다.)
상기를 최초로 기동하는 Activity의 onCreate등에 실장하면 push가 도착할까 생각합니다.
상황에 맞게 [프로젝트 ID], [응용 프로그램 ID], [API 키]를 변경하면,
FCM의 계정 전환 등을 할 수 있을까 생각합니다.
※어플리의 조작을 트리거에 상기를 호출해 전환을 하면,
  지워야 할 FCM 계정에서도 Push가 도착하기 때문에
처음 설치 시점에서의 전환으로 한 용이 좋습니다.

여담


FirebaseApp.initializeApp(this, options) 라고 부르지 않으면
시작 후 잠시 후 Exception이 발생하는 것 같습니다.
조작 후에 FCM을 초기화하고 싶다면,
먼저FirebaseApp.initializeApp(this)를 호출하면 Exception을 피할 수있었습니다.

참고



아래 Firebase 문서를 바탕으로 시도한 내용입니다.

좋은 웹페이지 즐겨찾기