이번주는 유난히도 날씨가 오락 가락 하는 한 주였던 거 같습니다. 오늘은 비가 무진장 내린 후 바다를 바라보다가 저 멀리 보길도 끝 무렵의 섬들이 보이는 것을 알게 되어 갤럭시 23 울트라의 줌 사진 비교를 한 번 올려 볼까 합니다.
1배
1배
30배 줌
30배
70배
70배
100 배 중
100배
1배 기본 사진에서 이 섬을 찾아 보세요... 보이시나요? 그 옆으로 보이는 섬들이 보길도 등등의 섬들이지 않을까 싶습니다. 100배 줌으로 보이는 섬은 대관탈도라는 섬으로 인식되기는 합니다. 제주에서 추자도를 바라보면 중간에 있는 섬입니다. 대략 거래는 30Km 정도 되는 것으로 보이는데 이 정도의 Zoom이라면... 어떨까요?
python 으로 게시물 댓글에 자동 답글을 다는 이야기를 적었던 부분인데, 예전에 기술했던 글이라 정리가 좀 미흡해 보이기는 합니다. 이제 필요한 것은 accessToken을 얻어야 하는 데, 이 부분이 번거로운 부분이 될 듯합니다. 그 이야기는 뒤에 다시 해 보도록 하겠습니다.
tistory API 인증 알아보기
accessToken 을 받기 위해서는 인증을 거쳐야 합니다. 저 python 예시 나와 있는 이런저런 코드에 대한 설명이 부족하여 보기는 힘들어 보이지만.
{0} 위에서 처럼 app id 을 넣고 {1] 위에서 확인되는 Secret Key 값을 넣습니다. {2} 에는 callback 주소로 치환하고 {3} 에는 방금 얻어온 code 뒤에 값을 채워 url을 만든 다음 크롬이나 에지 등에 입력하면 accessToken을 얻을 수 있습니다.
새로운 댓글 목록 받아 오기
이제 API 가이드를 보면서 댓글 목록을 받아 오겠습니다. REST API 을 호출하도록 하고 있어서 저는 retrofit을 이용해서 해 보고자 합니다.
data class NewestResponse( val id : String, // 댓글 ID val date : String, // 댓글 작성시간 timeStamp val postId : String, // 작성된글 ID val name : String, // 작성자 val homepage : String, // 작성자 홈페이지 주소 val comment : String, // 댓글 내용 val open : String, // Y 공개, N 비공개 val link : String, )
data class NewestResponseMain( val tistory : NewestItem )
data class NewestItem( val item : NewestComments )
data class NewestComments( val url : String, val secondaryUrl : String, val comments : ArrayList<NewestResponse> )
실제 호출에서는 NewestResponseMain 을 이용합니다. 사유는 API 가이드를 보면 json 응답 모양을 보고 만들었습니다.
아래 응답 예시를 보면 tistory 를 큰 block으로 해서 item 아래 comments 아래 comment을 들어가야 세부 목록을 볼 수 있습니다. 그래서 모양은 이렇게 구현했습니다.
output 은 json 타입으로 받아서 분석을 할 예정이라 json으로 기술되었으며, blogname 은 우리 블로그 URL의 prefix을 적어 둡니다. 이제 응답이 오면 어떻게 될까요?
조회화면
이제 이 앱을 통해서 더 열심히(?) 찾아보도록 하겠습니다. 저기 URL 주소를 클릭하면 해당 블로그의 제일 마지막 게시글을 찾아서 이동합니다. (아직 개발 중이라 안 되는 페이지도 있을 수 있습니다. 블로그 마다 테마 설정에 따라 tag 값들이 달라지기 때문에 안되는 페이지는 하나씩 보완을 해야 할 것 같습니다.)
#billcorea #운동동아리관리앱 🏸 Schneedle, ¡una aplicación imprescindible para los clubes de bádminton! 👉 Match Play: registra puntuaciones y encuentra oponentes 🎉 ¡Perfecto para cualquier lugar, solo, con amigos o en un club! 🤝 Si te gusta el bádminton, definitivamente pruébalo.
Ir a la aplicación 👉 https://play.google.com/store/apps/details?id=com.billcorea.matchplay
앱의 upload key을 분실했거나, 앱 서명에 문제가 있는 경우 그 조치는 위 설명에 따라 인증서를 다시 생성하여 올려 줍니다. 그리고 기다립니다. 48시간 동안이나 말입니다. (playstore 의 메뉴 중에서 앱 서명에 들어가시면 보실 수 있습니다. 다만, 개발자 계정의 관리자만 할 수 있습니다. 관리자에게서 권한을 위임 받아도 앱 서명 관리는 수정할 수 없습니다.)
AGPBI: {"kind":"warning","text":"We recommend using a newer Android Gradle plugin to use compileSdk = 34\n\nThis Android Gradle plugin (8.1.0) was tested up to compileSdk = 33 (and compileSdkPreview = \"UpsideDownCakePrivacySandbox\").\n\nYou are strongly encouraged to update your project to use a newer\nAndroid Gradle plugin that has been tested with compileSdk = 34.\n\nIf you are already using the latest version of the Android Gradle plugin,\nyou may need to wait until a newer version with support for compileSdk = 34 is available.\n\nTo suppress this warning, add/update\n android.suppressUnsupportedCompileSdk=34\nto this project's gradle.properties.","sources":[{}]}
그래도 지금은 무시하고 넘어갑니다. 그래도 아직 발견 되는 오류는 없습니다. 개발에 사용하고 있는 android studio 버전은 다음과 같습니다.
Android Studio Giraffe | 2022.3.1 Build #AI-223.8836.35.2231.10406996, built on June 29, 2023 Runtime version: 17.0.6+0-b2043.56-10027231 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Windows 11 10.0 GC: G1 Young Generation, G1 Old Generation Memory: 4096M Cores: 8 Registry: external.system.auto.import.disabled=true debugger.new.tool.window.layout=true ide.text.editor.with.preview.show.floating.toolbar=false ide.instant.shutdown=false ide.experimental.ui=true
Hi Developers at Billcorea (빌코리아), After a recent review, we've found an issue with your app, 리모트 페이 (결제도 공유가 되나요, 원격 결제) (com.billcoreatech.remotepayment0119). See below for more information about your app's status and how to correct the issue
(Billcorea(빌코리아)의 개발자 여러분, 안녕하세요. 최근 검토 결과, 원격 페이(결제도 공유가 된다면, 원격 결제)(com.billcoreatech.remotepayment0119) 앱에서 문제가 발견되었습니다. 앱 상태 및 문제 해결 방법에 대한 자세한 내용은 아래를 참조하세요.)
Publishing status:Removed
Your app was removed from Google Play and won't be available to users until you submit a policy compliant update.
게시 상태: 삭제됨 앱이 Google Play에서 삭제되었으며 정책을 준수하는 업데이트를 제출할 때까지 사용자가 사용할 수 없습니다.
Eligibility issues by versions (버전별 적격성 문제)
App Bundle:9
APK REQUIRES PROMINENT DISCLOSURE Your app is not compliant with theUser DataandMobile Unwanted Softwarepolicies. Your app is uploading users'Fileinformation without a prominent disclosure. As per Google Play'sUser Datapolicy, in cases where your app's access, collection, use, or sharing of personal and sensitive user data may not be within the reasonable expectation of the user of the product or feature in question, you must provide an in-app disclosure of your data access, collection, use, and sharing and seek affirmative user consent. Your use case requires a Prominent Disclosure in accordance with this policy. The in-app Prominent Disclosure:
Must comprehensively disclose how your app collects, uses, and shares user data.
To meet policy requirements, it's recommended that you reference the following example language format for Prominent Disclosure when it's required: "{This app} collects / transmits / syncs / stores {type of data} to enable {"feature"}, {in what scenario}."
Must be within the app itself, displayed in the normal usage of the app, and not require the user to navigate into a menu or settings.
Cannot only be placed in a privacy policy or terms of service.
Cannot be included with other disclosures unrelated to personal and sensitive user data collection.
Requests for user consent:
Must be clear and unambiguous.
Must require affirmative user action (for example, tap to accept or tick a checkbox).
Must not interpret navigation away from the disclosure (including tapping away, pressing the back or home button) as consent.
Must not use auto-dismissing or expiring messages as a means of obtaining user consent.
Must be granted by the user before your app can begin to collect or access personal and sensitive user data.
App Bundle:9
APK HAS A PRIVACY POLICY BUT IT IS NOTADEQUATE
Privacy Policy in Play Console
Privacy Policy in Play Console does not disclose the collection ofFile.
Privacy Policy in Play Console does not disclose the usage of collectedFile.
Please make sure your Privacy Policy is non-editable.
Privacy Policy in Play Distributed App
Your app is uploading users'Fileinformation without posting a privacy policy in Play Distributed App.
APK는 명시적 공개가 필요합니다 앱이 사용자 데이터 및 원치 않는 모바일 소프트웨어 정책을 준수하지 않습니다. 앱이 명시적 공개 없이 사용자의 파일 정보를 업로드하고 있습니다. Google Play의 사용자 데이터 정책에 따라 귀하의 앱이 개인적이고 민감한 사용자 데이터에 대한 액세스, 수집, 사용 또는 공유가 해당 제품 또는 기능 사용자의 합당한 기대 범위 내에 있지 않을 수 있는 경우 귀하는 다음을 제공해야 합니다. - 귀하의 데이터 액세스, 수집, 사용 및 공유에 대한 앱 공개 및 긍정적인 사용자 동의를 구합니다. 귀하의 사용 사례에는 이 정책에 따라 명시적 공개가 필요합니다. 인앱 명시적 공개: 앱에서 사용자 데이터를 수집, 사용 및 공유하는 방법을 포괄적으로 공개해야 합니다. 정책 요구 사항을 충족하려면 필요할 때 명시적 공개에 대해 다음 예시 언어 형식을 참조하는 것이 좋습니다. 대본}." 앱 자체 내에 있어야 하고 앱의 일반적인 사용 시 표시되어야 하며 사용자가 메뉴나 설정으로 이동할 필요가 없어야 합니다. 개인 정보 보호 정책 또는 서비스 약관에만 배치할 수 없습니다. 개인 및 민감한 사용자 데이터 수집과 관련되지 않은 다른 공개에 포함될 수 없습니다. 사용자 동의 요청: 명확하고 모호하지 않아야 합니다. 긍정적인 사용자 작업이 필요해야 합니다(예: 탭 하여 수락하거나 확인란을 선택). 공개에서 벗어나는 탐색(두드리기, 뒤로 또는 홈 버튼 누르기 포함)을 동의로 해석해서는 안 됩니다. 자동 해제 또는 만료 메시지를 사용자 동의를 얻는 수단으로 사용해서는 안 됩니다. 앱이 개인적이고 민감한 사용자 데이터를 수집하거나 액세스 하기 전에 사용자가 승인해야 합니다.
APK에는 개인정보 보호정책이 있지만 적절하지 않습니다. Play Console의 개인정보처리방침 Play Console의 개인정보처리방침은 파일 수집을 공개하지 않습니다. Play Console의 개인정보처리방침은 수집된 파일의 사용을 공개하지 않습니다. 개인 정보 보호 정책을 편집할 수 없는지 확인하십시오. Play 배포 앱의 개인정보처리방침 귀하의 앱은 Play 배포 앱에 개인정보취급방침을 게시하지 않고 사용자의 파일 정보를 업로드하고 있습니다.
메일 본문 중에서
오늘은 이렇게 받은 앱의 게시 취소에 대한 조치 준비를 해야 할 것 같습니다. ~
구글은 개인정보 취급에 대한 상당한 요구사항을 가지고 있습니다. 그것이 뭐 틀렸거나, 잘못되었거나 하지는 않습니다. 개인정보의 보호는 앱을 게시하여야 하는 입장에서는 누구나 해야 하는 것이기 때문입니다.
playstore에서 받은 앱으로 인해 나의 개인정보가 어딘가로 흘러들어간다는 것을 좋아할 사람은 아무도 없으니까요.
이전 까지는 그냥 블로그 페이지에 있는 개인정보 링크를 연결해 주는 것만으로도 해소가 되었던 부분이 있다고 하면 이번에는 어떤 조치를 해 주어야 나의 앱을 게시해 줄까는 고민을 해 보아야 할 것 같습니다.
이 블로그 페이지 중에서도 개인정보 관리 지침으로 사용되는 게시물이 있기도 합니다. 그래야 온라인으로 관리를 할 수 있으니까요. 그런데 구글은 그것을 허용해 줄 것인가 하는 부분은 고민을 해 보아야 할 것 같습니다.
jetpack compose을 이용해 UI을 구성하다 보면 Database에서 데이터를 추출해 화면에 보여주는 작업을 하는 과정에서 만나는 불편(?)함을 해소하기 위해서 필요한 부분일 듯하여 스크랩을 해 두고자 합니다.
이유는 데이터를 읽어 오는 부분의 구현에서 데이터가 소량인 경우는 문제가 없으나, 데이터가 많은 경우 그 처리에서 화면에 표시되는 데이터를 재구성 하려면 listview, adapter 등을 이용하는 xml layout 부분에서는 이미 많은 정보들이 있기 때문에 쉽게 구현을 해 볼 수 있습니다.
compose로 넘어오면 조금 상황이 달라집니다. 위 원본 출처의 summary을 읽어 보고 오겠습니다.
다음은SideEffect,DisposableEffect및 LaunchedEffect 사이의 차이점에 대한 요약입니다.
SideEffect상위 컴포저블이 재구성될 때 실행되며 컴포저블의 상태 또는 소품에 의존하지 않는 작업을 실행하는 데 유용합니다.
DisposableEffect상위 컴포저블이 처음 렌더링될 때 실행되며 컴포저블이 더 이상 사용되지 않을 때 정리해야 하는 리소스를 관리하는 데 유용합니다.첫 번째 구성 또는 키 변경 시 트리거 되고onDispose종료 시 메서드를 호출합니다 .
LaunchedEffect별도의 코루틴 범위에서 부작용을 실행하며 UI 스레드를 차단하지 않고 장기 실행 작업을 실행하는 데 유용합니다.첫 번째 컴포지션 또는 키 변경 시 트리거 됩니다.
대표이미지
ui와 데이터를 표시가 실시간으로 변해야 하는 부분들이 발생하기 때문에 위 글에서 제시된 효과 및 코드 기술 방법을 익혀둘 필요가 있었습니다. 오늘도 잘 정리해 두고 나중에 써 보도록 하겠습니다.
이 글은 원본 페이지의 정보를 알아보는 페이지입니다. stack을 알아보는 이유는 앱 개발을 하다 보면 발생하는 오류 또는 이슈를 만나게 되면 대부분 구글 검색을 통해서 알아보게 됩니다. 그런 이슈나 오류사항 등에 대한 정보를 찾을 수 있는 stackoverflow.com의 정보를 이용해서 그걸 조금 쉽게 사용할 수 있는 앱 개발 소스를 레퍼런스 할 수 있을 것 같아서
정리해 두고 하는 목적이 있습니다.
이제 읽어 보도록 하겠습니다.
개발
이 프로젝트의 목표는 최신 Android 라이브러리 및 도구에 대한 예제를 제공하는 것입니다.몇 가지 주목할만한 예는 다음과 같습니다.