You can make anything
by writing

C.S.Lewis

by 서준수 Mar 10. 2025

컴포즈 온라인 카지노 게임 FCM 푸시 알림

이 글은 컴포즈 온라인 카지노 게임에서 FCM 푸시 알림을 구현하는 방법이 아니라 경험을 공유합니다. 대신 사전 준비가 되어 있다면 온라인 카지노 게임를 통한 구현은 10분 내로 할 수 있습니다.


최근 사내에서 내부용으로만 사용하는 작은 서비스를 개발하고 있다. 안드로이드와 iOS 둘 다 지원해야 해서 컴포즈 온라인 카지노 게임으로 개발을 시작하게 되었다.


코틀린 온라인 카지노 게임에 대한 이해와 경험도 없이 무작정 컴포즈 온라인 카지노 게임에 뛰어들고 있다 보니 기본기가 없다는 것을 여실히 느낀다. 그래서 종종 작은 이슈에서 애를 먹기도 한다. 여기에는 컴포즈 온라인 카지노 게임이 안정적이지 않은 탓도 일부 있다.


이런 상태에서 온라인 카지노 게임 푸시 알림 적용에 대한 안건이 나왔다. 알 수 없는 어려움이 존재할 것이 자명해서 잠시 고민을 하고 있는 차에 다른 동료가 해당 건을 먼저 선점했다. 하지만 그걸 헤쳐 나가면서 배울 수 있는 것이 있다고 생각되어 양해를 구하여 가져왔다.


FCM을 iOS에 적용해 본 경험이 없었다. 그래서 어떤 절차가 필요한지 전혀 몰랐다. 온라인 카지노 게임에서 발생할 수 있는 문제점도 예측이 되지 않았다.


iOS에 온라인 카지노 게임을 적용할 때 필요한 환경 설정은 안드로이드에 비해 복잡했다. 그래도 가이드가 있으니 차근차근하면 그만이었다.


문제는 구현이었다. 안드로이드는 어떻게든 구현할 수 있을 것 같았지만 iOS는 감조차 없었다. 차라리 그냥 네이티브로 구현하라고 하면 자료가 많을 것이라 덜 걱정일 텐데, 컴포즈 온라인 카지노 게임은 자료가 많지 않다.

물론 최후의 수단으로는 각각 네이티브로 작성해서 온라인 카지노 게임에 잘 녹이면 된다고 생각했다. 그러나 앞서 말한 것처럼 온라인 카지노 게임에 대한 기본기가 약해서 환경 설정이나 구조적인 문제를 해결하기 어려울 것이라고 예상되었다.


정말 다행히 멋진 온라인 카지노 게임가 있었다.

https://github.com/mirzemehdi/KMPNotifier

온라인 카지노 게임해.. 해치웠나?

온라인 카지노 게임가 있으니 이제 꽃길이겠지?...라고 생각하면 오산이다. 일단 이 온라인 카지노 게임는 컴포즈 온라인 카지노 게임이 아니라 코틀린 온라인 카지노 게임을 타기팅 한 것이다. 온라인 카지노 게임을 좀 아는 사람 입장에서는 그게 뭐 큰 차이가 있냐고 생각하겠지만 난 아니라고요!


이 길을 걸을 다른 누군가를 위하여 한참 삽질한 과정을 기록해 둔다.


0) 사전 준비

Firebase 프로젝트 생성

Firebase SDK 추가

애플 개발자 계정

APN 인증 키 발급

Identifiers 추가

SSL 인증서 발급 및 등록

Firebase에 APN 인증 키 등록

Xcode 설정

etc.


1) composeApp vs shared

컴포즈 온라인 카지노 게임이기 때문에 가이드에서 Gradle Setup에 관련된 내용 중 아래 내용은 composeApp 모듈에서 진행했다.

Then in your shared module you add dependency in commonMain
온라인 카지노 게임

그리고 나머지 가이드를 진행하면 안드로이드는 바로 푸시 알림을 받을 수 있다. 너무 편하다. 다시 한번 압도적 감사!


하지만 iOS는 빌드 에러가 발생한다. iOS Setup을 보면 import shared라는 부분이 보인다.

온라인 카지노 게임

API를 호출할 때도 NotifierManager.shared.initialize()로 shared라는 단어가 보인다. 여기서 바보 같은 상상을 한 것이 문제였다. 코틀린 온라인 카지노 게임 기준이라 shared 모듈에서 온라인 카지노 게임를 추가해야 정상적으로 동작하는 것인가? 여기까진 그럴 수 있다. 그런데 이런 생각을 했다. shared라는 단어가 같아서 모듈 이름과 API 호출 시 사용되는 속성명이 같아야 되는 건가? NotifierManager.(T) 이런 식의 메커니즘이 존재하는 건가? 지금 생각해 보면 왜 저런 생각을 했을까 싶다. 온라인 카지노 게임과 iOS 개발이라도 굳이 저런 이상한 형태를 가지진 않을 텐데 말이다.


그래서 shared 모듈로 옮긴 후에 다시 빌드를 시도했지만 여전히 빌드는 되지 않았다. 문제는 앞선 상황과 동일했는데 import shared에서 shared를 인식하지 못하고 있어 임포트가 불가능했다. 인식이 가능한 것은 Package Dependencies에 존재하는 온라인 카지노 게임이다. shared라는 것은 없으니 당연했다.


baseName이 문제인가 하여 아래와 같이 수정해도 소용이 없었다.

일단 이렇게 해도 소용이 없었으니 모듈 위치에 대한 문제는 아니라고 판단했다.


2) composeApp

다시 composeApp 모듈로 모든 설정을 옮겼다. 온라인 카지노 게임를 어떤 모듈에 추가하든 동일하게 사용하는 것이 상식적이기 때문에 기술적 가능 여부를 떠나서 NotifierManager.(T) 이런 형태는 존재할 필요가 없다. 온라인 카지노 게임를 추가한 모듈을 잘 설정해 주면 당연히 사용할 수 있다고 생각되었다. 이렇게 바보 같았던 생각이 정리가 되었다... 고 생각했다.


모듈을 바꿨으니 swift 코드에서 import shared를 변경해야 한다. import composeApp으로 변경하려고 했지만 역시나 composeApp이란 것은 참조할 수가 없다. 도대체 왜... 나보고 어쩌라는 거지...

또 혼란스러웠다. 결국 이 온라인 카지노 게임는 코틀린 온라인 카지노 게임에서만 사용할 수 있는 것인가? 그렇게만 사용할 수 있는, 내가 모르는 구조적인 이유가 있는 것인가?


일단 Package Dependencies에 있는 온라인 카지노 게임는 정상 참조가 되니 뭔가 결과물을 iOS 프로젝트에 넣어줘야 될 것 같다는 결론에 이르렀다.


3) 프로젝트 빌드

아래와 같이 설정하는 부분은 각 iOS 타깃에 대해 프레임워크 바이너리를 생성하기 위한 것이다.

그러면 프로젝트를 빌드하면 어찌 되었건 iOS용 바이너리가 생성된다는 뜻이니 빌드를 하였다. 빌드는 여러 번 실패했다. 안드로이드 Notification 권한을 얻기 위한 코드 중에registerForActivityResult가 있는데 그걸 사용하려면 현재fragment 버전이 문제가 된다며, Java Heap 메모리가 부족하다며... 그런 문제들을 해결하고 빌드했다. 그리고 빌드한 결과 중에 그럴싸한 부분을 찾았다. (참고로 빌드 시간은 꽤 길다. M3 Pro 기준으로 약 12분이 걸렸다.)

이거 누가 봐도 iOS 프레임워크를 위만들어진 바이너리 같지 않나? 이걸 Xcode에서 아래 메뉴를 통해 일단 iOS 프로젝트에 때려 넣었다.

하지만 Firebase 관련 온라인 카지노 게임와 아이콘부터 다르게 표시되었다. 제대로 된 형식이 아닐 가능성이 높은 것이다. 아니나 다를까 그렇게 해도 빌드는 여전히 되지 않았다. 하지만 여기서 희망을 보았다. 일단 composeApp 모듈에 바이너리가 생성되고 있구나!


4) 희망

이 온라인 카지노 게임를 사용할 수 있을 것 같다는 작은 희망이 생겼다.만약온라인 카지노 게임사용이 불가능하면 여기 더 매몰되지 말고 네이티브 코드를 공부해서 작성해야겠다고 생각했다.


아무튼 희망을 보았다. 정신을 차리고 NotifierManager.(T)와 같은 것은 진짜 없겠지?라는 마음으로 일단 참조가 잘 되는 안드로이드 코드로 온라인 카지노 게임 내부를 살펴보기 시작했다. (바보다. 오픈소스라서 그냥 GitHub에서 전부 볼 수 있는데...) 일단 걱정했던 문제는 없을 것 같았다. 그러면 다시 import가 왜 안되는지 알아야 했다. 해당 온라인 카지노 게임의존성이설정되어 있어서바이너리를 만드는 모듈 자체를 참조하는 것이 아닌가?


5) iOS 프레임워크 바이너리

iOS용 바이너리를 생성할 때 baseName를 지정한다. 온라인 카지노 게임 가이드에서 shared라고 되어 있었고 코틀린 온라인 카지노 게임에서 공용 코드를 담당하는 모듈 이름도 shared였기 때문에 baseName이 모듈 이름을 따라가야 되는 것이라고 생각했다. 코파일럿 선생님에게 물어보니 baseName은 생성되는 프레임워크 바이너리 이름이라고 했다. 그렇다면!!! import 대상은 composeApp이 아니라 ComposeApp이다. 참조가 된다!


실제로 빌드하여 시뮬레이터에 실행을 하면아래와 같은 프레임워크 바이너리가 추가적으로 생성된다.


그렇게 생성된 ComposeApp 내부를 살펴보니 NotifierManager 내부에 shared라는 클래스 속성이 있었다. 그렇다. 모듈명과는 아무런 관계가 없다. 다른 이름이었다면 바보 같은 상상과 혼란은 면했을 텐데...


6) 결론

바이너리를 정상적으로 빌드했다면 가이드의 예시에서 import만 변경하면 된다. 본인이 바이너리를 생성할 때 지정한 baseName에 맞도록.


사실 진짜 결론은 이것이다. 아직 컴포즈 온라인 카지노 게임은 불안정하다.


import도 초반에 composeApp으로도 해보고 ComposeApp로도 해봤다. shared모듈에서 바이너리를 만들baseName을 shared, Shared로 바꿔가며 importshared, Shared로 바꾸면서 다 해봤다. 하지만 그땐 분명 참조가 되지 않았다. 이유는 프로젝트 전체를 빌드하지 않았기 때문이다. 단순히 실행하여 빌드하는 것과는 별개다. 빌드해서 프레임워크 바이너리를 먼저 만들어야 하기 때문이다.


동일한 단계를 진행하여도 제대로 되지 않는 경우가 있다.특히 제일 많이 겪은 문제는 build.gradle을 수정하고 Sync 할 때 뜬금없이 아무 작업을 하지 않은 server 모듈에서 아래와 같이특정 온라인 카지노 게임를 찾지 못한다는이슈때문에 Sync가 안 되는 경우가 있다.

이 경우 나의 해결 방법은 Clean Project를 하고 안드로이드 스튜디오를 모두 종료한다. 그리고 다시 켜서 build.gradle을 수정하여 Sync 한다. 이렇게 하면 대부분 Sync 되는데 간혹 안될 때는 다시 반복한다. 이번에는 아마 표면적으로는 Sync가 된 것처럼 결과를 봤지만 아마 뭔가 꼬여있었던 것이 아닐까 싶다. 왜냐면 최종적으로 사용한 iOSApp.swift의 코드는 앞서 말했듯이 작업 초반에도 동일하게 시도했지만 ComposeApp이란 바이너리를 인식하지 못했다.


이상으로 긴 시간의 삽질기를 마친다.이것조차도 많이 정리되고 요약된 것이라 간단하게 느껴질 수도 있지만 실제로는 정말 하루 종일 고생한 문제다.언젠가 서드 파티 온라인 카지노 게임를 걷어내는 삽질기로 다시 돌아오길 기원하며...


마지막으로 KMPNotifier 온라인 카지노 게임 제작자에게 다시 한번 압도적 감사의 마음을 전한다.


브런치는 최신 브라우저에 최적화 되어있습니다.