ABOUT ME

-

  • 안드로이드 FCM을 사용하여 푸시하기
    개발 2020. 1. 8. 08:44

    1. 안드로이드 프로젝트를 열고 메뉴에 Tools를 선택한 뒤 Firebase를 선택한다.

    2. 안드로이드 스튜디오 오른편에 Firebase assistant 창이 생기는데, 사용할 Cloud Messaging을 선택한다.

    3. Connect to Firebase 를 선택하면 구글 로그인 화면이 나타난다. 로그인을 한다.

     

    4. Add Fcm to your app 을 선택하면 자동으로 Gradle Scripts 에 파이어베이스 패키지를 받아온다.

     

    5. Firebase FCM 서비스를 추가한다. 소스파일 경로에 Service 를 추가한다.

    6. 서비스 이름은 MyFirebaseInstanceIDService 로 지정한다.

    7. MyFirebaseInstanceIDService 소스코드를 아래처럼 변경한다. 이때 제일 상단의 package name 이 변경되지 않도록 주의한다.

    import android.app.Service; import android.content.Intent; import android.os.IBinder;
    import android.util.Log;
    import com.google.firebase.iid.FirebaseInstanceId;
    import com.google.firebase.iid.FirebaseInstanceIdService;
    public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
    private static final String TAG = "MyFirebaseIIDService";
    /**
    * Called if InstanceID token is updated. This may occur if the security of
    * the previous token had been compromised. Note that this is called when the InstanceID
    token
    * is initially generated so this is where you would retrieve the token. */
    // [START refresh_token]
    @Override
    public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken);
    // If you want to send messages to this application instance or // manage this apps subscriptions on the server side, send the // Instance ID token to your app server. sendRegistrationToServer(refreshedToken);
    }
    // [END refresh_token]
    /**
    * token 값을 서버에 등록할 때 사용 */
    private void sendRegistrationToServer(String token) {
    TODO: Implement this method to send token to your app server.
    } }

    MyFirebaseInstanceIDService 에서 onTokenRefresh() 메서드는 Token 이 Refresh 될 때 사용되며, 서버에 따로 토큰을 저장하려면 sendRegistrationToServer 를 사용해도 된다.

     

    8. app>manifests>AndroidManifest.xml 파일을 열어 다음과 같이 수정한다. 오른쪽의 파이어베이스 어시스턴스에 나와있는 것처럼 소스코드를 변경한다. <intent-filter>부분을 추가해주면 된다.

    9. 메세지가 도착할 때 사용할 메서드를 구현한다. 아래 처럼 다시 서비스 추가를 한다.

    10. 서비스 이름을 지정한다.

    11. 생성된 MyFirebaseMessagingService 를 아래처럼 변경합니다. 이때도 package name 이 변경되지 않도록 유의해야합니다.

    import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage;
    import android.util.Log;
    import android.os.Handler; import android.os.Looper; import android.util.Log; import android.widget.Toast;
    import android.view.View;
    /**
    * Created by june on 2018. 3. 20.. */
    public class MyFirebaseMessagingService extends FirebaseMessagingService { private static final String TAG = "MyFirebaseMessagingService";
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) { super.onMessageReceived(remoteMessage);
    // 앱이 실행 중일 때 (Foreground 상황) 에서 푸쉬를 받으면 호출됩니다. // 백그라운드 상황에서는 호출되지 않고 그냥 알림목록에 알림이 추가됩니다. Log.d(TAG,"Message Arrived");
    if ( remoteMessage.getData().size() > 0 ) {
    Log.d(TAG, "FCM Data Message : " + remoteMessage.getData()); }
    if ( remoteMessage.getNotification() != null ) {
    final String messageBody = remoteMessage.getNotification().getBody();
    Log.d(TAG, "FCM Notification Message Body : " + messageBody);
    Handler handler = new Handler(Looper.getMainLooper()); handler.post(new Runnable() {
    @Override
    public void run() {
    Toast.makeText(getApplicationContext(), messageBody, Toast.LENGTH_SHORT).show();
    } });
    } }
    }

    run()이 실제로 메세지를 받을 때 실행되는 부분입니다. 실행 중에는 Toast 를 활용하여 메세지를 표시합니다. 12. AndroidManifest.xml 파일을 열어 서비스를 추가해줍니다.

     

    <service

    android:name=".MyFirebaseMessagingService" android:enabled="true" android:exported="true">
    <intent-filter>

    <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter>

    </service>

     

    기본적으로 서비스를 추가하면 자동으로 추가되지만 intent-filter 부분은 따로 작성해야합니다.

     

    13. 이제 앱이 실행되었을 때 token 을 생성하고 구독하는 부분을 작성합니다. MainActivity 소스파일을 열어 Firebase 를 사용합니다.

    import android.util.Log;
    import com.google.firebase.messaging.FirebaseMessaging; 
    import com.google.firebase.iid.FirebaseInstanceId;

    아래의 소스코드를 작성하면 기본적으로 사용자 token(세션)이 생성됩니다.

    MyFirebaseInstanceIDService test = new MyFirebaseInstanceIDService(); test.onTokenRefresh();
    Log.d("june", "Program Started. Token KEY:" + FirebaseInstanceId.getInstance().getToken() );

     

    구독하고자 하는 토픽(주제)를 추가하려면 아래 소스코르를 활용합니다.

    FirebaseMessaging.getInstance().subscribeToTopic("all");

     

     

    14. https://console.firebase.google.com 에 접속하여 추가된 앱을 확인합니다.

     

    15. 파이어베이스 콘솔에서 왼쪽부분의 Cloud Messaging에 들어갑니다.

    16. 첫번째 메세지 보내기를 선택합니다.

    17. 메세지내용을 작성한 뒤, 앱에서 개발한 앱의 Package를 선택합니다.

    18. 전송을 누르면 앱에서 Toast 형식으로 메세지 도착을 확인할 수 있습니다.

    댓글

Designed by Tistory.