728x90
반응형

안드로이드내에서 웹뷰로 보안채팅을 여는 기능이 있다.

현재 get방식으로 앱에서 여는지, 모바일 웹으로 여는지에 따라 param값을 달리해주는데,

웹에서 뒤로가기시, 화면전환전에 모달을 띄워달라는 요구를 받고

해당 웹을 작업 후 , 앱내에서도 웹 함수를 호출할 일이 생겼다.

 

webSettings.setJavaScriptEnabled(true); 

webView.addJavascriptInterface(new WebAppInterface(웹뷰클래스.this), "인터페이스이름");

 

를 통해서 react 웹쪽에서 "인터페이스이름"으로 함수호출 callback을 이용한다.

 

전에 리엑트 네이티브에선 반대로 웹의 이벤트를 앱쪽에서 받아달라고했었는데,

다행히 콜백들이 존재하는 것에 감사한다.

728x90
반응형
728x90
반응형

앱내에서 사용하는 Webview로 이루어진 공지사항 / 개인정보처리방침 / 이용약관 등에서

타 부서에서 네트워크가 없을때, 에러코드가 나오는 것이 보기 안좋다고 404 에러 페이지를 제작해달라고했다.

web.setWebViewClient(new CustomWebViewClient(){
    @Override
    public void onReceivedError(WebView view, int errorcode, String description, String failingUrl) {
        if(errorcode == 404){
            web.loadUrl("file:///android_asset/html/error404.html");
        }else {
            web.loadUrl("file:///android_asset/html/errorElse.html");
        }
    }
});

해당 코드로, asset 폴더안에 html 폴더를 만들고(선택사항), html 파일을 퍼블리셔분에게 받아서

error가 나왔을때, 웹뷰에서 해당 html을 보여주는 식으로 작성해서 문제를 해결했다.

현재 웹뷰에서 데이터를 주고받는 것이 아니라, 404말고는 나올 에러가 없지만, error code에따라 분기처리 해놓았다.

728x90
반응형
728x90
반응형

앱내에서 SEND action을 통해 데이터 정보를 공유할때

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);

로 시작하는 intent 에서 에레가 발생했다.

 

정확한 위치는

shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(shareIntent, "Share using"));

에서 에러가 났는데, 해당 에러 내용은 

 

E/DatabaseUtils: Writing exception to parcel
    java.lang.SecurityException: Permission Denial: reading androidx.core.content.FileProvider uri content://프로젝트이름.FileProvider/파일경로 from pid=28663, uid=1000 requires the provider be exported, or grantUriPermission()
        at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:835)
        at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:695)
        at android.content.ContentProvider$Transport.query(ContentProvider.java:234)
        at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:107)
        at android.os.Binder.execTransactInternal(Binder.java:1179)
        at android.os.Binder.execTransact(Binder.java:1143)

 

였다. 

 

 provider be exported, or grantUriPermission() 로 stack over flow를 검색해보고 나왔던

 

manifest provider 에 exported=true 옵션과

grantUriPermission()를 모두 해도 같은 에러가 나왔다.

 

결국 

shareIntent.setClipData(ClipData.newRawUri("", uri));
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(shareIntent, "Share using"));

 

 setClipdata를 넣어서 에러 해결

728x90
반응형
728x90
반응형

안드로이드 앱 release 빌드를 하면서 처음 겪어본 에러였다.

 

1.0.1 버전부터 현재 2.2.4버전인데, 구글 플레이 스토어에 베포를 하려고 Generate Signed Bundle / APK 를 실행했더니,

잘되던 빌드가 되지않아서 살짝 당황했다.

 

에러 내용은 다음과 같다. 

Lint found fatal errors while assembling a release target.

Fix the issues identified by lint, or create a baseline to see only new errors:
```
android {
    lint {
        baseline = file("lint-baseline.xml")
    }
}
```

For more details, see https://developer.android.com/studio/write/lint#snapshot

 

린트 검사로 코드 개선  |  Android 스튜디오  |  Android Developers

테스트를 빌드하여 앱이 기능적 요구사항을 충족하는지 확인하는 것 외에도 린트를 통해 코드를 실행하여 코드에 구조적 문제가 없는지 확인하는 것이 중요합니다.

developer.android.com

 

해당 내용을 인터넷을 통해 찾아보니, string.xml 에서 값들이 제대로 명시되지 않았을때, 나오는 경우가 있다고한다.

 

현재 서비스하고있는 앱은 16개언어로 다국어 처리가 되어있는데,

 

%s %d 와 \n 등을 제대로 xml에 적용시키지않는 문제에서 발생했다.

 

\ n 등과 %s 등을 제대로 수정하고나서 다시 빌드해보니 해결되었다.

 

728x90
반응형

+ Recent posts