라벨이 앱 개발인 게시물 표시

[Androidpublisher API] voidedpurchases 를 사용하여 인앱 결제 취소를 확인하여 인앱 사기를 방지하자!!

이미지
Google Play Console 접속 API 액세스 클릭 OAuth 클라이언트 단락에서 새 OAuth 클라이언트 만들기 클릭   위 팝업이 뜨면 Google Cloud Platform 파란색 링크 클릭하여 팝업 안내처럼 사용자 인증 정보를 만들고 완료 클릭 유형을 웹 어플리케이션 으로 할것 oauth 인증시 redirect_url이 필수 이므로 승인된 리디렉션 URI 항목을 추가한다.(로컬에서 테스트 하려면 https://localhost:8080이라도 넣는다.) 생성된 사용자 인증 정보를 보면 클라이언트 ID와 클라이언트 보안 비밀 이 있는데 다음 단계에서 필요하므로 기억하고 있자. 아래 URL을 통해 개발자 계정 소유자 계정으로 로그인하여 code를 받아야함. https: //accounts.google.com/o/oauth2/v2/auth METHOD = GET PARAMETERS scope =https :// www . googleapis . com / auth / androidpublisher access_type =offline redirect_uri =https :// localhost : 8080 // 인증후 이동할 페이지 client_id = // 클라이언트 아이디 GCP에서 확인 ~-~.apps.googleusercontent.com 형식 response_type =code ex ) https: //accounts.google.com/o/oauth2/v2/auth?scope=https://www.googleapis.com/auth/androidpublisher&access_type=offline&redirect_uri=[입력]&response_type=code&client_id=[입력]     구글 계정으로 로그인 하면 redirect_url로 이동하면서 아래와 같은 형식의 Url로 접속할 것임 https: //localhost:8080/...

ConstraintLayout 안에 RecyclerView 사용시 ViewHolder가 무한대로 갱신되는 문제

만약 ViewPager를 사용하고 Adapter안에서 호출되는 Fragment내부에서 ConstraintLayout을 사용하고 있는 경우 RecyclerView를 사용시 다음과 같은내용을 주의하기 바란다. ConstraintLayout을 사용하여 레이아웃 구성시 RecyclerView를 추가하는 경우 리스트 특성상 가변 높이나 가변 너비를 설정하기 위하여 layout_constrainedHeight 또는 layout_constrainedWidth 값을 true로 설정하는 경우가 있는데 이 레이아웃이 ViewPager 하위에 있다면 RecyclerView의 아이템이 무한대로 갱신되는 문제가 있다. 필자의 경우 대안이 없어서 RecyclerView의 clipToPadding 속성을 false로 하여 하단 padding값을 주어서 해결하였다. 

[Android] Javascript interface 를 사용한 함수 호출시 Dialog show시 유의사항

main thread가 아닌 별도 thread에서 ui 관련 동작시 아래와 같은 예외를 볼 수 있다. IllegalStateException Must be called from main thread of fragment host 네이티브 코드에서 실행한 것이 아닌 웹뷰에서 실행시킨 함수를 별도 쓰레드로 보는것 같다. Dialog show부분을 runOnUiThread를 사용하여 실행시켜 문제를 해결 하였다.

[Android] Fragment를 layout 파일에서 적용시 InflateException 오류 발생

Fragment를 이용한 화면 구성 시 Java나 kotlin코드상에서 FragmentManager를 활용하는 방법 외의 아래처럼 레이아웃 파일에 직접 구성하는 방법이 있다. <LinearLayout             android:id="@+id/layout"             android:layout_width="match_parent"             android:layout_height="match_parent"             android:orientation="horizontal"             android:visibility="gone">             <fragment                 android:id="@+id/customFragment"                 android:name="com.dev.guy"                 android:layout_width="0dp"                 android:layout_height="match_parent"                 android:layout_weight="9" /> </LinearLayout>...