네이티브

    안드로이드 UGC 심사 거절

    안드로이드 UGC 심사 거절

    안드로이드 앱 출시 심사 과정이 빡세졌습니다. (예전엔 웹뷰에 Url 잘못 넣어도 업데이트 해주었는데..... 요게 비정상 이었죠 ㅎㅎㅎ) 제가 겪은 상황은 커뮤니티 에서는 글쓴이를 신고하고 차단할 수 있어야 합니다. 댓글 에서도 글쓴이를 신고하고 차단할 수 있어야 합니다. 앱 테스터 분들이 차단 동작 후에 실제로 차단 되었는지 안되었는지 확인후에 안되었으면 스크린샷으로 내용 보내줍니다. 저는 커뮤니티의 글이 두 종류(공지, 유저들의 글)가 있었습니다. 공지를 차단했을때 계속 노출이 되고 있어서 몇번 심사 거절을 받은적이 있었습니다. 모두 한번씩 확인 더 해서 심사 거절로 스트레스 받는 일 없도록 합시다!

    Android Uri.getQueryParameter에  + 들어가면 빈칸으로 바뀝니다.

    Android Uri.getQueryParameter에 + 들어가면 빈칸으로 바뀝니다.

    최근에 다이나믹링크를 구현하던중 정보를 링크에 query로 담았을때 +가 빈칸으로 변경되는 이슈가 있었습니다. 같은 다이나믹 링크를 공유했을때 ios에서는 이슈가 없어서 안드로이드 쪽의 이슈로 생각하고 접근하였습니다. 첫번째 사진은 예시를 나타낸 것이고 두번째 사진은 getQueryParameter로 가져왔을때 +가 빈칸으로 변경되어 나타나는 모습입니다. getQueryParameter가 의심이 됩니다. 한번 코드를 살펴봅시다 return 값이 뭔가 수상하네요. convertPlus 파라미터도 있고 한번 더 들어가 봅시다 appendDecoded가 builder의 값을 변경해주는것 같습니다. appendDecoded를 찾아가 봅시다 범인을 찾았습니다!!! 이전에 convertPlus 옵션이 true로 되..

    Ios Apple Native Login

    Ios Apple Native Login

    TL;DR: 웹뷰의 애플 로그인만 네이티브 로그인으로 구현합니다. 14.5.1 이상 버전에서는 apple sign in with js가 동작하지 않습니다. safari의 이슈 때문에 안되는것으로 추측합니다. 적용해주시고 예외상황이 발생한다면 말씀해주세요 안드로이드는 애플로그인 apple sign in with js로 잘 됩니다. ios쪽 부분만 네이티브로 변경합니다. apple login은 ios 13.0 이상에서만 가능합니다. 문제 원인 파악 apple sign in with js 에서는 로그인 시도시 'https://appleid.apple.com/auth/authorize?client_id=[service_url]&redirect_uri[service_url]Fapple_redirect&respon..

    Ios App Memory Check

    Ios App Memory Check

    Device에서 어플리케이션이 갑자기 멈추면서 꺼질때가 있는데 이때 app이 crash 났다고 합니다. 이유는 여러가지가 있을수 있는데 그 중 하나는 메모리를 너무 많이 사용하는 경우 입니다. 아래의 내용은 xcode로 현재 실행중인 어플리케이션의 memeory를 확인하고 더 나아가 디바이스에서 실행중인 모든 프로세스의 메모리 사용량을 체크하는 방법입니다. 나중에 언젠가 필요할 날이 있지 않은까 싶어서 기록합니다. 현재 실행중인 앱의 메모리 사용량 체크 어플리케이션을 실행시키고 빨간 네모안의 스프레이 같은 버튼을 누르시면 됩니다. 디바이스에서 현재 실행중인 프로세스 및 cpu, memory 사용량 아래 빨간 네모박스 안에 내용이 녹화 버튼인데 이걸 누르면 아래의 사진처럼 내용이 출력되기 시작합니다.

    Android build.gradle 주요 정보 보안

    buid.gradle 파일은 gitignore에 추가되어 있지 않습니다. git 저장소가 노출되면 빌드에 필요한 password나 키들에 대한 정보가 노출될 수 있습니다. 이는 곧 스토어에 올라가 있는 앱이 다른 앱으로 대체될 수 있다는 이야기 입니다. gradle 은 groovy 언어로 이루어진 빌드 도구 입니다. groovy언어와 local.properties 파일을 이용하여 이를 변경합니다. 변경 전 (key 값들은 임의의 값으로 대체 하겠습니다.) ... signingConfigs { debugConfig { storeFile file('../test.jks') storePassword 'test123' keyAlias 'test' keyPassword 'test123' } releaseConfi..

    Ios html5 Geolocation 웹뷰 적용

    Ios html5 Geolocation 웹뷰 적용

    ios에서 html5 geolocation 기능을 사용하여 현재위치를 가져오는 방법입니다. 안드로이드에 대한 설명은 아래의 링크에서 참고하실수 있습니다. https://dkrnfls.tistory.com/87 html5 Geolocation 웹뷰 적용 웹의 api중 geolocation api가 있습니다. http에서는 사용이 불가능하고 https에서만 사용이 가능합니다. 따라서 테스트 할때도 ngrok으로 세팅을 하는등 별도의 툴을 이용해야 합니다. ngrok으로 로컬서버 dkrnfls.tistory.com ios 웹뷰에서 html5 geolocation 을 사용하기 위해서 현재 위치를 가져오는 것에대한 권한을 승인해주어야 합니다. ios는 안드로이드에 비해 훨씬 간단합니다. 바로 본론으로 들어갈게요 ..

    Android html5 Geolocation 웹뷰 적용

    Android html5 Geolocation 웹뷰 적용

    웹 api중 geolocation api가 있습니다. http에서는 사용이 불가능하고 https에서만 사용이 가능합니다. 따라서 테스트 할때도 ngrok으로 세팅을 하는등 별도의 툴을 이용해야 합니다. ngrok으로 로컬서버를 개방 하는법은 따로 포스팅 할 수 있도록 할게요 아래 첨부 링크는 웹에서 geolocation 에 관한 링크 입니다 https://developer.mozilla.org/ko/docs/Web/API/Geolocation_API/Using_the_Geolocation_API Geolocation API 사용하기 - Web API | MDN Geolocation API는 navigator.geolocation 객체를 통해 사용할 수 있습니다. developer.mozilla.org 웹..

    Android 화면 Resizing with windowSoftInputMode

    webview 화면 resizing 웹뷰에서 키보드가 하단에서 올라오게 되면 위의 화면은 키보드로 가려져서 화면이 줄어듭니다. 이때 화면을 스크롤 하거나 줄이거나, 줄여지지 않는 방법을 알아보겠습니다. // AndroidManifest.xml windowSoftInputMode에서 옵션을 주어서 제어할 수 있습니다. stateOption과 adjustOption을 하나씩 사용하거나 둘중 하나만 사용합니다. 두 그룹중 어느 하나의 그룹을 복수개 사용하면 정의되지 않은 결과를 가져올 수 있습니다. example 사용하는 알맞은 예시입니다 android:windowSoftInputMode="adjustResize|stateVisible" 아래의 코드는 정의되지 않은 결과를 가져올 수 있습니다 android:w..

    Ios 프리로더 띄우기

    WKWebview에서 웹뷰가 로드되기전 preload를 띄워서 사용자의 Ux를 개선해 봅시다 UIkit에 포함된 UIIndicatorView와 ios WKWebView에서 탐색 요청을 수락, 로드 및 완료하는 과정에서 트리거 되는 WKNavigationDelegate를 이용할것입니다. 선언부에 아래의 코드를 추가해줍니다. // 선언부에 추가 var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView() ViewController.swift내에 WKNavigationDelegate를 이용합니다. // 로드 시작 func webView(_ webView: WKWebView, didStartProvisionalNavigation navig..

    Android preload 띄우기

    안드로이드에서 webview가 로드전 preload를 띄워서 사용자의 ux를 개선해 봅시다 webChromeClient의 메소드를 오버라이드 하고 progressDialog를 사용하여 loading 중이라는 것을 표현할 것입니다. WebChromeClient webClient = new WebChromeClient() { private ProgressDialog mProgress; @Override public void onProgressChanged(WebView view, int progress) { if (mProgress == null) { mProgress = new ProgressDialog(MainActivity.this) // 위에서 import 하기 mProgress.show(); } m..