오늘 배운 것

오늘은 실리콘밸리 개발자 특강을 듣고, 인스타그램디스콰이엇에 업로드할 글 초안을 작성했더니 금방 시간이 가서 개발 이슈는 많이 작업하지 못했다.

 

일단은 어제 관련된 dependency 에러를 해결했으니, 이제 알람 기능을 개발해보려고 한다. 사실 여전히 Api 클래스에서 리프레시 토큰 값이 반영되지 않고 있다... 하지만 일단은 알람 기능을 개발하면서 에러 수정을 병행해야 할 것 같다. 

 

알람 기능은 크게 두 가지로 나뉜다. 서버에서 클라이언트로 알림을 보내는 부분과, 클라이언트에서 해당 알림을 받아서 보여주는 로직이다. 우선은 클라이언트 쪽부터 작업해보자.

 

알고보니 안드로이드 프로젝트에 FCM(firebase cloud messaging)을 설정하려면 사전 작업이 필요했다. 공식문서에 나와있는 가이드대로 진행해주자. 

 

우선 android>app>src>main>AndroidManifest.xml 파일에 다음과 같이 추가해주었다. 백그라운드에서만 앱의 알림을 수신하려면 이 부분을 스킵해도 되지만, 우리는 포그라운드 알림 기능이 필요할 수도 있기 때문에 이 작업을 해야 했다. 해당 파일의 <activity> 태그와 같은 레벨에 해당 코드를 추가해 주었다. 

<service
    android:name=".java.OneStepFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

 

또한 우리는 안드로이드 13버전 이상을 사용하는데, 문서에 따르면 13버전 이상부터는 안드로이드 앱에 알림을 표시하려면 새로운 권한 설정을 해 줘야 한다고 한다. MainActivity.kt 파일을 찾아 해당 코드를 추가해주었다. 

private val requestPermissionLauncher = registerForActivityResult(
    ActivityResultContracts.RequestPermission(),
) { isGranted: Boolean ->
    if (isGranted) {
        // FCM SDK (and your app) can post notifications.
    } else {
        // TODO: Inform user that that your app will not show notifications.
    }
}

private fun askNotificationPermission() {
    // This is only necessary for API level >= 33 (TIRAMISU)
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) ==
            PackageManager.PERMISSION_GRANTED
        ) {
            // FCM SDK (and your app) can post notifications.
        } else if (shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS)) {
            // TODO: display an educational UI explaining to the user the features that will be enabled
            //       by them granting the POST_NOTIFICATION permission. This UI should provide the user
            //       "OK" and "No thanks" buttons. If the user selects "OK," directly request the permission.
            //       If the user selects "No thanks," allow the user to continue without notifications.
        } else {
            // Directly ask for the permission
            requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
        }
    }
}

 

그런데 원본 코드를 자세히 보니 if문을 알아서 채워줘야 하는 형태였다. 해당 부분을 비워두는 것은 메소드를 아예 선언하지 않는 것과 똑같아서 어떤 코드라도 넣긴 해야하는데... 뭐라고 작성해야 할지를 모르겠었다. 그러다 왼쪽 네비게이션 바를 봤는데, 내가 보고 있던 부분은 Java/Kotlin으로 안드로이드 개발을 하는 사람들에게 해당되는 내용 같았다.

 

혹시나 싶어 'react native fcm'으로 검색해보니 바로 React Native에서 사용할 수 있는 다른 라이브러리가 나왔다. 예전에 google analytics로 로그를 남길 때 사용하던 그 라이브러리였다. 

 

글을 쓰고 있는데 자정이 넘어가고 있다. 위에서 작업한 내용들을 다시 롤백하고, 남은 부분은 내일 다시 해봐야겠다. 

 

 궁금한 점

1. AndroidManifest.xml 파일의 역할은 무엇일까?

2. Kotlin과 Java 언어의 차이가 궁금하다. 단순 문법적 차이 말고, 둘은 어떤 차이가 있을까?

 

+ Recent posts