- 앱 링크로 인증이 완료된 후, 다시 크롬 커스텀 탭을 실행한 화면으로부터 웹 서버에서 반환한 데이터를 가져오고 싶다면 - 먼저 Manifest에서 해당 activity 태그에 아래 코드를 추가해 준다.android:launchMode="singleTop"- Activity launch mode가 기본값(standard)이거나, 이미 앱이 백그라운드에 있어서 새로운 인텐트가 기존 액티비티로 전달되기 때문에 이전 화면이 보이는 문제가 있었다. - 그리고 크롬 커스텀 탭을 열어줬던 Activity에서는 onNewIntent()로 필요한 처리를 진행한다.override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) handleRedire..
Development/Android
- 앱 링크는 Android에서 특정 URL을 클릭했을 때 웹 브라우저가 아니라 앱으로 바로 연결되도록 하는 기술이다. - 앱에서 Manifest에 Intent Filter 설정뿐만 아니라 웹 서버에서도 인증을 위해 앱의 패키지명과 서명을 포함한 json 파일 등록이 요구된다. - 먼저 앱에서는 아래와 같이 구성해볼 수 있다. - autoVerify=ture 속성을 Intent filter에 넣어주게 되면 생성된 App Link URL 도메인으로 이동하여 데이터 에셋 파일을 검색한다. - 카테고리 태그 및 스키마와 host, path를 지정하는 것에 주의하자. path는 포함 개념으로 pathPrefix를 사용했다. - 웹 서버에서 파..
- 코틀린에서 코루틴은 CoroutineContext라는 실행 맥락 안에서 동작한다. - Context는 여러 요소(Job, Dispatcher 등)를 포함하고 있으며, 그중에서도 Dispatcher는 코루틴이 어떤 스레드에서 실행될지를 결정하는 중요한 역할을 한다. - 먼저, 코루틴의 Dispatcher에는 다음과 같은 종류가 있다.Dispatchers.Main설명: 안드로이드 메인(UI) 스레드에서 실행.용도: UI 업데이트, Toast, View 조작, LiveData/StateFlow 수집 등.주의: 긴 연산이나 I/O를 여기서 하면 ANR 발생 가능.CoroutineScope(Dispatchers.Main).launch { textView.text = "UI 업데이트" }2️⃣ Dispatche..

- ImageView에 바로 Shadow(elevation)을 적용할 수는 없는 것으로 보이고, CardView에 ImageView를 add 해서 구현해야 했다.val cardLp = FrameLayout.LayoutParams( FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.CENTER).apply { val m = (8 * resources.displayMetrics.density).toInt() setMargins(m, m, m, m)}val card = CardView(this@AddOnActivity).apply { layoutParams = cardLp ..

- WebView란? 안드로이드 앱 안에 내장된 브라우저라고 생각하면 된다. 즉, 앱 안에서 웹페이지(HTML, CSS, JavaScript)를 렌더링 하고 실행할 수 있는 View - 웹사이트를 보여줄 수도 있고, 앱 내부 기능과 연결된 하이브리드 앱 개발에도 자주 사용된다. - 안드로이드에서 애플 로그인 등. 웹뷰로 url에 접근하여 결과를 받아오는 방식이 필요할 때가 있다. - 이 글에서는 url을 웹뷰로 열고, 어떻게 그 안에서 결과 콜백을 받아오는지 확인해본다. 필자는 다이얼로그로 웹뷰를 보여주고자 한다. - 웹뷰의 데이터 전달 방식은 대략 다음과 같다. - 먼저 WebView 자체를 다이얼로그에 ContentView Set한다.) : Dialog(context) { private late..
- 서버로부터 buttonText라는 문자열을 받아 아래와 같은 안드로이드 기본 Button 컴포넌트에 입력해 주었다. - 그런데 BUTTONTEXT라고 모두 대문자 처리되어 보이고 있다. - 원인은 TextView(Button 상속) 속성 중 textAllCaps 때문이다. - 안드로이드 초창기에는 버튼의 영문을 모두 대문자로 표시하는 것이 디자인 가이드 원칙이었다고 한다. 아마 버튼에 대한 강조성 때문인 듯 - 어쨌든 textAllCaps가 항상 true로 되어있기 때문에 이 값을 false로 바꿔주면 된다.confirmBtn.isAllCaps = falseconfirmBtn.text = data.buttonText
- 먼저 MSAL에 대한 프로젝트 구성이 필요하다. 생성된 client ID, redirect_uri를 앱 개발자가 알고 있어야 한다.https://learn.microsoft.com/ko-kr/azure/active-directory-b2c/enable-authentication-android-app?tabs=kotlin Android 앱에서 인증 사용 - Azure AD B2CAzure Active Directory B2C 구성 요소를 사용하여 Android 애플리케이션에서 인증을 사용하도록 설정합니다. Azure AD B2C를 사용하여 Android 애플리케이션에서 사용자를 로그인하고 등록하는 방법을 알아봅learn.microsoft.com - 앱의 raw 폴더에 auth_config json 파일..
- 안드로이드에서 Signature Hash는 앱의 APK에 포함된 서명(Developer Signing Certificate)을 해시 처리한 값이다.- 주로 외부 서비스(API, SDK)에서 이 앱이 실제로 서명된 진짜 앱인지 검증할 때 사용된다. - 앱은 배포 전에 반드시 개발자 KeyStore로 서명되고, 외부 서비스를 패키지명 + 서명 인증서 Hash 값으로 앱을 식별하는 원리이다. - 서명 Hash에는 다음과 같은 종류가 있다. SHA-1: 예전 API, 구글 로그인, Firebase 등에서 사용SHA-256: 최근 API/보안성 강화된 서비스에서 권장- 안드로이드 스튜디오 터미널에서 아래 명령어를 입력하면 빠르게 확인이 가능하다../gradlew signingReport - 하지만 Base6..
- Coil을 통해 서버로부터 수신받은 url로 webp를 렌더링 하고 있었는데, 원본에 비해 품질이 너무 떨어진다는 보고를 받았다. - 실제 파일을 업로드하는 웹 쪽에서는 품질 조정에 대한 문제는 없었다. 그렇다면 앱에서 조금 깨져보이는건데 대응 방안에는 두 가지 간단한 방법이 있었다. - 먼저 Coil을 통해 리소스를 불러올 때 디코딩 과정에서 품질 손실이 발생할 수 있고, Size 옵션에 따라 품질 손실이 발생할 수도 있다. - 아래가 기존 코일 관련 코드인데, Scale이 지정되지 않았고 ContentScale도 Crop으로 지정해놓았다. 이런 부분에서 변질이 발생하는 것으로 보인다.Image( painter = rememberAsyncImagePainter( ImageReque..
- 위젯에서는 알파 값 적용하는 방식이 제한되어 있다.- 이미지 같은 경우에는 setInt - "setAlpha"를 통해 적용하고, 텍스트의 경우에는 실제 알파 값이 적용된 컬러를 textColor로 지정해주어야 한다. remoteViews.setInt(R.id.widgetRootImg, "setAlpha", alpha)- 참고로 setAlpha에 들어가는 alpha 값의 범위는 0~255이다. - 원하는 투명도 %를 아래 공식을 통해 계산하여 반영해주어야 한다.val alpha = transparency * 255 / 100 - Int형 Color 값에 알파 값을 적용하려면 다음과 같이 처리한다. 예시로 30% 적용할 경우val colorWithAlpha = (textColor and 0x00FFFFF..