본문 바로가기

개발 공부

[Firebase] Clouding message와 Node.js 연동

170705 Cloud messaging in Firebase

1. 개념

  • 클라이언트에게 최신화된 정보, 경고 등 알림을 원할 때 사용할 수 있도록 Firebase에서 제공하는 일종의 알림 서비스이다.

2. 구현 방법

1. 안드로이드 스튜디오에서 Firebase를 연동시킨다.
  • 안드로이드 스튜디오 오른편의 assistance의 설명과 관련 코드를 참고하면 된다.

2. MyFirebaseInstanceIDService.java 코드 분석
  • 파이어베이스와 연동된 app은 최초 설치 시, 아래 MyFirebaseInstanceIDService.java 에서 token을 생성한다.
  • 초기 생성된 token은 앱 삭제 후, 재설치 하지 않는 이상 고유 번호처럼 유지된다.
// FirebaseInstanceIdService를 상속받아야 한다. 
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

      // 파이어베이스 데이터베이스 생성 및 reference 생성한다. 
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference uidRef = database.getReference("uid");

    @Override
    public void onTokenRefresh() {
        // 아래 코드가 최초 app 설치 시, token이 생성되는 코드다.
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG, "Refreshed token: " + refreshedToken);

        // 생성된 token을 sendRegistrationToServer(); 를 통해 파이어베이스 서버로 전송한다.
        sendRegistrationToServer(refreshedToken);
    }

    public void sendRegistrationToServer(String token) {

        String deviceUid = Settings.Secure.getString(
                getContentResolver(), Settings.Secure.ANDROID_ID
        );
          // 내가 작성한 Uid 객체 생성자에 값들을 넣어 uid를 초기화한 후, uid 객체 자체를 파이어베이스 서버로 보낸다. 
          // 이때 주의할 점은 파이어베이스의 경우, default 생성자가 꼭 필요하므로 Uid.class에 꼭 작성해준다.
        Log.e("UUID ----", deviceUid + "");
        Uid uid = new Uid(deviceUid, "준희", token);
        uidRef.child(deviceUid).setValue(uid);
    }
}
3. AndroidManifest.xml<service> 를 추가해준다.
  • 매니페스트에 해당 서비스를 등록하지 않으면 MyFirebaseInstanceIDService.class 가 실행되지 않아 token을 발행받을 수 없다.
 <service android:name=".MyFirebaseInstanceIDService">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
            </intent-filter>
 </service>

3. node.js와 연동하기

3.1. cloud messaging server key 발급받기
  • node.js와 연동하기 위해서는 cloud messaging server key가 필요하다.
  • 아래 그림을 따라 가면 server key 구하는 것은 어렵지 않다.

3.2. node.js로 간단한 web server 구축하기 [소스코드 보기]
  • node.js와 firebase를 연동하기 위해 간단한 web server를 node.js로 구축했다.
  • 이 프로젝트에서 node.js의 역할은 client와의 http 통신 후, response(message 객체의 내용)를 웹 브라우져에 보여주는 정도이다.
[server.js 파일]

// ------- fcm 설정 -------
// fcm과 연동하기 위해선 아래 2개의 값을 정의해야 한다.

// 1. fcm api url
var fcmUrl = "https://fcm.googleapis.com/fcm/send"; 

// 2. 위에서 발급받은 fcm server key
var serverKey = "AAAA9K6-ArA:APA91bGIKHd0XguAQJ1BYKc31mUdktumEI0CI1t1NJhkBFxNO8Zp9ruHj7O5tLXqSVFWo7T5X9P848LrZdwlhwtwjBw0kiUxSAg69XBm8ym1O_kWkSc3ainkaTjtDpZaZyQSnmXJubST";

//... 아래 소스 코드 계속