StoryCode

4. 이클립스 + FCM

Eclipse/(Fail) FCM with Eclipse.No support By G
반응형

이클립스에서 FCM 기반 앱 개발하기 위한 준비 사항.


1. 안드로이드 앱 프로젝트를 시작한다.


2. FCM 라이브러리를 이클립스에 설치한다.

http://storycode.tistory.com/13 참조


3. google-play-serivces_lib 프로젝트를 import 한다.

  - SDK Manager 에서 최신 버전을 설치하면 google-play-serivces_lib 프로젝트가 존재하지 않는 것 같다.

  - 그래서, 아래의 포스트에서 google-play-services_lib 프로젝트를 다운로드 받아서 import 한다.

    * http://blog.naver.com/websearch/220830144941

  - google-play-services_lib 프로젝트를 import 하는 이유는 firebase 에서 google-play-service 를 필요로 하고 해당 R 클래스도 필요로 하기 때문이다.

  - import 한 google-play-services_lib 를 FCM 앱의 라이브러리로 포함시킨다.


4. FCM 을 위한 google-services.json 파일 다운로드 및 적용

  - https://firebase.google.com/docs/cloud-messaging/ 에 접속하여서 새 프로젝트를 생성한 후, google-services.json 파일을 다운로드한다.
  - 아래의 포스트와 같이 google-services.json 파일의 내용을 strings.xml 파일에 저장한다.

5. FCM 을 위한 AndroidManifest.xml 파일 수정
  - 아래의 포스트와 같이 AndroidManifest.xml 파일을 수정하세요.

6. FCM token 생성 요청
  - MainActivity.java 소스 코드를 아래와 같이 개발하여서 FCM token 을 생성 요청한다.
  - FCM token 이 생성된 상태이면 FirebaseInstanceId.getInstance().getToken() 호출시 token 을 가져오고 그렇지 않으면 null 을 가져온다.

public class MainActivity extends Activity
{
 private static String TAG = "MainActivity";
 
 @Override
 protected void onCreate( Bundle savedInstanceState )
 {
  super.onCreate( savedInstanceState );
  setContentView( R.layout.activity_main );
    
  FirebaseMessaging clsMessaging = FirebaseMessaging.getInstance();
  clsMessaging.subscribeToTopic("news");
  
  String token = FirebaseInstanceId.getInstance().getToken();
  Log.e( "token2", "token[" + token + "]" );
 }
}

7. FCM token 생성 이벤트 수신
  - FCM token 생성 이벤트 수신을 위한 서비스를 개발한다. 클래스 이름은 AndroidManifest.xml 에 기술한 이름과 동일해야 한다.

public class FCMIDService extends FirebaseInstanceIdService
{
 private static final String LOG_TAG = "FCMIDService";

 @Override
 @WorkerThread
 public void onTokenRefresh()
 {
  super.onTokenRefresh( );
  
  String strToken = FirebaseInstanceId.getInstance().getToken();
  
  Log.d( LOG_TAG, "token[" + strToken + "]" );
 }
}


8. FCM 메시지 이벤트 수신

  - FCM 메시지 이벤트 수신을 위한 서비스를 개발한다. 클래스 이름은 AndroidManifest.xml 에 기술한 이름과 동일해야 한다.


public class FCMService extends com.google.firebase.messaging.FirebaseMessagingService 
{
 private static final String LOG_TAG = "FCMService";


 @Override
 @WorkerThread
 public void onMessageReceived( RemoteMessage arg0 )
 {
  super.onMessageReceived( arg0 );
    
  Map<String,String> clsData = arg0.getData( );
  
  for( Map.Entry<String, String> it : clsData.entrySet( ) )
  {
   Log.d( LOG_TAG, "key(" + it.getKey( ) + ") value(" + it.getValue( ) + ")" );
  }
  
  Notification clsNotification = arg0.getNotification( );
  if( clsNotification != null )
  {
   Log.d( LOG_TAG, "notification body(" + clsNotification.getBody( ) + ")" );
  }
 }
} 




[추가정보1]

3. google-play-serivces_lib 프로젝트를 import 한다.  수행시

google-play-services_lib 를 단순히 Java Build Path 의 Libraries 에 추가하면 

6번의 AndroidManifest.xml 의
    <provider
         android:authorities="com.gcharger.client.firebaseinitprovider"
         android:name="com.google.firebase.provider.FirebaseInitProvider"
         android:exported="false"
         android:initOrder="100" />
부분과 7번 
FirebaseMessaging clsMessaging = FirebaseMessaging.getInstance();
clsMessaging.subscribeToTopic("news");
String token = FirebaseInstanceId.getInstance().getToken();
부분에서 Runtime Error 가 발생한다.

google-play-services_lib 를 Java Build Path 의 라이브러리가 아닌 android Library 로 추가해 주어야 한다. 

[추가정보2]
정상적으로 모든 작업을 마치고 firebase console 에서 메시지를 발송하면 어플로 푸시가 들어오는것을 확인할 수 있지만 FCMService 의 onMessageReceived 에 Notification sound 를 설정해도 어플이 백그라운드 상태에서는 소리가 나지 않는다.
어플이 백그라운드 상태에서 firebase console 로부터 수신된 푸시는 onMessageReceived 를 타지 않기때문!
서버측 프로그램을 만들어 푸시를 발송하면 onMessageReceived 의 Notification 을 통해 메시지가 수신되면서 소리 및 Notification 설정대로 푸시 메시지가 수신된다.


반응형