티스토리 뷰

반응형

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)으로 설정되었다면 메시지 알람이 뜰 것이다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함