티스토리 뷰
1. FCM 및 Retrofit과 관련된 의존성 추가 및 Manifest 인터넷 퍼미션 추가
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.firebase:firebase-messaging:17.0.0'
(만약 appcompat에서 빨간줄이 그어지면, 밑의 두개를 appcompat-7 버전에 맞게 추가한다.)
implementation 'com.android.support:support-v4:27.1.1'
implementation 'com.android.support:design:27.1.1'
Manifest.xml 파일에는 다음과 같이 인터넷 퍼미션을 추가한다.
<uses-permission android:name="android.permission.INTERNET" />
2. 파이어베이스에 내 프로젝트 등록 및 연동
Tools -> Firebase 클릭 후, 오른쪽의 Assistant 탭에서 1, 2 단계까지 진행한다.
(또는 파이어베이스 홈페이지에서 절차에 따라 직접 등록한다.)
※1단계에서 만약 오류가 뜬다면, 다시 한번 시도해보며, 2단계에서 오류가 나면 build.gradle(Project: 내프로젝트이름) 의 dependencies안에
classpath 'com.google.gms:google-services:3.1.1'
를 최신 버전(6월 20일 현재 3.2.1 버전)으로 바꾸어 준다.
이후, 파이어베이스 콘솔 홈페이지에서, 내 프로젝트 페이지로 들어가 공유성에 대해 동의해준다.
3. 파이어베이스 메시징 서비스 추가
파이어베이스 메시징 시스템은 안드로이드 4대 컴포넌트 중 서비스를 바탕으로 만들어졌다.(서비스에 대해 알고 싶다면 여기로)
내 프로젝트 자바 패키지에서, 오른쪽 클릭 -> New -> Service -> Service 하여, 서비스 컴포넌트를 생성한다.
Class Name 은 대충 Firebase_Messaging 정도로 해두자. Enabled는 체크하며, Exported는 체크하지 말자.
(※Enabled는 내 컴포넌트의 사용 여부이며, Exported는 외부 어플리케이션에서 내 서비스의 접근 가능 여부이다.)
생성 했다면, 아래와 같을 것이다.
public class Firebase_Messaging extends Service {
public Firebase_Messaging() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
}
다만, FCM을 쓰기 위해선 Service 클래스를 바로 상속받지 않고, FirebaseMessagingService를 상속 받아야 한다.
상속받은 FirebaseMessagingService 의 메소드 중 메시지를 받기 위해선 onMessageReceived 메서드를 오버라이드(ctrl+o) 해서 쓰자.
또한, 바운드 서비스를 사용하지 않기 때문에, onBind 메소드도 제거한다.
다음과 같이 바꾸면 된다.
public class Firebase_Messaging extends FirebaseMessagingService {
public Firebase_Messaging() {
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
// FCM으로 부터 받은 메시지(remoteMessage)를 처리하는 곳
}
}
이제 Manifest 파일로 가서, 서비스 태그 안에 intent-filter 태그를 추가해주자.(FCM 서버로부터 로부터 메시지를 받기 위함)
<service
android:name=".Firebase_Messaging"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
4. 파이어베이스 토큰 서비스 추가
특정 단말기에 FCM을 통해 메시지를 보내기 위해서는 해당 단말기에 저장된 FCM의 고유 토큰 번호를 알아야 한다.
FCM의 토큰번호는 앱이 설치 될 때 단 한번 서비스를 통해 생성되어 셰어드 프리퍼런스를 통해 저장되며, 앱의 재설치 또는
버전의 변경등의 이유로 인해 새로이 갱신된다.
어쨌든, 토큰 발급 서비스를 추가해보자. 메시징 서비스와 마찬가지로 서비스를 통해 생성하며, FirebaseInstanceIdService를 상속받는다.
오버라이딩 된 메소드는 onTokenRefresh() 메소드이다. 이 메소드는 앱의 설치 또는 재설치 시 한번만 동작한다.
public class Firebase_Token extends FirebaseInstanceIdService {
public Firebase_Token() {
}
@Override
public void onTokenRefresh() {
super.onTokenRefresh();
String myToken = FirebaseInstanceId.getInstance().getToken();
Log.i("최초 생성된 내 토큰 값", myToken);
}
}
Manifest 의 서비스 태그도 수정해 준다.
<service
android:name=".Firebase_Token"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
5. 내 토큰 확인하고, 파이어베이스 홈페이지에서 받은 메시지 로그로 확인하기
메인 액티비티에 다음과 같이 토큰을 확인하는 버튼을 추가하고, 버튼을 누르면 로그에 내 토큰을 띄워보겠다.
public class MainActivity extends AppCompatActivity {
Button getToken;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getToken = findViewById(R.id.get_token);
getToken.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String token = FirebaseInstanceId.getInstance().getToken();
Log.d("토큰정보", token);
}
});
}
}
06-20 12:11:05.315 17786-17786/com.test.orvai.fcm_example D/토큰정보: ebZtjsHFGGU:APA91bH3G2LdqXgPFkLxihNXO_H6jAS9JzXeCg..어쩌고저쩌고
다음과 같이 Logcat 창에 토큰 정보가 뜨게 된다. 토큰 정보를 아무 곳에다가 저장해 놓자.
이 토큰 정보를 사용하여, 내 스마트폰 단말기에 메시지를 보내보겠다.
6. 파이어베이스 콘솔 페이지에서, 내 단말기로 첫번째 메시지(notification)를 보내기
파이어베이스 콘솔 페이지에서 내 프로젝트 -> 성장 탭 -> Cloud Messaging 으로 들어가, 첫 번째 메시지 보내기를 클릭한다.
FCM의 메시지 보내기는 알람(Notification)을 포함하는 것을 기본으로 한다.
물론 밑의 고급 옵션을 통해 알람 제목 및 해시맵을 통해 단순 메시지만 보낼 수도 있다.
이번 포스트에서는 다음과 같이 알람 문자를 대상의 토큰값으로 보내는 것만 진행하도록 하겠다.
다시, Firebase_Messaging 클래스로 가서 로그로 출력하기 위한 코드를 추가한다.
public class Firebase_Messaging extends FirebaseMessagingService {
public Firebase_Messaging() {
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
// FCM으로 부터 받은 메시지(remoteMessage)를 처리하는 곳
Log.d("메시지 내용", remoteMessage.getNotification().getBody()); // 알람 메시지의 내용을 로그로 출력
}
}
앱을 실행하고, 파이어베이스 홈페이지에서 메시지를 보내고 확인해보자.
다음과 같이 뜨면 FCM이 전송 된 것이다.
※또한 FCM은 서비스 기반이기 때문에, Home키를 통해 메인메뉴로 빠져 나가도 알람(Notification)으로 설정되었다면 메시지 알람이 뜰 것이다.
'개발일지 > 안드로이드 개발' 카테고리의 다른 글
Retrofit을 사용하여 단말기 간 메시지 주고 받기 (0) | 2018.06.26 |
---|---|
리사이클러 뷰(Recycler View) 최하단 감지하여, 무한 스크롤링 하기 (0) | 2018.06.25 |
WebRTC 샘플 앱 클래스를 분석하고, 구성을 최소화 하자. (0) | 2018.06.19 |
안드로이드 Webrtc에 파이어베이스를 연동시켜 영상통화를 진행해보자. (2) | 2018.06.18 |
안드로이드 WebRTC를 개발하기 위해 AppRTC 안드로이드 샘플을 다운받고, 실행해보자. (5) | 2018.06.16 |