전체 글

전체 글

    게임 + NFT 광풍... 하지만 국내는...?

    https://www.bloter.net/newsView/blt202112300177 [게임인사이드]NFT 도입하는 게임업계, 세 갈래로 나뉜다 게임업계의 핫이슈를 보다 예리하게 짚어내겠습니다. 알기 어려운 업계의 비하인드 스토리부터 한 발 빠른 심층취재까지 한층 깊고 풍성한 이야기를 www.bloter.net 대표적으로 어스, 미르의전설4정도가 NFT를 성공적으로 안착시킨 경우라고 알고 있다. 그러나, 위메이드의 미르의 전설4는 글로벌 출시용만이 NFT 교환기능이 들어가 있다. 왜냐면, 국내에는 사행성 이슈로 해당 부분이 부적합 판정을 받았기 때문이다. 글쎄... 게임좀 했다는 사람 치고 아이템 매니아나 아이템베이로 아이템 현물거래를 안해본 사람이 없을거고, 미르4도 글로벌 클라이언트로 실행하면 충분히..

    [Kotlin] Broadcast recevier란? 사용법과 예제

    [Kotlin] Broadcast recevier란? 사용법과 예제

    Broadcast recevier란? 말그대로 Broadcast를 받는 수신기라고 생각하시면 됩니다. Manifest에 수신기를 선언하거나, Context에 수신기를 구현하는 두가지 방법이 존재합니다. 안드로이드 백그라운드 정책 강화로 API 26부터 기존에 비해 수신기 구현이 어려워졌습니다. 수신대상의 패키지, 클래스명을 입력하는 명시적 브로드캐스트나, 몇가지의 암시적 브로드캐스트 예외(링크)를 제외하고는 모두 Context에 직접 수신기를 구현해야 합니다. - Manifest / Context 수신기 등록 차이 Manifest에 등록시 - 앱이 실행중이 아니여도 이벤트를 수신하고 작업을 처리할 수 있습니다. Context에 등록시 - 앱이 실행중이여야 이벤트를 수신하고 작업을 처리할 수 있습니다. 수..

    [Kotlin] Broadcast 란? 사용법과 예제

    [Kotlin] Broadcast 란? 사용법과 예제

    Broadcast란? Android Application이나 Android System에서 Publish-subscribe pattern처럼 이벤트를 송/수신 하는 컴포넌트입니다. 이벤트는 intent객체에 담겨서 발송되게 됩니다. Broadcast의 intent 뜯어보기 이벤트는 intent에 문자열로 담겨서 전송되며, 구조는 아래와 같습니다. //android.intent.action.PACKAGE_FULLY_REMOVED이벤트 broadcast의 intent Intent { act=android.intent.action.PACKAGE_FULLY_REMOVED dat=package:com.example.broadcasttestc flg=0x5000010 cmp=com.example.broadcastt..

    W/BroadcastQueue: Background execution not allowed: receiving Intent

    W/BroadcastQueue: Background execution not allowed: receiving Intent

    상황 브로드 캐스트 테스트를 위해서, 액션명을 커스텀 해 암시적 브로드캐스트를 생성하였다. 그리고 송신했을때, 수신측에서 해당 에러를 출력하며 브로드캐스트를 수신하지 못하였다. 원인 백그라운드 정책이 강화됨에 따라, 예외적인 몇가지 암시적 브로드캐스트를 제외하고 암시적 브로드캐스트는 매니페스트에 브로드캐스트 수신기를 등록해서 수신할 수 없고, Context에 수신기를 구현해야 한다. 해결 송신시 명시적인 브로드캐스트를 보내도록 수정하였다. intent.putExtra("data", "This is just broadcast test B") intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); sendBroadcast(intent) 에서 intent.putExt..

    Your app contains exposed Google Cloud Platform (GCP) API keys. Please see this Google Help Center article for details

    Your app contains exposed Google Cloud Platform (GCP) API keys. Please see this Google Help Center article for details

    상황 google player cosole로 앱 게시중 오류 발생 원인 fcm api-key를 그대로 project에 노출한것 해결 어쩔수없이 직접 주입해서 썻어야 했음. local.propertise에 값을 저장하고 buildConfig에 선언해 꺼내썻지만, 어차피 빌드되면서 접근이 가능하므로 실패 1. 4토막으로 나눠 더한채로 입력한다. ex) key = 123456789라면, "123"+"456"+"789" 2. 암호화한걸 디코딩한 값을 입력한다. ex) base64로 apikey를 인코딩한 값이 Constant.API_KEY라 하면, .setApiKey(new String(Base64.decode(Constant.API_KEY, 0))) 처럼 사용한다.

    [Kotlin] RemoteConfig 적용하기 [간단]

    [Kotlin] RemoteConfig 적용하기 [간단]

    Remote config란, key-value쌍으로 이루어진 값을 Firebase Remote config에 등록하면, 몇줄의 간단한 코드로 app에서 가져오게 할 수 있는 기능입니다. 이를 이용해서 사용자의 업데이트 없이 앱의 동작과 뷰를 수정할수도 있고, A/B테스트를 수행하는 등, 굉장히 강력하지만, 손쉽게 사용할 수 있는 기능입니다. 해당 방법 또한 firebase에 적용하고 싶은 앱을 등록하고, application package에는 firebase project의 goole-service.json을 app수준 폴더에 위치시켜야 합니다. 해당 방법은 건너뛰겠습니다.\ 만약, 여러개의 firebase proejct를 하나의 앱에 등록하고 싶다면, firebase instance를 생성해 해당 co..

    [Kotlin] Firebase Crashlytics 적용시키기 (간단!)

    [Kotlin] Firebase Crashlytics 적용시키기 (간단!)

    Firebase Crashlytics는 전신이 Fabric Crashlytics이며, 실시간 비정상 종료 보고 도구입니다. 이를 처리하기 쉽게 목록으로 종합해 정보를 제공하고, 비정상 종료의 심각도와 발생률또한 보여줍니다. 최대의 장점은 부착하기 쉽고, 제어가 간편하다는 점입니다. ANR이나 crash로 인해 앱이 종료된 후, 다시 실행시켰을 때 fb crashlytics로 해당 에러를 전송해줍니다. 주의점은, Firebase의 여타 컴포넌트들과 달리, FirebaseApp으로 Instance생성이 불가능하다는 점입니다. https://firebase.google.com/docs/crashlytics Firebase Crashlytics | Firebase Documentation Apple, Andro..

    [Kotlin] Firebase Crashlytics 적용시키기 (간단!)

    [Kotlin] Firebase Crashlytics 적용시키기 (간단!)

    Firebase Crashlytics는 전신이 Fabric Crashlytics이며, 실시간 비정상 종료 보고 도구입니다. 이를 처리하기 쉽게 목록으로 종합해 정보를 제공하고, 비정상 종료의 심각도와 발생률또한 보여줍니다. 최대의 장점은 부착하기 쉽고, 제어가 간편하다는 점입니다. ANR이나 crash로 인해 앱이 종료된 후, 다시 실행시켰을 때 fb crashlytics로 해당 에러를 전송해줍니다. 주의점은, Firebase의 여타 컴포넌트들과 달리, FirebaseApp으로 Instance생성이 불가능하다는 점입니다. https://firebase.google.com/docs/crashlytics Firebase Crashlytics | Firebase Documentation Apple, Andro..

    [JAVA] Base64 incoding, decoding

    Base64는 Java.Base4와 android.Base64 두 종류가 존재한다. Java.Base64는 api 26(Oreo)부터 사용가능하고, android.Base64는 api 제한이 없다. 1. Java.Base64 incoding-decoding @RequiresApi(api = Build.VERSION_CODES.O) public String stringToBase64(String target){ Base64.getEncoder().encodeToString(originalInput.getBytes()); } @RequiresApi(api = Build.VERSION_CODES.O) public String Base64ToString(String encodedString){ return ne..

    [Kotlin] InCallService로 Default Dialer 개발하기

    [Kotlin] InCallService로 Default Dialer 개발하기

    1. ConnectionService와 InCallService의 차이 InCallService 대부분의 스펙은 구현이 되어있으며, 구현된 항목을 선언하고 요청만 해주면 구현할 수 있다. ConnectionService는 VOIP개발에 더 적합하다. gsm통화를 개발하기 위해 각종 편의사항이 제공되는 InCallService와는 다르게, 연결을 직접 받아 등록하고 통화의 시작, 종료까지 모두 구현해주어야 한다. 그래서 VOIP구현엔 오픈소스 라이브러리를 주로 사용한다 (kakao talk도 보이스톡도 그렇다!) 2. InCallService 사용을 위한 사전 준비 기본 통화앱이 되도록 Manifest 및 userpermission 수정 ㄱ. Manifest - ues permission tags //OU..

    [Kotlin]ActivityForResult 및 checkSelfPerission 을 permissionLauncher로 대체하기

    [Kotlin]ActivityForResult 및 checkSelfPerission 을 permissionLauncher로 대체하기

    자주 사용하기 때문에 검색안하고 긁어 쓰려고 포스팅 합니다...! 순서 1. 설정창 여는 퍼미션 2. 설정창 필요없이 팝업으로 획득하는 퍼미션 1. 설정창을 열어야 하는 system alert window의 경우 var ovelayPermission = Settings.canDrawOverlays(this) val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:$packageName")) val activityLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { ovelayPermission = Setting..

    [Kotlin] Fragment (2) - 기초 예제

    [Kotlin] Fragment (2) - 기초 예제

    * 본 예제는 간단히 ViewBinding을 사용합니다 https://greensky0026.tistory.com/190 View binding 사용해보기 findbyviewid를 쓰지 않아도 되게 해줘서 코드가 매우 간결해집니다. app level gradle //build.gradle android{ //... viewBinding { enabled = true } } //... } replace Acitivity - onCreate : setContentView.. greensky0026.tistory.com 개요 본 예저는 간단히 fragment를 버튼을 클릭해 swap해 보여주는 Application 입니다. MainActivity는 main, another 버튼이 존재하며 클릭시 해당 frag..

    [Kotlin] Fragment (1) - Introduce

    [Kotlin] Fragment (1) - Introduce

    이번 포스팅 시리즈는 Fragment입니다. 쓸줄 아는것괘 왜 쓰는지 안는것은 천지차이라고들 하는데, 저는 쓸줄만 알았던거 같아 공부한것을 정리겸 포스팅을 작성해보게 되었습니다. Fragment (1) - Introduce 1. Fragment vs Activity 저는 Fragement에 대해 장황하게 설명하기보단, 비슷한 역할을 수행하는 Activity와의 비교가 더 이해해 도움이 되었기에, 서두로 간략히 서술해 보도록 하겠습니다. ㄱ. 독립성 Activity는 사용자와 앱이 상호작용 하는 진입점이여서 Application의 필수 요소이다. Fragment는 화면의 일부 또는 전체를 구성하는 객체이다. 그렇기에 Fragment는 스스로 독립적으로 존재할 수 없고 필수요소는 아니다. ㄴ. 퍼포먼스 Ac..

    [Nodejs] use multiple FCM Admin SDK

    [Nodejs] use multiple FCM Admin SDK

    function initSDK(){ //SDK init admin = require("firebase-admin"); var serviceAccount = require("./config/fcm_admin_sdk.json"); admin.initializeApp({ credential: admin.credential.cert(serviceAccount) }); } 보통 이런방법으로 사용하게 되는데, 같은방법을 사용해 추가로 실행시키면 에러를 뿝는다. firebase-admin을 여러개 사용하고 싶으면 unique-name을 붙이라고 한다. android에서 multiple firebaseaApp을 사용할때와 같은 맥락. function initSDK(){ //SDK init admin = require(..

    Oracle JDK Archive Link

    Oracle JDK Archive Link

    https://www.oracle.com/java/technologies/downloads/archive/ 맨날 찾다가 한참 걸리고... ㅎㅎ 메모겸 작성했습니다

    Applie Silicon M1 Macbook 구입 후 세팅 (터미널, 환경설정)

    Applie Silicon M1 Macbook 구입 후 세팅 (터미널, 환경설정)

    기존 m1 air를 중고로 넘기고, 2021 Macbook pro (14", M1 Pro) 예구를 성공했습니다..ㅎㅎ 어제 받았고, 오늘 간단한 세팅을 하면서 글 남깁니다. 터미널 세팅 https://www.44bits.io/ko/post/setup-apple-silicon-m1-for-developers 개발자를 위한 애플 실리콘 M1 맥 세팅 Apple에서는 얼마 전 ARM 기반의 애플 실리콘 M1 맥 라인업을 공개하였습니다. M1 맥북에 개발환경을 구성해본 경험을 공유합니다. iTerm2, oh-my-zsh- Homebrew, Docker 등 www.44bits.io *단, Apple Silicon버젼으로 homebrew를 설치하려면, homebrew 홈페이지의 설치 url을 터미널에 그대로 입력해..

    Build was configured to prefer settings repositories over project repositories but repository 'flatDir' was added by build file 'app\build.gradle'

    Build was configured to prefer settings repositories over project repositories but repository 'flatDir' was added by build file 'app\build.gradle'

    상황 aar을 import하기 위해 작업도중 발생 원인 모르겠음. api 30과 31의 차이라기도 뭐한게.. taget api 30인 project가 설정한 대로 똑같이 해도 설정되지 않음. 시도한 방법 //app 또는 project gradle에 아래내용 추가 repositories { flatDir{ dir 'libs' } } //app gradle의 다음의 내용 추가 implementation(name:'AAR_NAME', ext:'AAR_EXTENSION_NAME') -> 실패 //app 또는 project gradle에 아래내용 추가 repositories { flatDir{ dir 'libs' } } //app gradle의 다음의 내용 추가 implementation fileTree(dir:..

    Manifest merger failed : Attribute application@theme

    상황 aar을 import하기위해 app gradle에 implements를 한 상황에서 clean - rebuild project를 실행시키니 발생 원인 모르겠음... 아마 aar의 manifest와 내 project의 manifest의 theme가 충돌되었다고 의심됨. 해결 manifest.mxl에 다음 다음과 같이 추가 1. manifest 태그 내에 추가 xmlns:tools="http://schemas.android.com/tools" 2. application 태그 내에 추가 tools:replace="android:theme" 이후 성공적으로 잘 빌드 되었음.

    [Kotlin] WorkManager 사용해보기

    [Kotlin] WorkManager 사용해보기

    서론 우선, 워크매니저를 사용하기 전, 구성요소에 대해 알아보자. 워크매니저의 구성요소는 크게 네가지이다. WorkManager 처리할 작업들을 큐에 저장해 관리한다. 여러 인스턴스가 호출되면 곤란해지기 때문에, 싱글톤 패턴으로 구현되어 있으며, getInstance() 메서드를 사용해 인스턴스를 받아 사용한다. Worker 추상클래스이며, doWork()메서드를 오버라이드해서 해야할 작업을 작성한다. 완료시 SUCCESS, FALURE, RETRY중 하나를 반환해야 한다. 반환한 결과에 따라 WorkManager의 이후 동작이 결정하게 된다. WorkRequest Worker의 doWork를 어떻게 작업할 것인지 제약사항, 실행조건, 반복여부 등의 조건을 설정한다. 반복작업과 한번만 수행할 작업으로 나..

    Work Manager : "Could not instantiate Wroker"

    상황 WorkManager에 workrequest을 enqueue했는데 오류 뿜음 원인 worker를 inner class로 작성하면 안 됨 해결 worker class 별도 분리 참고 https://haero.tistory.com/20 [Android] WorkManager 'Could not instantiate Worker' 해결법 Android JetPack Component 에 'WorkManager' 라는 친구가 있다. 초기 안드로이드는 백그라운드 실행 정책이 느슨했기 때문에 여러 앱이 각자 백그라운드 태스크를 수행하면서 스마트폰의 자원을 엄청 소비 haero.tistory.com https://stackoverflow.com/questions/52657196/android-work-manag..