weeed
114
2020-05-25 15:55:53
8
602

FCM admin 파일 경로 설정에 대하여 질문드립니다.


현재 어플을 실행했을 때 어플 내부에서 FCM서버에 발송 요청을 보내는 기능을 추가하려는 한 초보 개발자입니다.

확실히 firebase의 메뉴얼도 그렇고 구글링을 해서 뒤져보면 성공하신 분도 있는 것 같은데 일반적이지 않은 방법이라서 그런지 해당 기능 추가에 대한 정보를 찾기가 어렵네요 ㅜㅜ

일단 메뉴얼 대로 admin파일 생성하여 res폴더에 raw폴더를 만들어서 그곳에 admin파일을 넣어놨습니다.

계속 안되서 라이브러리가 잘못됬나 의심하는둥 열심히 구글링하며 무엇을 잘못했나 찾아보는중에 문득 내가 지정한 경로를 못찾아서 그런것이 아닌가 하는 생각이 들어 테스트를 해봤는데... 역시 경로설정이 잘못 됬더라고요.

지금은 res폴더에 admin파일을 넣어놨는데 FileInputStream(filePath) <-- 이부분에서 해당 admin 파일을 못불러오고 있습니다.

res폴더 안에 raw폴더를 만들어서 R.raw.fcmmsg.json 파일을 경로에 넣어 보기도 하고, 실제 컴퓨터에 있는 경로를 넣어보기도 했는데 안되네요

어플이 생성됬을 때 사용해야하는만큼 R.raw.fcmmsg.json형식이 맞는것 같은데 로그에서는 경로를 찾을 수 없다고 나오네요

혹시 어플 내부 경로 불러오는 방법을 알 수 있을까요?? ㅜㅜ



String filePath ="R.raw.fcmmsg.json";


FileInputStream serviceAccount = null;
try {
serviceAccount = new FileInputStream(filePath);
Toast.makeText(getApplicationContext(), (CharSequence) serviceAccount, Toast.LENGTH_LONG).show();
Log.d("확인확인확인확인확인확인확인확인확인", String.valueOf(serviceAccount));
} catch (FileNotFoundException e) {
e.printStackTrace();
}

FirebaseOptions options = null;
/*try {
GoogleCredentials credentials = GoogleCredentials.fromStream(serviceAccount);
options = new FirebaseOptions.Builder()
.setCredentials(credentials)
.setDatabaseUrl("https://fcmsend.firebaseio.com")
.build();
} catch (IOException e) {
e.printStackTrace();
}
FirebaseApp.initializeApp(options);*/

이 코드는 현재 테스트하고 있는 코드입니다..
0
  • 답변 8

  • UnknownDontknow
    830
    2020-05-25 17:42:55

    허헛..댓글을 달아드렸었는데 잘 이해가 안되셨었나보네요. 가이드 문서에 admin모듈 설치가이드에서 자바부분 보시고 따라하시는것같은데요, 그부분은 Spring같은 자바 서버 프레임워크를 위한 것이지 안드로이드용이 아니에요. 그렇기에 gradle에서 의존성 추가부터 오류가 발생했던것일테구요. 

    이전 댓글에 달아드린대로 보안문제가 있지만 안드로이드 앱자체에서 전송은 가능해요. 아래 링크 글에서 firebase database사용 부분만 제외하고 따라하시면 되요. 포스팅글 내용에서 sendToPostToFCM 부분에서 authorization값으로 들어가는 서버키가 공개되기 때문에 보안문제가 되는것이지요.

    https://anhana.tistory.com/7



  • weeed
    114
    2020-05-25 18:33:57

    감사합니다!!

    URL쪽으로 방향을 돌리니까 성공했습니다!

    그럼 admin 파일은 서버용이라 어플에서는 읽어드려도 사용할 수 없다는 말이죠?

    덕분에 많은 도움이 됬습니다!

    url쪽으로 봤어야했는데 헛삽질을 많이 했네요

    덕분에 조금이라도 수고를 덜 했습니다 감사합니다!!

  • UnknownDontknow
    830
    2020-05-25 19:24:21

    그렇지요. 혹여 가능하다고 하더라도 해당 프로젝트의 관리자권한을 가진 사용자의 인증정보등이 들어가는 credentials 파일의 정보들을 각각의 클라이언트앱에서 읽고쓸수있다면 매우 위험하겠지요.

  • weeed
    114
    2020-05-25 20:03:44

    감사합니다!

    도움이 많이 됬어요!

    그런데 이렇게 하다보니까

     FileInputStream(filePath)에서 안드로이드 Path설정은 어디가 기본일까? 가 궁금해져서요

    C:/쪽으로 가면 어플이 배포됬을 때 사용 불가할것 같고

    R.drawable.파일명 처럼 어플 내부 저장소가 있을것 같거든요

    이미지나 동영상, txt파일 이렇게 3개 확장자만 사용가능한건지

    라이브러리 같은 파일도 이렇게 사용할 수 있는지 궁금해져서요


    사실 지금까지 도움만으로도 충분히 감사한데, 문득 궁금해져서 한번 여쭤봅니다!

  • UnknownDontknow
    830
    2020-05-25 22:31:50

    https://recipes4dev.tistory.com/125 이 글을 참고하시면 좋을듯해요.

    작성자님처럼 앱 배포시에 함께 배포되어 환경설정값으로 사용되야 할경우, 혹은 미리 저장된 로컬DB값을 사용(ex성경앱의 성경DB파일)해야 할때 등 이런경우에 assets폴더에 파일을 함께 넣어서 배포하는 경우도 있지요. 다만 assets폴더의 경우 읽어올 수 있는 파일의 용량(정확한 값은 기억이 나질 않네요.) 제한이있어서 용량을 넘는 파일은 inputStream으로 값을 읽어올 수 없을거에요. 압축, 확장자 변경등 여러 방법으로 읽어올 수 있긴한데 실제로 사용되는지는 잘모르겠네요 ㅎㅎ; 

  • weeed
    114
    2020-05-26 09:00:38

    친절한 답변 감사합니다! 어떻게 감사말을 전해드려야할지 모르겠네요!

    또 궁금한 점이 있는데 MSSQL을 직접연결을 하여 사용하고, 보안 문제는 스토어드 프로시저로 해결한다고 했을 때, 토큰값과 FCM 서버키 값을 MSSQL에 저장하고 필요할때 로드해서 사용한다해도 URL 연결시에 문제가 생기신다는거죠???

  • UnknownDontknow
    830
    2020-05-26 09:35:10

    그렇죠. 서버를 구축해서 admin모듈 사용 했을경우  서버키는 구축한 서버쪽 코드에있을테니 프로젝트 소유자만이 그값을 알수있으니 보안이 가능하지만  말씀하신방법은 모든 유저가 서버키값을 조회해서 알수있으니깐요. 어떤방식으로든 클라쪽에 민감한 정보가 노출되는 형식은 위험하다고 알고있어요.

  • weeed
    114
    2020-05-27 13:35:46

    감사합니다! 많은 도움이 되었습니다!

    친절한 답변 정말 감사합니다~

  • 로그인을 하시면 답변을 등록할 수 있습니다.